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::ClientimplementsICommAdapterover 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
ICommAdapteroperations 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,.uasand.pyscripts.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
subscribecommand.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
bashblocks.C++ identifiers refer to types and functions in
ifw::fnd::defs(contract) andeso::uatools(implementation).Python module names refer to
eso.uatools.tools.*.Paths shown as
$INTROOTor$PREFIXare 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
|
ualib |
The C++20 OPC UA client library
( |
UaClient |
The C++ command-line front-end exposing the
|
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 ( |
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 |
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. |