EEROS  1.0.0.0
API for the EEROS Real-Time Robotics Framework
SignalChecker.hpp
Go to the documentation of this file.
1 #ifndef ORG_EEROS_SIGNAL_CHECKER_HPP_
2 #define ORG_EEROS_SIGNAL_CHECKER_HPP_
3 
8 
9 namespace eeros {
10  namespace control {
11 
12  using namespace safety;
13 
14  template <typename T = double>
15  class SignalChecker : public Block1i<T> {
16  public:
17  SignalChecker(T lowerLimit, T upperLimit) :
18  lowerLimit(lowerLimit),
19  upperLimit(upperLimit),
20  fired(false),
21  safetySystem(nullptr),
22  safetyEvent(nullptr),
23  activeLevel(nullptr)
24  { }
25 
26  virtual void run() override {
27  auto val = this->in.getSignal().getValue();
28  if (!fired) {
29  if (!((val > lowerLimit) && (val < upperLimit))) {
30  if (safetySystem != nullptr && safetyEvent != nullptr) {
31  if (activeLevel == nullptr || (activeLevel != nullptr && safetySystem->getCurrentLevel() >= *activeLevel)) {
32  log.warn() << "Signal checker \'" + this->getName() + "\' fires!";
33  safetySystem->triggerEvent(*safetyEvent);
34  fired = true;
35  }
36  }
37  }
38  }
39  }
40 
41  virtual void setLimits(T lowerLimit, T upperLimit) {
42  this->lowerLimit = lowerLimit;
43  this->upperLimit = upperLimit;
44  }
45 
46  virtual void reset() {
47  fired = false;
48  }
49 
51  safetySystem = &ss;
52  safetyEvent = &e;
53  }
54 
55  virtual void setActiveLevel(SafetyLevel& level) {
56  activeLevel = &level;
57  }
58 
59  protected:
60  T lowerLimit, upperLimit;
61  bool fired;
66  };
67 
68  };
69 };
70 
71 #endif /* ORG_EEROS_SIGNAL_CHECKER_HPP_ */
Safety system.
Definition: SafetySystem.hpp:19
virtual void setLimits(T lowerLimit, T upperLimit)
Definition: SignalChecker.hpp:41
SignalChecker(T lowerLimit, T upperLimit)
Definition: SignalChecker.hpp:17
Definition: Logger.hpp:15
virtual void setActiveLevel(SafetyLevel &level)
Definition: SignalChecker.hpp:55
SafetySystem * safetySystem
Definition: SignalChecker.hpp:62
Definition: SafetyLevel.hpp:33
bool fired
Definition: SignalChecker.hpp:61
Definition: Block1i.hpp:12
Definition: SignalChecker.hpp:15
SafetyLevel * activeLevel
Definition: SignalChecker.hpp:64
Definition: Config.hpp:14
eeros::logger::Logger log
Definition: SignalChecker.hpp:65
virtual void reset()
Definition: SignalChecker.hpp:46
SafetyEvent * safetyEvent
Definition: SignalChecker.hpp:63
virtual void registerSafetyEvent(SafetySystem &ss, SafetyEvent &e)
Definition: SignalChecker.hpp:50
virtual void run() override
Definition: SignalChecker.hpp:26
Definition: SafetyLevel.hpp:21
T upperLimit
Definition: SignalChecker.hpp:60