← All Posts

OPC UA Information Model Explained: Nodes, Address Space, and How to Browse a Server

Classic OPC exposed a list of tags. OPC UA exposes a structured, object-oriented information model: a graph of nodes representing objects, variables, methods, and types, connected by typed references, all browsable at runtime. This self-description is the biggest conceptual leap UA makes over DA, and the reason a UA client can connect to a server it has never seen and understand not just what the values are, but what the data means.

This guide covers the building blocks (nodes, the address space, objects vs variables, the type system, companion specifications), then walks through browsing a real server step by step.

Nodes: the Atomic Unit

Everything in a UA server is a node. A temperature reading is a node. The sensor object that contains it is a node. The data type "TemperatureSensor" is a node. Each node has a unique NodeId and a set of attributes: BrowseName, DisplayName, Value, and so on. There are several node classes; the ones you touch daily are:

The Address Space

The collection of all nodes in a server is its address space. Nodes are linked by references: typed relationships like HasComponent, HasProperty, Organizes. The address space is therefore a graph, not a list, and a client explores it by browsing: start at a node, follow its references, discover its children.

Object vs variable, concretely: a Motor object might have Speed and Current child variables plus a Start() method. The object gives structure; the variables hold the numbers you subscribe to.

The Type System

UA is strongly typed. Every variable has a DataType (built-in like Int32, Double, String, or a custom structure). Every object is an instance of an ObjectType. Types themselves are nodes, so the type hierarchy is part of the same browsable address space. A client reading Motor.Speed knows the type is Double and the engineering units are RPM, without an external mapping document.

Standard Namespaces and Companion Specs

UA defines a base information model (the standard server object, standard types) in the UA namespace. On top of that, companion specifications add agreed domain models: OPC UA for Machinery, Robotics, Machine Vision, Plastics, Oil & Gas, and more. A vendor that implements "OPC UA for Machinery" exposes machine state, modes, and jobs using the standard object types the spec defines, so a client built against the companion spec works against any conformant machine, regardless of vendor.

Why This Matters

Browsing a Server Step by Step

1. Connect and discover endpoints

A UA server is reached at an opc.tcp:// URL, usually on port 4840 (for example opc.tcp://192.168.1.10:4840). The first call is GetEndpoints, which lists every endpoint the server offers with its security mode and policy. Pick the one that matches your requirements; see UA security and certificates.

2. Open a SecureChannel and a Session

The SecureChannel is the (optionally encrypted) transport; the Session is the application context that holds subscriptions and state, and where you authenticate as a user if the server requires it. Every later call (Browse, Read, Subscribe) runs inside the session.

3. Browse from a root node

Browse takes a node and returns its children plus the reference types linking them. Three starting points matter:

From Objects you follow HasComponent, Organizes, and HasProperty down into the vendor's hierarchy, for example Objects → Line1 → Motor3 → Speed. Each Browse call returns one level, so a tree UI calls it as you expand nodes, while a programmatic client walks depth-first or filters by node class.

4. Read or subscribe

With a Variable's NodeId you can Read its value (with status code and timestamp) for a snapshot, or subscribe so the server pushes changes; see monitored items. Do not read in a loop once you know what you want.

Tips for large servers

Browsing on macOS

UA Expert from Unified Automation is the best-known GUI client and is distributed for Windows (with Linux support), so on a Mac the usual options are a VM, a Java client such as Prosys, or writing code against a library like open62541 or a Python or Node.js binding. MacTools OPC UA Explorer is a native macOS client built in Rust on the async-opcua stack. It covers each step above: enter the endpoint URL, choose a security mode and policy, review the server certificate before trusting it, then expand the address-space tree from the Objects folder, read and write variables, and create monitored items with a chosen sampling interval and queue size. Navigation is by clicking, so you never type NodeIds by hand.

Two uses come up most. Many PLCs, including Siemens S7-1500 and Beckhoff TwinCAT, ship a built-in UA server, so you can browse their tags and subscribe without the vendor engineering software; check the PLC's security settings and enabled endpoints first. And when you run an aggregation gateway that consolidates several PLCs, browse its address space to confirm every point is mapped and readable before SCADA depends on it.

Browse the UA Address Space on macOS

MacTools OPC UA Explorer: walk objects, variables, and types in any UA server, subscribe to changes, read and write nodes. Native macOS app.

Get MacTools OPC UA Explorer

Related: Continuous Monitoring

Voltrus SCADA browses and subscribes to OPC UA address spaces in production: dashboards, alarms, historian. Free open source core.

Further Reading