User Tools

Site Tools


eeros_architecture:safety_system:usage

Differences

This shows you the differences between two versions of the page.

Link to this comparison view

Both sides previous revisionPrevious revision
Next revision
Previous revision
eeros_architecture:safety_system:usage [2016/11/03 17:30] – [Create a Safety System] grafeeros_architecture:safety_system:usage [2017/01/28 17:33] (current) – external edit 127.0.0.1
Line 1: Line 1:
-====== Create a Safety System ====== +====== Setup a Safety System ====== 
-The safety system is implemented as singletonIts constructors are private, and you can get an instance by calling +Every EEROS system can have exactly one safety system. As first step you have to define your safety properties as described in [[eeros_architecture:safety_system:properties|]]After this you create an instance of these properties and assign it to your safety system as follows 
 <code cpp> <code cpp>
-  SafetySystem &safetySys = SafetySystem::instance();+MySafetyProperties safetyProperties; 
 +SafetySystem safetySys(safetyProperties, period);
 </code> </code>
  
-The central attribute of the safety system is its //currentLevel//Of course, this level can be queried by everyone but only set by the safety system itself+The executor will later run the safety system as its main taskThe safety system will always be the task with the highest run frequency. The parameter ''period'' determines this frequency
  
-===== Changing the Safety Level ===== +<code cpp> 
-The only possibility to change the safety level is through the method //triggerEvent//.+// Create and run executor 
 +auto& executor = eeros::Executor::instance(); 
 +executor.setMainTask(safetySys); 
 +</code>
  
-====== Safety System Usage ====== 
-Since the safety system and the HAL (hardware abstraction layer or hardware access layer) are strongly coupled it makes sense to show the usage of both systems on this page. 
  
 +===== Changing the Safety Level =====
 +The central attribute of the safety system is its //currentLevel//. Of course, this level can be queried by everyone but only set by the safety system itself. 
 +The only possibility to change the safety level is through the method //triggerEvent//. \\
 +Triggering an event can be done by
 +  * the safety system itself (as a level action or by checking an critical input)
 +  * the control system through a special ''SignalChecker'' block
 +  * the sequencer 
  
-Sometimes you need to fire an event e.g. swInitDone+An event can be triggered by the control system or the sequencer by calling
-<code c+<code cpp
-safetySys.triggerEvent(swInitDone, privateContext);+safetySys.triggerEvent(safetyProperties.seStartRunning);
 </code> </code>
 +Please make sure to declare a safety event public if triggered by the control system or the sequencer. Private event can be triggered solely by the safety system itself. 
 +
  
-The C-style definition in class //SafetySystem//: 
-<code c> 
-void triggerEvent(uint32_t event); 
-</code> 
  
-===== Watchdog Output ==== 
-The last thing to do, is to set an watchdog output, which will be toggled on every execution of //run()//. This can easily be done with: 
-<code c> 
-SystemOutput<bool>* watchdog = hal.getLogicSystemOutput("watchdog"); 
-safetySys.setWatchdogOutput(watchdog); 
-</code> 
  
-===== Setting Up The System ===== 
  
-Before the safety system can be started, you have to define the entry level: 
-<code c> 
-safetySys.setEntryLevel(off); 
-</code> 
  
-Finally assign the safety system as the main task of the executor, so that the //run()// method will be called periodically (every millisecond, for example).  
-<code c> 
-executor.setMainTask(safetySys); 
-</code>  
eeros_architecture/safety_system/usage.1478190638.txt.gz · Last modified: 2016/11/03 17:30 by graf