Time domains comprise blocks which run with the same periodicity. Each time such a time domain executes everyone of its blocks runs in a predetermined way. A control system may have one or several time domains running with different periods.
A time domain must be defined as follows:
eeros::control::TimeDomain td("td1", 0.01, true);
The last parameter which is of type boolean indicates whether the time domain has to be run in realtime. After creation you can add blocks to it. Please make sure to add these blocks in the order in which they must be executed. Currently, no reordering of those blocks is done.
td.addBlock(const1); td.addBlock(gain1); ...
Finally, you have to add the time domain to the executor, refer to Executor. If a block no longer has to run - this could be the case for blocks used solely for initializing - it can be removed with
td.removeBlock(const1);
Each signals's value will be marked with a timestamp, indicating the exact time corresponding to the value of the represented physical quantity. This is for instance when the value was captured or generated.
The timestamp can be changed by blocks, if the algorithm influences the time base of the signal. This is typically the case in differentiation, integration or filtering.
The timestamp is needed for instance for operations performed between signals, which generally are not correct if the values don’t base on the same point in time. It also can be used for compensating any jitter or dead times.
Generally, time domains have to be executed with their periods having a fixed relationship, so called harmonic tasks. Please refer to Executor for further details.
Time domains are responsible to run their blocks in a predetermined way. However, if a block fails to run properly due to a fault within this block the time domain must catch this fault and be able to trigger a safety event. In order to do this you can assign a time domain a reference to the safety system together with a certain safety event which should be triggered whenever such a fault occurs, e.g.
td.registerSafetyEvent(&mySafetySys, &mySafetyEvent);
The safety system will change to a safe level for this condition and might stop the time domain with
td.stop();
As soon as the faulting condition is amended the time domain can be restarted with
td.start();
The control system offers a special transition block whenever a signal crosses from one time domain to another. Such a transition block has two different manifestations depending on the two time domains involved.
For further details of the transition block, see Transition.