Glossary · Address space

VariableType

In OPC UA, a VariableType defines the shape of Variables: the DataType, ValueRank and ArrayDimensions its instances take, and the Properties they carry. Every Variable has a HasTypeDefinition reference to one. The two roots are BaseDataVariableType for process data and PropertyType for metadata.

The standard roots

BaseVariableType at i=62 is abstract and splits into BaseDataVariableType at i=63, the type of ordinary process Variables, and PropertyType at i=68, the type of metadata Variables reached by HasProperty. Choosing between them is a modelling decision, not a cosmetic one: Properties are leaves and are expected to be static, DataVariables may have children and are expected to change.

What a VariableType constrains

A VariableType fixes the DataType, ValueRank and ArrayDimensions its instances must be compatible with, and may declare Properties that every instance carries. AnalogItemType, for example, requires EURange and EngineeringUnits, which is why a client meeting an AnalogItemType Variable knows it can render units and a range without probing. A subtype may narrow the DataType to a subtype of the parent's, never widen it.

The Part 8 family in practice

DataItemType adds Definition and ValuePrecision. AnalogItemType adds EURange, InstrumentRange and EngineeringUnits; AnalogUnitType and AnalogUnitRangeType refine it. TwoStateDiscreteType carries TrueState and FalseState texts, MultiStateDiscreteType an EnumStrings array, MultiStateValueDiscreteType an EnumValues array of value-to-text mappings. Using these instead of a bare Double or Int32 is the cheapest way to make a PLC address space self-describing.

Example

Standard VariableTypes and what they add

BaseVariableType                    (i=62, abstract)
 +- BaseDataVariableType            (i=63)   process data, may have children
 |   +- DataItemType                          + Definition, ValuePrecision
 |       +- AnalogItemType                     + EURange, InstrumentRange, EngineeringUnits
 |       |   +- AnalogUnitType
 |       |   +- AnalogUnitRangeType
 |       +- DiscreteItemType                   (abstract)
 |           +- TwoStateDiscreteType           + TrueState, FalseState
 |           +- MultiStateDiscreteType         + EnumStrings
 |           +- MultiStateValueDiscreteType    + EnumValues, ValueAsText
 +- PropertyType                    (i=68)   metadata, must be a leaf
The mistake people make: Typing every Variable as BaseDataVariableType because it works. A client cannot then scale, label or interpret the value, so units and ranges end up hardcoded in the SCADA layer. Equally wrong is giving a Property child DataVariables - Properties must be leaves, and tools that assume so will not follow the children.

Defined in: Part 3 - Address Space Model, VariableType NodeClass; Part 5 - Information Model for the standard types; Part 8 - Data Access for the analogue and discrete item types.

Last verified 7 September 2026 against OPC UA 1.05.07. OPC UA Connect is an educational resource and is not affiliated with the OPC Foundation.

Free download
OPC UA Server Acceptance Test Pack
A 40-check acceptance test you run against a vendor's server before commissioning sign-off. Weighted scoring, three hard gates, and a one-page verdict for the supplier meeting.
Get the free test pack →
Free, no course, no login