The central concept in RTI is a network of "Data Processors", through which there is a flow of data as computation for various parts of the model is performed. In essence, its structure is very similar to MATLAB's Simulink, or other systems where modeling is done by connecting together inputs and outputs of functional blocks. The main differences is that, RTI does not have a graphical user interface for these connections and it currently only supports acyclic connection graphs.
A simple data processor with 3 inputs and 5 outputs. The update method computes output values from the input values.
Connections between blocks are created using DataProcess::connect. Usually, during the initialization of the simulation, all data processor instances are created and then the connections are established using calls to this method for all the created processors. Note that before the simulation can proceed, all inputs of all data processors have to be connected.
The updates of data processors as well as various bookkeeping tasksare handled by the ProcessorManager class. Each data processor registers itself with a singleton instance of the manager upon creation. ProcessorManager has a single update method, which is responsible from updating all the data processors in the system in the correct order, determined by the interconnections between different blocks. RTI guarantees that all inputs of a data processor are up to date before its update method is called. We also ensure valid semantics of this data flow scheme by requiring that there are no cyclic interconnections. RTI issues an error message if an attempt is made to create a cyclic interconnection graph.
This document also includes a simple example on how to build models using RTI data processors.