# Real-Time Robotics Framework

### Sidebar

getting_started:tutorials:safetysystem2

# Triggering Safety Event from Control System

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/safety/SafetySystemTest2.
The example comprises a safety system with only two safety levels and two safety events. The system will start in the safety level slStart. It will stay there for three seconds after which a safety event is triggered which causes a level change to slRampingUp. The control system for this example consists of three block as shown below:

Control system of the example

When the system changes into slRampingUp the integrator is enabled. The output of the integrator starts to ramp up. As soon as the signal reaches the upper limit of the signal checker block the safety event seReset is triggered by this block. This causes a restart of the whole sequence.
Pay attention to the following points:

• The time domain of the control system is run by a periodic object. A lambda function serves as monitor function of this periodic. It outputs the integrator signal once every second.
• The safety properties and the control system are defined in separate classes. The safety system needs a reference to the control system in order to start the integrator or to reset the signal checker. On the other side the control system uses a reference to the safety system to allow its signal checker to trigger a safety event. The two classes have to be carefully designed to allow for this reciprocal referencing. One of the references has to be a pointer which must be assigned after the two objects are defined. Further, the definition of the constructor of the safety system must be placed only after the declaration of both classes. And last, a forward declaration of the control system is necessary at the beginning.