User Tools

Site Tools


eeros_architecture:safety_system:properties

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:properties [2024/06/10 09:45] – [Critical Inputs and Outputs] ursgrafeeros_architecture:safety_system:properties [2026/04/12 14:47] (current) – [Entry Level] ursgraf
Line 35: Line 35:
 <code c> <code c>
   SafetyLevel slOff("off");   SafetyLevel slOff("off");
 +  SafetyLevel slBoot("boot");
   SafetyLevel slIinitializing("initialize");   SafetyLevel slIinitializing("initialize");
   SafetyLevel slRunning("running");   SafetyLevel slRunning("running");
      
   addLevel(slOff);   addLevel(slOff);
 +  addLevel(slBoot);
   addLevel(slIinitializing);   addLevel(slIinitializing);
   addLevel(slRunning);   addLevel(slRunning);
Line 50: Line 52:
   SafetyEvent seStartRunning("start running");   SafetyEvent seStartRunning("start running");
  
-  slOff.addEvent(seStartInitializing, slIinitializing, kPublicEvent);+  slBoot.addEvent(seStartInitializing, slIinitializing, kPublicEvent);
   slIinitializing.addEvent(seStartRunning, slRunning, kPrivateEvent);   slIinitializing.addEvent(seStartRunning, slRunning, kPrivateEvent);
   slRunning.addEvent(seShutDown, slOff, kPublicEvent);   slRunning.addEvent(seShutDown, slOff, kPublicEvent);
Line 77: Line 79:
 Define actions for the safety levels. Each level can cause no or one action. Define actions for the safety levels. Each level can cause no or one action.
 <code cpp> <code cpp>
-  slOff.setLevelAction([this](SafetyContext* privateContext) { +  slBoot.setLevelAction([this](SafetyContext* privateContext) { 
-    privateContext->triggerEvent(seDoSwInit);+    privateContext->triggerEvent(seStartInitializing);
   });   });
 </code> </code>
 The method //setLevelAction// accepts a function, which is used solely here and can be defined without giving it a name. In this example the function is a so called lambda function meaning that it can be passed as a parameter without prior declaration. It must take a parameter itself of type ''SafetyContext''. This ensures that the level function can trigger a private event. The method //setLevelAction// accepts a function, which is used solely here and can be defined without giving it a name. In this example the function is a so called lambda function meaning that it can be passed as a parameter without prior declaration. It must take a parameter itself of type ''SafetyContext''. This ensures that the level function can trigger a private event.
 +
 +=== Entry and Exit Actions ===
 +You also have the possibility to define an action which is executed when a safety level is entered. That means when the safety system switches to this level.
 +<code cpp>
 +  slIinitializing.setEntryAction([this](SafetyContext* privateContext) {
 +    // do anything
 +  });
 +</code>
 +
 +Further, you can define an action which is executed when a safety level is left. That means when the safety system switches from this level to another level.
 +<code cpp>
 +  slIinitializing.setExitAction([this](SafetyContext* privateContext) {
 +    // do anything
 +  });
 +</code>
  
 === Counter === === Counter ===
Line 95: Line 112:
 As a last point, you have to specify with which level the system has to start. As a last point, you have to specify with which level the system has to start.
 <code c> <code c>
-  setEntryLevel(slOff);+  setEntryLevel(slBoot);
 </code> </code>
  
eeros_architecture/safety_system/properties.1718005538.txt.gz · Last modified: by ursgraf