5 Model

5.1 General

The DataAccess model extends the variable model by defining VariableTypes. The DataItemType is the base type. ArrayItemType, BaseAnalogType and DiscreteItemType are specializations. See Figure 2. Each of these VariableTypes can be further extended to form domain or server specific DataItems.

Figure 2 – DataItem VariableType hierarchy

5.2 SemanticsChanged

The StatusCode also contains an informational bit called SemanticsChanged.

Servers that implement Data Access shall set this Bit in notifications if certain Property values defined in this standard change. The corresponding Properties are specified individually for each VariableType.

Clients that use any of these Properties should re-read them before they process the data value.

5.3 Variable Types

5.3.1 DataItemType

This VariableType defines the general characteristics of a DataItem. All other DataItem Types derive from it. The DataItemType derives from the BaseDataVariableType and therefore shares the variable model as described in OPC 10000-3 and OPC 10000-5. It is formally defined in Table 1.

Table 1 – DataItemType definition
Attribute Value
BrowseNameDataItemType
IsAbstractFalse
ValueRank−2 (−2 = ‘Any’)
DataTypeBaseDataType
References NodeClass BrowseName DataType TypeDefinition ModellingRule
Subtype of the BaseDataVariableType defined in OPC 10000-5; i.e. the Properties of that type are inherited.
HasSubtypeVariableTypeBaseAnalogTypeDefined in 5.3.2.2
HasSubtypeVariableTypeDiscreteItemTypeDefined in 5.3.3
HasSubtypeVariableTypeArrayItemTypeDefined in 5.3.4
HasPropertyVariableDefinitionStringPropertyTypeOptional
HasPropertyVariableValuePrecisionDoublePropertyTypeOptional
Conformance Units
Data Access DataItems

Definition is a vendor-specific, human readable string that specifies how the value of this DataItem is calculated. Definition is non-localized and will often contain an equation that can be parsed by certain clients.

ValuePrecision specifies the maximum precision that the Server can maintain for the item based on restrictions in the target environment.

ValuePrecision can be used for the following DataTypes:

For Float, Double, and Decimal values it specifies the number of digits after the decimal place when it is a positive number. When it is a negative number, it specifies the number of insignificant digits to the left of the decimal place.

For example a ValuePrecision of -2 specifies that the precision of the Value is to the nearest 100. The ValuePrecision should always be a whole number and it shall always be interpreted as a whole number by rounding it to the nearest whole number.

For DateTime values it shall always be a positive number which indicates the minimum time difference in nanoseconds. For example, a ValuePrecision of 20 000 000 defines a precision of 20 ms. The ValuePrecision should always be a whole number and it shall always be interpreted as a whole number by rounding it to the nearest whole number.

ValuePrecision can also be used for other subtypes of Double (like Duration) and other Number subtypes that can be represented by a Double.

The ValuePrecision Property is an approximation that is intended to provide guidance to a Client. A Server is expected to silently round any value with more precision that it supports. This implies that a Client can encounter cases where the value read back from a Server differs from the value that it wrote to the Server. This difference shall be no more than the difference suggested by this Property.

The algorithm for rounding should follow the so-called “Banker’s rounding” (aka Round half to even), in which numbers which are equidistant from the two nearest integers are rounded to the nearest even integer. Thus, 0.5 rounds down to 0; 1.5 rounds up to 2.

Other decimal fractions round as you would expect: 0.4 to 0, 0.6 to 1, 1.4 to 1, 1.6 to 2, etc. Only x.5 numbers get the "special" treatment.

5.3.2 AnalogItem VariableTypes

5.3.2.1 General

The VariableTypes in subclauses 5.3.2.2 to 5.3.2.5 define the characteristics of AnalogItems. The types have identical semantics and Properties but with diverging ModellingRules for individual Properties.

The Properties are only described once - in 5.3.2.2. The descriptions apply to the Properties for the other VariableTypes as well.

5.3.2.2 BaseAnalogType

This VariableType is the base type for analog items. All Properties are optional. Subtypes of this base type will mandate some of the Properties. The BaseAnalogType derives from the DataItemType. It is formally defined in Table 2.

Table 2 – BaseAnalogType definition
Attribute Value
BrowseNameBaseAnalogType
IsAbstractFalse
ValueRank−2 (−2 = ‘Any’)
DataTypeNumber
References NodeClass BrowseName DataType TypeDefinition ModellingRule
Subtype of the DataItemType defined in 5.3.1; i.e. the Properties of that type are inherited.
HasSubtypeVariableTypeAnalogItemTypeDefined in 5.3.2.3
HasSubtypeVariableTypeAnalogUnitTypeDefined in 5.3.2.4
HasPropertyVariableInstrumentRangeRangePropertyTypeOptional
HasPropertyVariableInstrumentNumberRangeNumberRangePropertyTypeOptional
HasPropertyVariableEURangeRangePropertyTypeOptional
HasPropertyVariableEUNumberRangeNumberRangePropertyTypeOptional
HasPropertyVariableEngineeringUnitsEUInformationPropertyTypeOptional
Conformance Units
Data Access BaseAnalogType

The following paragraphs describe the Properties of this VariableType. If the analog item’s Value contains an array, the Properties shall apply to all elements in the array.

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

Although defined as optional, it is strongly recommended for Servers to support this Property. Without an InstrumentRange being provided, Clients will commonly assume the full range according to the DataType.

The InstrumentRange Property can also be used to restrict a Built-in DataType such as Byte or Int16) to a smaller range of values.

The Range DataType is specified in 5.6.2.

If the InstrumentNumberRange Property is present, the DataType of the “low” and “high” fields of the NumberRange DataType shall match the DataType of the Variable instance.

If InstrumentNumberRange is provided, also InstrumentRange shall be provided and populated with the equivalent value for legacy reasons.

The NumberRange DataType is specified in 5.6.3.

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 of this range. Client software shall be prepared to deal with this possibility. Similarly, a Client can attempt to write a value that is outside of this range back to the server. The exact behaviour (accept, reject, clamp, etc.) in this case is Server-dependent. However, in general Servers shall be prepared to handle this.

See also 7.2 for a special monitoring filter (PercentDeadband) which is based on the engineering unit range.

If the EUNumberRange Property is present, the DataType of the “low” and “high” fields of the NumberRange DataType shall match the DataType of the Variable instance.

If EUNumberRange is provided, also EURange shall be provided and populated with the equivalent value for legacy reasons.

EngineeringUnits specifies the units for the DataItem’s value (e.g., DEGC, hertz, seconds). The EUInformation type is specified in 5.6.4. The NonHierarchical References HasQuantity (see 6.5.2) and HasEngineeringUnitDetail (see 6.5.1) can be used to expose further information for the unit.

It is important to note that understanding the units of a measurement value is essential for a uniform system. In an open system in particular where Servers from different cultures can be used, it is essential to know what the units of measurement are. Based on such knowledge, values can be converted if necessary before being used. Therefore, although defined as optional, support of the EngineeringUnits Property is strongly advised.

OPC UA recommends using the mappings defined in this document.

The StatusCode SemanticsChanged bit shall be set if any of the EURange (could change the behaviour of a Subscription if a PercentDeadband filter is used) or EngineeringUnits (could create problems if the Client uses the value to perform calculations) Properties are changed (see clause 5.2 for additional information).

5.3.2.3 AnalogItemType

This VariableType requires the EURange Property. The AnalogItemType derives from the BaseAnalogType. It is formally defined in Table 3.

Table 3 – AnalogItemType definition
Attribute Value
BrowseNameAnalogItemType
IsAbstractFalse
ValueRank−2 (−2 = ‘Any’)
DataTypeNumber
References NodeClass BrowseName DataType TypeDefinition ModellingRule
Subtype of the BaseAnalogType defined in 5.3.2.2; i.e. the Properties of that type are inherited.
HasSubtypeVariableTypeAnalogUnitRangeTypeDefined in 5.3.2.5
HasSubtypeVariableTypeAnalogNumberItemTypeDefined in 5.3.2.6
HasPropertyVariableEURangeRangePropertyTypeMandatory
Conformance Units
Data Access AnalogItemType
5.3.2.4 AnalogUnitType

This VariableType requires the EngineeringUnits Property. The AnalogUnitType derives from the BaseAnalogType. It is formally defined in Table 4.

Table 4 – AnalogUnitType definition
Attribute Value
BrowseNameAnalogUnitType
IsAbstractFalse
ValueRank−2 (−2 = ‘Any’)
DataTypeNumber
References NodeClass BrowseName DataType TypeDefinition ModellingRule
Subtype of the BaseAnalogType defined in 5.3.2.2; i.e. the Properties of that type are inherited.
HasPropertyVariableEngineeringUnitsEUInformationPropertyTypeMandatory
Conformance Units
Data Access AnalogUnitType
5.3.2.5 AnalogUnitRangeType

The AnalogUnitRangeType derives from the AnalogItemType and additionally requires the EngineeringUnits Property. It is formally defined in Table 5.

Table 5 – AnalogUnitRangeType definition
Attribute Value
BrowseNameAnalogUnitRangeType
IsAbstractFalse
ValueRank−2 (−2 = ‘Any’)
DataTypeNumber
References NodeClass BrowseName DataType TypeDefinition ModellingRule
Subtype of the AnalogItemType defined in 5.3.2.3; i.e. the Properties of that type are inherited.
HasSubtypeVariableTypeAnalogNumberUnitRangeTypeDefined in 5.3.2.7
HasPropertyVariableEngineeringUnitsEUInformationPropertyTypeMandatory
Conformance Units
Data Access AnalogUnitRangeType
5.3.2.6 AnalogNumberItemType

This VariableType requires the EUNumberRange Property. The AnalogNumberItemType derives from the AnalogItemType. It is formally defined in Table 6.

Table 6 – AnalogNumberItemType definition
Attribute Value
BrowseNameAnalogNumberItemType
IsAbstractFalse
ValueRank−2 (−2 = ‘Any’)
DataTypeNumber
References NodeClass BrowseName DataType TypeDefinition ModellingRule
Subtype of the AnalogItemType defined in 5.3.2.3; i.e. the Properties of that type are inherited.
HasPropertyVariableEUNumberRangeNumberRangePropertyTypeMandatory
Conformance Units
Data Access AnalogNumberItemType
5.3.2.7 AnalogNumberUnitRangeType

The AnalogNumberUnitRangeType derives from the AnalogUnitRangeType and additionally requires the EUNumberRange Property. It is formally defined in Table 7.

Table 7 – AnalogNumberUnitRangeType definition
Attribute Value
BrowseNameAnalogNumberUnitRangeType
IsAbstractFalse
ValueRank−2 (−2 = ‘Any’)
DataTypeNumber
References NodeClass BrowseName DataType TypeDefinition ModellingRule
Subtype of the AnalogUnitRangeType defined in 5.3.2.5; i.e. the Properties of that type are inherited.
HasPropertyVariableEUNumberRangeNumberRangePropertyTypeMandatory
Conformance Units
Data Access AnalogNumberUnitRangeType

5.3.3 DiscreteItemType

5.3.3.1 General

This VariableType is an abstract type. That is, no instances of this type can exist. However, it can be used in a filter when browsing or querying. The DiscreteItemType derives from the DataItemType and therefore shares all of its characteristics. It is formally defined in Table 8.

Table 8 – DiscreteItemType definition
Attribute Value
BrowseNameDiscreteItemType
IsAbstractTrue
ValueRank−2 (−2 = ‘Any’)
DataTypeBaseDataType
References NodeClass BrowseName DataType TypeDefinition ModellingRule
Subtype of the DataItemType defined in 5.2; i.e. the Properties of that type are inherited.
HasSubtypeVariableTypeTwoStateDiscreteTypeDefined in 5.3.3.2
HasSubtypeVariableTypeMultiStateDiscreteTypeDefined in 5.3.3.3
HasSubtypeVariableTypeMultiStateValueDiscreteTypeDefined in 5.3.3.4
Conformance Units
Data Access DiscreteItemType
5.3.3.2 TwoStateDiscreteType

This VariableType defines the general characteristics of a DiscreteItem that can have two states. The TwoStateDiscreteType derives from the DiscreteItemType. It is formally defined in Table 9.

Table 9 – TwoStateDiscreteType definition
Attribute Value
BrowseNameTwoStateDiscreteType
IsAbstractFalse
ValueRank−2 (−2 = ‘Any’)
DataTypeBoolean
References NodeClass BrowseName DataType TypeDefinition ModellingRule
Subtype of the DiscreteItemType defined in 5.3.3; i.e. the Properties of that type are inherited.
HasPropertyVariableTrueStateLocalizedTextPropertyTypeMandatory
HasPropertyVariableFalseStateLocalizedTextPropertyTypeMandatory
Conformance Units
Data Access TwoState

TrueState contains a string to be associated with this DataItem when it is TRUE. This is typically used for a contact when it is in the closed (non-zero) state.

FalseState contains a string to be associated with this DataItem when it is FALSE. This is typically used for a contact when it is in the open (zero) state.

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

The StatusCode SemanticsChanged bit shall be set if any of the FalseState or TrueState Properties are changed (see 5.2 for additional information).

5.3.3.3 MultiStateDiscreteType

This VariableType defines the general characteristics of a DiscreteItem that can have more than two states. The MultiStateDiscreteType derives from the DiscreteItemType. It is formally defined in Table 10.

Table 10 – MultiStateDiscreteType definition
Attribute Value
BrowseNameMultiStateDiscreteType
IsAbstractFalse
ValueRank−2 (−2 = ‘Any’)
DataTypeUInteger
References NodeClass BrowseName DataType TypeDefinition ModellingRule
Subtype of the DiscreteItemType defined in 5.3.3; i.e. the Properties of that type are inherited.
HasPropertyVariableEnumStringsLocalizedText[]PropertyTypeMandatory
Conformance Units
Data Access MultiState

EnumStrings is a string lookup table corresponding to sequential numeric values (0, 1, 2, etc.)

Example:

Here the string "OPEN" corresponds to 0, "CLOSE" to 1 and "IN TRANSIT" to 2.

Clients should be prepared to handle item values outside of the range of the list; and robust Servers should be prepared to handle writes of illegal values, by providing error code “Bad_OutOfRange”.

If the item contains an array then this lookup table shall apply to all elements in the array.

The StatusCode SemanticsChanged bit shall be set if the EnumStrings Property is changed (see 5.2 for additional information).

5.3.3.4 MultiStateValueDiscreteType

This VariableType defines the general characteristics of a DiscreteItem that can have more than two states and where the state values (the enumeration) do not consist of consecutive numeric values (can have gaps) or where the enumeration is not zero-based. The MultiStateValueDiscreteType derives from the DiscreteItemType. It is formally defined in Table 11.

Table 11 – MultiStateValueDiscreteType definition
Attribute Value
BrowseNameMultiStateValueDiscreteType
IsAbstractFalse
ValueRank−2 (−2 = ‘Any’)
DataTypeNumber
References NodeClass BrowseName

DataType

TypeDefinition

ModellingRule
Subtype of the DiscreteItemType defined in 5.3.3; i.e. the Properties of that type are inherited.
HasPropertyVariableEnumValuesEnumValueType[]
PropertyType
Mandatory
HasPropertyVariableValueAsTextLocalizedText
PropertyType
Mandatory
Conformance Units
Data Access MultiStateValueDiscrete

EnumValues is an array of EnumValueType. Each entry of the array represents one enumeration value with its integer notation, a human-readable representation, and help information. This represents enumerations with integers that are not zero-based or have gaps (e.g. 1, 2, 4, 8, 16). See OPC 10000-3 for the definition of this type. MultiStateValueDiscrete Variables expose the current integer notation in their Value Attribute. Clients will often read the EnumValues Property in advance and cache it to lookup a name or help whenever they receive the numeric representation.

Only DataTypes that can be represented with EnumValues are allowed for Variables of MultiStateValueDiscreteType. These are Integers up to 64 Bits (signed and unsigned).

Clients should be prepared to handle item values outside of the range of the list; and robust Servers should be prepared to handle writes of illegal values, by providing error code “Bad_OutOfRange”.

The numeric representation of the current enumeration value is provided via the Value Attribute of the MultiStateValueDiscrete Variable. If the Value is scalar, the ValueAsText Property provides the localized text representation of the enumeration value. It can be used by Clients only interested in displaying the text to subscribe to the Property instead of the Value Attribute. If the Value is not scalar then ValueAsText should be Null. In that case, Clients can use the EnumValues Property to lookup the display information.

The StatusCode SemanticsChanged bit shall be set if the EnumValues Property value is changed (see clause 5.2 for additional information).

5.3.4 ArrayItemType

5.3.4.1 General

This abstract VariableType defines the general characteristics of an ArrayItem. Values are exposed in an array but the content of the array represents a single entity like an image. Other DataItems can contain arrays that represent for example several values of several temperature sensors of a boiler.

ArrayItemType or its subtype shall only be used when the Title and AxisScaleType Properties can be filled with reasonable values. If this is not the case DataItemType and subtypes like AnalogItemType, which also support arrays, shall be used. The ArrayItemType is formally defined in Table 12.

Table 12 – ArrayItemType definition
Attribute Value
BrowseNameArrayItemType
IsAbstractTrue
ValueRank0 (0 = OneOrMoreDimensions)
DataTypeBaseDataType
References NodeClass BrowseName DataType TypeDefinition ModellingRule
Subtype of the DataItemType defined in 5.3.1; i.e. the Properties of that type are inherited.
HasSubtypeVariableTypeYArrayItemTypeDefined in 5.3.4.2
HasSubtypeVariableTypeXYArrayItemTypeDefined in 5.3.4.3
HasSubtypeVariableTypeImageItemTypeDefined in 5.3.4.4
HasSubtypeVariableTypeCubeItemTypeDefined in 5.3.4.5
HasSubtypeVariableTypeNDimensionArrayItemTypeDefined in 5.3.4.6
HasPropertyVariableInstrumentRangeRangePropertyTypeOptional
HasPropertyVariableEURangeRangePropertyTypeMandatory
HasPropertyVariableEngineeringUnitsEUInformationPropertyTypeMandatory
HasPropertyVariableTitleLocalizedTextPropertyTypeMandatory
HasPropertyVariableAxisScaleTypeAxisScaleEnumerationPropertyTypeMandatory
Conformance Units
Data Access ArrayItem2Type

InstrumentRange defines the range of the Value of the ArrayItem.

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

EngineeringUnits holds the information about the engineering units of the Value of the ArrayItem.

For additional information about InstrumentRange, EURange, and EngineeringUnits see the description of BaseAnalogType in 5.3.2.2.

Title holds the user readable title of the Value of the ArrayItem.

AxisScaleType defines the scale to be used for the axis where the Value of the ArrayItem shall be displayed.

The StatusCode SemanticsChanged bit shall be set if any of the InstrumentRange, EURange, EngineeringUnits or Title Properties are changed (see 5.2 for additional information).

5.3.4.2 YArrayItemType

YArrayItemType represents a single-dimensional array of numerical values used to represent spectra or distributions where the x axis intervals are constant. YArrayItemType is formally defined in Table 13.

Table 13 – YArrayItemType definition
Attribute Value
BrowseNameYArrayItemType
IsAbstractFalse
ValueRank1
DataTypeBaseDataType
ArrayDimensions{0} (0 = UnknownSize)
References NodeClass BrowseName DataType TypeDefinition ModellingRule
Subtype of the ArrayItemType defined in 5.3.4.1
HasPropertyVariableXAxisDefinitionAxisInformationPropertyTypeMandatory
Conformance Units
Data Access YArrayItemType

The Value of the YArrayItem contains the numerical values for the Y-Axis. Engineering Units and Range for the Value are defined by corresponding Properties inherited from the ArrayItemType.

The DataType of this VariableType is restricted to SByte, Int16, Int32, Int64, Float, Double, ComplexNumberType and DoubleComplexNumberType.

The XAxisDefinition Property holds the information about the Engineering Units and Range for the X-Axis.

The StatusCode SemanticsChanged bit shall be set if any of the following five Properties are changed: InstrumentRange, EURange, EngineeringUnits, Title or XAxisDefinition (see 5.2 for additional information).

Figure 3 shows an example of how Attributes and Properties can be used in a graphical interface.

Figure 3 – Graphical view of a YArrayItem

Table 14 describes the values of each element presented in Figure 3.

Table 14 – YArrayItem item description
Attribute / Property Item value
DescriptionMagnitude Response (dB)
axisScaleTypeAxisScaleEnumeration.LINEAR
InstrumentRange.low-90
InstrumentRange.high5
EURange.low-90
EURange.high2
EngineeringUnits.namespaceUrlhttp://www.opcfoundation.org/UA/units/un/cefact
EngineeringUnits.unitId12878
EngineeringUnits.displayName“en-us”, “dB”
EngineeringUnits.description“en-us”, “decibel”
TitleMagnitude
XAxisDefinition.EngineeringUnits.namespaceUrlhttp://www.opcfoundation.org/UA/units/un/cefact
XAxisDefinition.EngineeringUnits.unitId4933722
XAxisDefinition.EngineeringUnits.displayName“en-us”, “kHz”
XAxisDefinition.EngineeringUnits.description“en-us”, “kilohertz”
XAxisDefinition.Range.low0
XAxisDefinition.Range.high25
XAxisDefinition.title“en-us”, “Frequency”
XAxisDefinition.axisScaleTypeAxisScaleEnumeration.LINEAR
XAxisDefinition.axisStepsnull

Interpretation notes:

5.3.4.3 XYArrayItemType

XYArrayItemType represents a vector of XVType values like a list of peaks, where XVType.x is the position of the peak and XVType.value is its intensity. XYArrayItemType is formally defined in Table 15.

Table 15 – XYArrayItemType definition
Attribute Value
BrowseNameXYArrayItemType
IsAbstractFalse
ValueRank1
DataTypeXVType
References NodeClass BrowseName DataType TypeDefinition ModellingRule
Subtype of the ArrayItemType defined in 5.3.4.1
HasPropertyVariableXAxisDefinitionAxisInformationPropertyTypeMandatory
Conformance Units
Data Access XYArrayItemType

The Value of the XYArrayItem contains an array of structures (XVType) where each structure specifies the position for the X-Axis (XVType.x) and the value itself (XVType.value), used for the Y-Axis. Engineering units and range for the Value are defined by corresponding Properties inherited from the ArrayItemType.

XAxisDefinition Property holds the information about the Engineering Units and Range for the X-Axis.

The axisSteps of XAxisDefinition shall be set to NULL because it is not used.

The StatusCode SemanticsChanged bit shall be set if any of the InstrumentRange, EURange, EngineeringUnits, Title or XAxisDefinition Properties are changed (see 5.2 for additional information).

5.3.4.4 ImageItemType

ImageItemType defines the general characteristics of an ImageItem which represents a matrix of values like an image, where the pixel position is given by X which is the column and Y the row. The value is the pixel intensity.

ImageItemType is formally defined in Table 16.

Table 16 – ImageItemType definition
Attribute Value
BrowseNameImageItemType
IsAbstractFalse
ValueRank2 (2 = two dimensional array)
DataTypeBaseDataType
References NodeClass BrowseName DataType TypeDefinition ModellingRule
Subtype of the ArrayItemType defined in 5.3.4.1
HasPropertyVariableXAxisDefinitionAxisInformationPropertyTypeMandatory
HasPropertyVariableYAxisDefinitionAxisInformationPropertyTypeMandatory
Conformance Units
Data Access ImageItemType

Engineering units and range for the Value are defined by corresponding Properties inherited from the ArrayItemType.

The DataType of this VariableType is restricted to SByte, Int16, Int32, Int64, Float, Double, ComplexNumberType and DoubleComplexNumberType.

The ArrayDimensions Attribute for Variables of this type or subtypes shall use the first entry in the array ([0]) to define the number of columns and the second entry ([1]) to define the number of rows, assuming the size of the matrix is not dynamic.

XAxisDefinition Property holds the information about the engineering units and range for the X-Axis.

YAxisDefinition Property holds the information about the engineering units and range for the Y-Axis.

The StatusCode.SemanticsChanged bit shall be set if any of the InstrumentRange, EURange, EngineeringUnits, Title, XAxisDefinition or YAxisDefinition Properties are changed.

5.3.4.5 CubeItemType

CubeItemType represents a cube of values like a spatial particle distribution, where the particle position is given by X which is the column, Y the row and Z the depth. In the example of a spatial partical distribution, the value is the particle size. CubeItemType is formally defined in Table 17.

Table 17 – CubeItemType definition
Attribute Value
BrowseNameCubeItemType
IsAbstractFalse
ValueRank3 (3 = three dimensional array)
DataTypeBaseDataType
References NodeClass BrowseName DataType TypeDefinition ModellingRule
Subtype of the ArrayItemType defined in 5.3.4.1
HasPropertyVariableXAxisDefinitionAxisInformationPropertyTypeMandatory
HasPropertyVariableYAxisDefinitionAxisInformationPropertyTypeMandatory
HasPropertyVariableZAxisDefinitionAxisInformationPropertyTypeMandatory
Conformance Units
Data Access CubeItemType

Engineering units and range for the Value are defined by corresponding Properties inherited from the ArrayItemType.

The DataType of this VariableType is restricted to SByte, Int16, Int32, Int64, Float, Double, ComplexNumberType and DoubleComplexNumberType.

The ArrayDimensions Attribute for Variables of this type or subtypes should use the first entry in the array ([0]) to define the number of columns, the second entry ([1]) to define the number of rows, and the third entry ([2]) define the number of steps in the Z axis, assuming the size of the matrix is not dynamic.

XAxisDefinition Property holds the information about the engineering units and range for the X-Axis.

YAxisDefinition Property holds the information about the engineering units and range for the Y-Axis.

ZAxisDefinition Property holds the information about the engineering units and range for the Z-Axis.

The StatusCode SemanticsChanged bit shall be set if any of the InstrumentRange, EURange, EngineeringUnits, Title, XAxisDefinition, YAxisDefinition or ZAxisDefinition Properties are changed (see 5.2 for additional information).

5.3.4.6 NDimensionArrayItemType

This VariableType defines a generic multi-dimensional ArrayItem.

This approach minimizes the number of types however it can be proved more difficult to utilize for control system interactions.

NDimensionArrayItemType is formally defined in Table 18.

Table 18 – NDimensionArrayItemType definition
Attribute Value
BrowseNameNDimensionArrayItemType
IsAbstractFalse
ValueRank0 (0 = OneOrMoreDimensions)
DataTypeBaseDataType
References NodeClass BrowseName DataType TypeDefinition ModellingRule
Subtype of the ArrayItemType defined in 5.3.4.1
HasPropertyVariableAxisDefinitionAxisInformation []PropertyTypeMandatory
Conformance Units
Data Access NDimensionArrayItemType

The DataType of this VariableType is restricted to SByte, Int16, Int32, Int64, Float, Double, ComplexNumberType and DoubleComplexNumberType.

AxisDefinition Property holds the information about the EngineeringUnits and Range for all axis.

The StatusCode SemanticsChanged bit shall be set if any of the InstrumentRange, EURange, EngineeringUnits, Title or AxisDefinition Properties are changed (see 5.2 for additional information).

5.4 Address Space model

DataItems are always defined as data components of other Nodes in the AddressSpace. They are never defined by themselves. A simple example of a container for DataItems would be a “Folder Object” but it can be an Object of any other type.

Figure 4 illustrates the basic AddressSpace model of a DataItem, in this case an AnalogItem.

Figure 4 – Representation of DataItems in the AddressSpace

Each DataItem is represented by a DataVariable with a specific set of Attributes. The TypeDefinition reference indicates the type of the DataItem (in this case the AnalogItemType). Additional characteristics of DataItems are defined using Properties. The VariableTypes in 5.2 specify which properties can exist. These Properties have been found to be useful for a wide range of Data Access clients. Servers that want to disclose similar information should use the OPC-defined Property rather than one that is vendor-specific.

The above figure shows only a subset of Attributes and Properties. Other Attributes that are defined for Variables in OPC 10000-3 (e.g., Description) can also be available.

5.5 Attributes of DataItems

The following Attributes of Variables (specified in detail in OPC 10000-3) are particularly important for DataItems:

Value is the most recent value of the Variable that the Server has. Its data type is defined by the DataType Attribute. The AccessLevel Attribute defines the Server’s basic ability to access current data and MinimumSamplingInterval defines how current the data is.

When a client requests the Value Attribute for reading or monitoring, the Server will always return a StatusCode (the quality and the Server’s ability to access/provide the value) and, optionally, a ServerTimestamp and/or a SourceTimestamp – based on the Client’s request. See OPC 10000-4 for details on StatusCode and the meaning of the two timestamps. Specific status codes for Data Access are defined in 7.3.

5.6 DataTypes

5.6.1 Overview

Following is a description of the DataTypes defined in this specification.

DataTypes like String, Boolean, Double or LocalizedText are defined in OPC 10000-3. Their representation is specified in OPC 10000-5.

5.6.2 Range

This structure defines the Range for a value. Its elements are defined in Table 19.

Table 19 – Range DataType structure
NameTypeDescription
Rangestructure

low

DoubleLowest value in the range.

high

DoubleHighest value in the range.

If a limit is not known a NaN shall be used.

Its representation in the AddressSpace is defined in Table 20.

Table 20 – Range definition
Attribute Value
BrowseNameRange
IsAbstractFalse
References NodeClass BrowseName DataType TypeDefinition Other
Subtype of Structure defined in OPC 10000-5.
Conformance Units
Base Info Range DataType

5.6.3 NumberRange

This structure defines the NumberRange for a value. Its elements are defined in Table 21.

Table 21 – NumberRange DataType structure
NameTypeDescription
NumberRangestructure

low

NumberLowest value in the range.

high

NumberHighest value in the range.

If a limit is not known

In case of Floating-Point DataTypes: a NaN shall be used

In case of Integer DataTypes: minimum or maximum value of the DataType should be used, e.g. Byte: 255

Its representation in the AddressSpace is defined in Table 22.

Table 22 – NumberRange definition
Attribute Value
BrowseNameNumberRange
IsAbstractFalse
References NodeClass BrowseName DataType TypeDefinition Other
Subtype of Structure defined in OPC 10000-5.
Conformance Units
Base Info NumberRange DataType

5.6.4 EUInformation

5.6.4.1 General

EUInformation contains information about the EngineeringUnits.

The intention of the OPC UA standard is not to define a set of units but a way to expose units based on existing systems. Since there is not a single worldwide set of units used in all industries, the EUInformation structure includes a separate field (the namespaceUri) to identify the system on which the exposed unit is based.

The default OPC UA mapping is based on UN/CEFACT as defined in 5.6.4.4, because it can be programmatically interpreted by generic OPC UA Clients. However, the EUInformation structure has been defined such that other standards bodies can incorporate their engineering unit definitions into OPC UA. If Servers use such an approach, then they shall identify this standards body by using a proper URI in EUInformation.namespaceUri.

5.6.4.2 Extented Unit information and Quantity

Servers can enhance EUInformation by providing the Quantity and Unit model (see 6) and referencing from EUInformation instances to the appropriate instances for quantity and unit. See Figure 5 for an example.

Figure 5 – Enhanced EUInformation example
5.6.4.3 Definition of EUInformation

The EUInformation elements are defined in Table 23.

Table 23 – EUInformation DataType structure
NameTypeDescription
EUInformationstructure

namespaceUri

StringIdentifies the organization (company, standards organization) that defines the EUInformation.

unitId

Int32

Identifier for programmatic lookup.

−1 is used if a unitId is not available.

displayName

LocalizedTextThe displayName of the engineering unit is typically the abbreviation of the engineering unit, for example "h" for hour or "m/s" for meter per second.

description

LocalizedTextContains the full name of the engineering unit such as "hour" or "meter per second".

Its representation in the AddressSpace is defined in Table 24.

Table 24 – EUInformation definition
Attribute Value
BrowseNameEUInformation
IsAbstractFalse
References NodeClass BrowseName DataType TypeDefinition Other
Subtype of Structure defined in OPC 10000-5.
Conformance Units
Base Info EUInformation
5.6.4.4 Mapping of UN/CEFACT to EUInformation

This clause specifies how to apply the Codes for Units of Measurement published by the “United Nations Centre for Trade Facilitation and Electronic Business” (see UNECE). This recommendation establishes a single list of code elements to represent units of the International System of Units (SI Units) like units of measure for length, mass (weight), volume and other quantities and in addition covers administration, commerce, transport, science, technology, industry etc. It provides a fixed code that can be used for automated evaluation.

Table 25 contains a small excerpt of the relevant columns in the UNECE recommendation:

Table 25 – Examples from the UNECE Recommendation
Excerpt from Recommendation N°. 20, Annex 1
Common CodeNameSymbol
C81radianrad
C25milliradianmrad
MMTmillimetremm
HMThectometrehm
KMTkilometrekm
KMQkilogram per cubic metrekg/m3
FAHdegree Fahrenheit°F

The UNECE recommendation in several cases defines multiple instances of the same unit (same name and symbol) for different quantities. Therefore, the relevant information for EUInformation.unitId, EUInformation.displayName, and EUInformation.description has been extracted by eliminating duplicates. This extract is available here:

https://reference.opcfoundation.org/files/UNECE_to_OPCUA.csv?u=http://opcfoundation.org/UA/

This mapping has been generated as follows:

		Int32 unitId = 0;		Int32 c;		for (i=0; i<=3;i++)		{
			c = CommonCode[i];		if (c == 0) break;		// end of Common Code		unitId = unitId << 8;		unitId = unitId | c;	}
5.6.4.5 Mapping of IEC 62720 to EUInformation

This clause specifies how to apply the Common Data Dictionary (IEC CDD) published as IEC/TS 62720 by the “International Electrotechnical Commission - IEC” to the EUInformation Structure.

The units and their identifiers, along with their relationships, is maintained in the IEC Common Data Dictionary (CDD): https://cdd.iec.ch/cdd/iec62720/iec62720.nsf/TreeFrameset. Specific units can only be found via search. A ‘*’ as search string will return all units.

Figure 6 specifies the dialog to search for units and optionally export them.

Figure 6 – Searching Units in the IEC Common Data Dictionary

Table 25 contains a small excerpt of the relevant columns in IEC 62720:

Table 26 – Examples from the IEC CDD
Excerpt of Units from IEC/TS 62720
CodeSymbolName
UAA017Ωohm
UAA033°Cdegree Celsius
UAA070μNmicronewton
UAA172Jjoule
UAA539ininch
UAB044in/s2inch per second squared
UAA497g/sgram per second

All units in the IEC CDD have been extracted and mapped to the EUInformation fields. The list is available here:

https://reference.opcfoundation.org/files/IEC62720_to_OPCUA.csv?u=http://opcfoundation.org/UA/

This mapping has been generated as follows:

	Int32 unitId = 0;	Int32 c;	for (i=0; i<6;i++)	{
		c = UnitCode[i] 0x1f;	 	unitId = unitId << 5;		unitId = unitId | c;	}
		

5.6.5 ComplexNumberType

This structure defines float IEEE 32 bits complex value. Its elements are defined in Table 27.

Table 27 – ComplexNumberType DataType structure
NameTypeDescription
ComplexNumberTypestructure

real

FloatValue real part

imaginary

FloatValue imaginary part

Its representation in the AddressSpace is defined in Table 28

Table 28 – ComplexNumberType definition
Attribute Value
BrowseNameComplexNumberType
IsAbstractFalse
References NodeClass BrowseName DataType TypeDefinition Other
Subtype of Structure defined in OPC 10000-5.
Conformance Units
Data Access Complex Number

5.6.6 DoubleComplexNumberType

This structure defines double IEEE 64 bits complex value. Its elements are defined in Table 29.

Table 29 – DoubleComplexNumberType DataType structure
NameTypeDescription
DoubleComplexNumberTypestructure

real

DoubleValue real part

imaginary

DoubleValue imaginary part

Its representation in the AddressSpace is defined in Table 30.

Table 30 – DoubleComplexNumberType definition
Attribute Value
BrowseNameDoubleComplexNumberType
IsAbstractFalse
References NodeClass BrowseName DataType TypeDefinition Other
Subtype of Structure defined in OPC 10000-5.
Conformance Units
Data Access DoubleComplex Number

5.6.7 AxisInformation

This structure defines the information for auxiliary axis for ArrayItemType Variables.

There are three typical uses of this structure:

  1. The step between points is constant and can be predicted using the range information and the number of points. In this case, axisSteps can be set to NULL.

  2. The step between points is not constant, but remains the same for a long period of time (from acquisition to acquisition for example). In this case, axisSteps contains the value of each step on the axis.

  3. The step between points is not constant and changes at every update. In this case, a type like XYArrayType shall be used and axisSteps is set to NULL.

Its elements are defined in Table 31.

Table 31 – AxisInformation DataType structure
NameTypeDescription
AxisInformationstructure

engineeringUnits

EUInformationHolds the information about the engineering units for a given axis.

eURange

RangeLimits of the range of the axis

title

LocalizedTextUser readable axis title, useful when the units are %, the Title can be “Particle size distribution”

axisScaleType

AxisScaleEnumerationLINEAR, LOG, LN, defined by AxisSteps

axisSteps

Double[]Specific value of each axis steps, can be set to “Null” if not used

Its representation in the AddressSpace is defined in Table 32.

Table 32 – AxisInformation definition
Attribute Value
BrowseNameAxisInformation
IsAbstractFalse
References NodeClass BrowseName DataType TypeDefinition Other
Subtype of Structure defined in OPC 10000-5.
Conformance Units
Data Access AxisInformationType

When the steps in the axis are constant, axisSteps can be set to “Null” and in this case, the Range limits are used to compute the steps. The number of steps in the axis comes from the parent ArrayItem.ArrayDimensions.

5.6.8 AxisScaleEnumeration

This enumeration identifies on which type of axis the data shall be displayed. Its values are defined in Table 33.

Table 33 – AxisScaleEnumeration values
NameValueDescription
LINEAR0Linear scale
LOG1Log base 10 scale
LN2Log base e scale

Its representation in the AddressSpace is defined in Table 34.

Table 34 – AxisScaleEnumeration definition
Attribute Value
BrowseNameAxisScaleEnumeration
IsAbstractFalse
References NodeClass BrowseName DataType TypeDefinition ModellingRule
Subtype of the Enumeration type defined in OPC 10000-5
HasPropertyVariableEnumStringsLocalizedText[]PropertyType
Conformance Units
Data Access ArrayItem2Type

5.6.9 XVType

This structure defines a physical value relative to a X axis and it is used as the DataType of the Value of XYArrayItemType. For details see 5.3.4.3.

Many devices can produce values that can perfectly be represented with a float IEEE 32 bits but, they can position them on the X axis with an accuracy that requires double IEEE 64 bits. For example, the peak value in an absorbance spectrum where the amplitude of the peak can be represented by a float IEEE 32 bits, but its frequency position required 10 digits which implies the use of a double IEEE 64 bits.

Its elements are defined in Table 35.

Table 35 – XVType DataType structure
NameTypeDescription
XVTypestructure

x

DoublePosition on the X axis of this value

value

FloatThe value itself

Its representation in the AddressSpace is defined in Table 36.

Table 36 – XVType definition
Attribute Value
BrowseNameXVType
IsAbstractFalse
References NodeClass BrowseName DataType TypeDefinition Other
Subtype of Structure defined in OPC 10000-5.
Conformance Units
Data Access XYArrayItemType