Ecosystem Architecture
How the undoRT components fit together, and where the project stands today.
The Integration Pipeline
The full undoRT pipeline moves from Structured Text source to deterministic hardware execution in four stages. The first two stages — the st2cpp compiler and the undoCore foundation library — are now released. The remaining components are in active development.
Shared Core: undoCore
undoCore is the header-only foundation library that provides common contracts and data structures across all undoRT projects. It defines:
- •
IoBus— Abstract interface for fieldbus master synchronization - •
ProcessImage— Double-buffered memory layout for IEC 61131-3 (%I, %Q, %M) - •
STArray— IEC 61131-3 compatible array with arbitrary bounds - •
VAR_IN_OUT— Reference wrapper for in-out parameters - •
IEC 61131-3 Types— Complete set of elementary types mapped to C++20
The Deterministic Execution Loop
Traditional SoftPLCs introduce overhead through intermediate virtual machines or interpretation layers. undoPLC bypasses this by executing native C++ binaries compiled directly from Structured Text by st2cpp — no VM, no interpreter.
When paired with undoOS (a Linux Preempt-RT kernel configuration), real-time tasks are pinned to isolated CPU cores using FIFO scheduling priorities. Fieldbus communication via undoBUS (IgH EtherCAT Master) runs deterministically in user-space alongside the PLC runtime, using the IoBus interface defined in undoCore.
Today, the generated C++ from st2cpp can already be compiled and run standalone on any C++17-capable platform — the RT integration is the next step, not a prerequisite for using the compiler.
Legacy Migration via undoImport
undoImport will ingest existing commercial IDE configurations — TwinCAT (.tmc/.tpy) and CODESYS projects — extracting POU logic and variable declarations, then routing them directly into the st2cpp pipeline.
This makes undoRT immediately useful for teams with existing automation code, without requiring a full manual rewrite.
