# Real-Time Robotics Framework

### Sidebar

getting_started:tutorials:controlsystem3

# Control System Containing Various Blocks

In the EEROS library you will find a directory with examples. Open a shell in the build directory of your EEROS library and run examples/controlsystem/BlockTest1. This examples shows how single blocks can be instantiated. They can be named and their inputs and outputs can be connected to other blocks. The signals in between can be named as well. Note that this example doesn't include a control system nor an executor which runs the blocks. The blocks are run by calling their run methods manually.

The output signals of a newly created block carries a value of NaN (Not a Number). Please note that any block will output a meaningful value only after its run method processes its input values and inner state and finally writes its resulting values to its outputs.

There is another example examples/controlsystem/BlockTest2. This example encompasses a safety system and a control system. It demonstrates what happens …

1. if you forget to connect an input to an output
2. if you try to write a NaN value to a peripheral output

The system uses an output. For this reason you will need to install a simple simulator, see simulator. The following command will run the example

\$ ./blockTest2 -c BlockTest2Config.json

The control system consists of three blocks, a constant block, a gain block, and a peripheral output block. the safety system encompasses three safety levels as show below. The system will start in level initializing. The time domain is still in the stopped state and hence, the signal value of the output of the gain block is NaN. After three seconds the system switches to level running and the output signal is the value of the constant block times the gain of the gain block.

1. In order to test what happens if you read from an unconnected input comment line number 44 and recompile. This removes the connection between the constant block and the gain block. As soon as the time domain tries to run the gain block a NotConnectedFault is thrown. This causes the time domain to trigger a go to emergency event. In the safety level emergency the time domain is stopped to prevent further faults.
2. Please add line 44 and remove line 39, recompile and run the test. The constant block has no value assigned to it. This causes the time domain to calculate the peripheral output value to be NaN and a NaNOutputFault is thrown. This causes the time domain to trigger a go to emergency event. In the safety level emergency the time domain is stopped to prevent further faults.