====== Triggering Safety Event from Control System ======
In the EEROS library you will find a directory with examples. For this example see [[https://github.com/eeros-project/eeros-framework/blob/master/examples/system/SystemTest3.cpp|SystemTest3.cpp]].
Open a shell in the build directory of your EEROS library and run
$ sudo ./examples/system/systemTest3
IMPORTANT You have to run a program using real time threads with root privileges. We do not use the simulator in this example, hence there is no need to set the library path.
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: [{{ .:safetysystemtest2.png?500 | //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. After creating both control and safety system, the proper safety event must be registered for the check block in the control system with cs.checker.registerSafetyEvent(ss, sp.seReset);
cs.checker.setActiveLevel(sp.slRampingUp);
The second line configures the signal checker that it fires only if the active safety level is equal or greater that ''slRampingUp''.