Introduction

uatools is ESO’s complete OPC UA tooling suite: a modern C++20 client library that implements ifw::fnd::defs::ICommAdapter (the protocol-agnostic adapter contract defined in ifw-fnd), a command-line client built on top of it, and a family of Python GUI / scripting tools for interactive use and automation.

The C++ stack carries no hard dependency on CII, rad, ifw-core, or log4cplus — only on ifw-fnd.defs for the contracts, on fmt for formatting, and (privately, via PIMPL) on open62541.

What’s in the box

  • ualib (C++). eso::uatools::Client implements ICommAdapter over the open62541 OPC UA SDK. The full contract surface is supported: read, write, browse, call, subscribe (with per-node handler binding), connection-state events, and cooperative cancellation. Discover and encryption are deferred to post-IFW26.

  • UaClient (C++). A command-line front-end that exposes the ICommAdapter operations as subcommands (status, read, write, browse, call, subscribe, watch, watch-state). The natural way to test a server, run one-shot reads/writes from a shell, or observe live state transitions.

  • Python tools. PyQt6 / asyncua-based applications:

    • UaExplorer — interactive OPC UA browser + inspector with scripting, themes (Light/Dark/Atacama), and session save/restore.

    • UaShell — bash-like interactive shell + scripting client. Navigate the address space like a filesystem (cd/ls/ tree/find), pipes, globbing, history, tab completion, .uas and .py scripts.

    • UaPlot — live plotting GUI for OPC UA variables, plus a Python client library (eso.uatools.tools.uaplot) for programmatic control.

    • UaSubscription — standalone live subscription viewer; the GUI side of UaShell’s subscribe command.

    • UaTstServer — configurable asyncua-based OPC UA test server. Used by the integration tests and as an interactive sandbox.

  • UaItestServer (C++). Standalone C++ OPC UA test server driven by a YAML address-space description. Used by the C++ integration tests and suitable for downstream-project tests.

The two stacks (C++ and Python) are independent — the Python tools talk OPC UA directly via asyncua and do not link the C++ library, while ualib carries no Python dependency. They coexist intentionally: C++ for applications and tools that need maximum throughput and a typed API; Python for operator workflows where ergonomics matter more.

Conventions used in this manual

  • Shell commands appear in fenced bash blocks.

  • C++ identifiers refer to types and functions in ifw::fnd::defs (contract) and eso::uatools (implementation).

  • Python module names refer to eso.uatools.tools.*.

  • Paths shown as $INTROOT or $PREFIX are the project’s install prefix — by convention the same place ESO/IFW projects install to today.

Scope

The scope of this manual is developers and operators using the ESO OPC UA tooling suite: the ualib C++ client library and UaClient command-line front-end, and the Python GUI / scripting tools (UaExplorer, UaShell, UaPlot, UaSubscription) together with the test servers (UaTstServer, UaItestServer).

The manual does not describe the OPC UA protocol itself; for that, the appropriate OPC Foundation documentation must be consulted.

Disclaimer

uatools is a product under active development. It is expected that modifications will be introduced in future releases, which may not be backwards compatible.

Acronyms

API

Application Programming Interface

CII

Common Infrastructure for Instrumentation

CLI

Command-Line Interface

ELT

Extremely Large Telescope

ESO

European Southern Observatory

GUI

Graphical User Interface

ICS

Instrument Control System

IFW

Instrumentation Framework

MUDPI

Multicast UDP Interface

OPC UA

OPC Unified Architecture

PIMPL

Pointer to Implementation (idiom)

RTMS

Real-Time MUDPI Stream

SDK

Software Development Kit

YAML

YAML Ain’t Markup Language

Nomenclature

Adapter (ICommAdapter)

The protocol-agnostic communication contract defined in ifw-fnd (ifw::fnd::defs::ICommAdapter) that ualib implements over OPC UA.

ualib

The C++20 OPC UA client library (eso::uatools::Client), built on open62541 via PIMPL.

UaClient

The C++ command-line front-end exposing the ICommAdapter operations as subcommands.

UaExplorer

Interactive OPC UA browser / inspector (PyQt6) with scripting, themes, and session save/restore.

UaShell

Bash-like interactive shell and scripting client for the OPC UA address space (.uas / .py scripts).

UaPlot

Live-plotting GUI for OPC UA variables, with a Python client library for programmatic control.

UaSubscription

Standalone live subscription viewer; the GUI counterpart of UaShell’s subscribe command.

UaTstServer

Configurable asyncua-based OPC UA test server used by the integration tests and as an interactive sandbox.

UaItestServer

Standalone C++ OPC UA test server driven by a YAML address-space description, for the C++ integration tests.

Subscription

A standing request to be notified when one or more OPC UA nodes change value or state.