OPC UA address space: nodes, classes, attributes, references
How an OPC UA server organizes information: the eight NodeClasses, their attributes, references between nodes and namespaces.
Nodes and NodeClasses
Everything in a server is a node. Each node has a NodeClass that defines which attributes it has:
| NodeClass | Value | Purpose | Example |
|---|---|---|---|
| Object | 1 | Container representing a thing | Motor1, Server, folder Objects |
| Variable | 2 | Holds a value | Motor1.Speed, ServerStatus.CurrentTime |
| Method | 4 | Callable function | Motor1.Start() |
| ObjectType | 8 | Type of objects | MotorType, FolderType |
| VariableType | 16 | Type of variables | AnalogItemType |
| ReferenceType | 32 | Kind of relation | HasComponent, Organizes |
| DataType | 64 | Type of values | Double, a vendor structure |
| View | 128 | Subset of the address space | maintenance view |
Attributes
All nodes share NodeId, NodeClass, BrowseName, DisplayName, Description, WriteMask. Variables add the attributes you work with every day:
| Attribute (id) | Meaning |
|---|---|
| Value (13) | Current value with status and timestamps (a DataValue) |
| DataType (14) | NodeId of the data type, e.g. i=11 Double |
| ValueRank (15) | −1 scalar, 1 one-dimensional array, n > 1 n dimensions, 0 one or more dimensions, −2 any, −3 scalar or one dimension |
| AccessLevel (17) | Bits: CurrentRead, CurrentWrite, HistoryRead… |
| UserAccessLevel (18) | The same bits for the current user |
| MinimumSamplingInterval (19) | How fast the server can sample the value |
| Historizing (20) | Whether the server records history |
References
Nodes are connected by typed references. The common ones:
Organizes— folder structure (Objects → Plant → Line1);HasComponent— part of an object (Motor1 → Speed);HasProperty— metadata (Speed → EngineeringUnits, EURange);HasTypeDefinition— instance → its type (Motor1 → MotorType);HasSubtype— type hierarchy.
Browsing is following references from a starting node, usually Objects (i=85).
Namespaces
Each node belongs to a namespace identified by a URI. The server publishes the list in Server.NamespaceArray (i=2255); the position in this array is the namespace index used in NodeIds. Index 0 is always http://opcfoundation.org/UA/ (standard nodes), index 1 is the server's local namespace; vendors and companion specifications add further URIs.
Practical consequences
- A BrowseName is not unique — the NodeId is.
- Writing fails with
BadNotWritablewhen CurrentWrite is not set in AccessLevel, withBadUserAccessDeniedwhen only UserAccessLevel forbids it. - Types make clients generic: a SCADA faceplate for
MotorTypeworks for every motor instance.
Connections
Open in Knowledge Graph →Loading the map…
Sources
- OPC 10000-3 Part 3: Address Space Model (v1.05) — OPC Foundation
- OPC 10000-5 Part 5: Information Model (v1.05) — OPC Foundation
- OPC 10000-6 Part 6: Mappings (v1.05) — OPC Foundation
Updated 2026-10-02