Laelaps  2.3.5
RoadNarrows Robotics Small Outdoor Mobile Robot Project
laelaps::LaeAlarms Class Reference

Alarm class. More...

#include <laeAlarms.h>

Public Member Functions

 LaeAlarms ()
 Default contructor.
 
virtual ~LaeAlarms ()
 Destructor.
 
virtual void update ()
 Update alarm and warning state. More...
 

Static Public Member Functions

static bool isCritical ()
 Test if critcal alarms exist. More...
 
static bool isBatteryCritical ()
 Test if battery critcal alarms exist. More...
 
static bool isSafeToOperate ()
 Test if robot is safe to operate given the current alarm state. More...
 
static void clearAlarms (LaeAlarmInfo &info)
 Clear alarm information state. More...
 
static void copyAlarms (const LaeAlarmInfo &src, LaeAlarmInfo &dst)
 Copy alarm state. More...
 

Protected Member Functions

virtual void updateSysAlarms (const LaeAlarmInfo &subsys, LaeAlarmInfo &sys)
 Update system alarm state from subsystem alarm state. More...
 

Detailed Description

Alarm class.

Definition at line 167 of file laeAlarms.h.

Member Function Documentation

void LaeAlarms::clearAlarms ( LaeAlarmInfo info)
static

Clear alarm information state.

Parameters
[in,out]infoAlarm state.

Definition at line 355 of file laeAlarms.cxx.

References laelaps::LaeAlarmInfo::m_bIsCritical, laelaps::LaeAlarmInfo::m_uAlarms, and laelaps::LaeAlarmInfo::m_uWarnings.

356 {
357  info.m_bIsCritical = false;
358  info.m_uAlarms = LAE_ALARM_NONE;
359  info.m_uWarnings = LAE_WARN_NONE;
360 }
static const u32_t LAE_WARN_NONE
The [sub]sytem warnings.
Definition: laeAlarms.h:114
u32_t m_uWarnings
warning or&#39;ed bits
Definition: laeAlarms.h:161
static const u32_t LAE_ALARM_NONE
no alarms
Definition: laeAlarms.h:74
bool m_bIsCritical
is [not] critical alarm
Definition: laeAlarms.h:159
u32_t m_uAlarms
alarm or&#39;ed bits
Definition: laeAlarms.h:160
void LaeAlarms::copyAlarms ( const LaeAlarmInfo src,
LaeAlarmInfo dst 
)
static

Copy alarm state.

Parameters
[in]srcSource alarm state.
[out]dstDestination alarm state.

Definition at line 362 of file laeAlarms.cxx.

References laelaps::LaeAlarmInfo::m_bIsCritical, laelaps::LaeAlarmInfo::m_uAlarms, and laelaps::LaeAlarmInfo::m_uWarnings.

363 {
364  dst.m_bIsCritical = src.m_bIsCritical;
365  dst.m_uAlarms = src.m_uAlarms;
366  dst.m_uWarnings = src.m_uWarnings;
367 }
u32_t m_uWarnings
warning or&#39;ed bits
Definition: laeAlarms.h:161
bool m_bIsCritical
is [not] critical alarm
Definition: laeAlarms.h:159
u32_t m_uAlarms
alarm or&#39;ed bits
Definition: laeAlarms.h:160
bool LaeAlarms::isBatteryCritical ( )
static

Test if battery critcal alarms exist.

The determination is made solely on the real-time database current state. No subsystems are queried.

Returns
Returns true or false.

Definition at line 80 of file laeAlarms.cxx.

81 {
83 }
LaeAlarmInfo m_battery
battery subsystem alarm state
Definition: laeDb.h:213
LaeDb RtDb
The real-time database.
Definition: laeDb.h:244
bool m_bIsCritical
is [not] critical alarm
Definition: laeAlarms.h:159
LaeDbAlarms m_alarms
alarm state data
Definition: laeDb.h:238
bool LaeAlarms::isCritical ( )
static

Test if critcal alarms exist.

The determination is made solely on the real-time database current state. No subsystems are queried.

Returns
Returns true or false.

Definition at line 75 of file laeAlarms.cxx.

76 {
78 }
LaeDb RtDb
The real-time database.
Definition: laeDb.h:244
LaeAlarmInfo m_system
system alarm summary state
Definition: laeDb.h:212
bool m_bIsCritical
is [not] critical alarm
Definition: laeAlarms.h:159
LaeDbAlarms m_alarms
alarm state data
Definition: laeDb.h:238
bool LaeAlarms::isSafeToOperate ( )
static

Test if robot is safe to operate given the current alarm state.

The determination is made solely on the real-time database current state. No subsystems are queried.

Returns
Returns true or false.

Definition at line 85 of file laeAlarms.cxx.

Referenced by laelaps::LaeRobot::canMove().

86 {
87  // no critical alarms
89  {
90  return true;
91  }
92  // only battery critical
95  {
96  return true;
97  }
98  // bad robot
99  else
100  {
101  return false;
102  }
103 }
static const u32_t LAE_ALARM_NONE
no alarms
Definition: laeAlarms.h:74
LaeDb RtDb
The real-time database.
Definition: laeDb.h:244
LaeAlarmInfo m_system
system alarm summary state
Definition: laeDb.h:212
bool m_bIsCritical
is [not] critical alarm
Definition: laeAlarms.h:159
u32_t m_uAlarms
alarm or&#39;ed bits
Definition: laeAlarms.h:160
static const u32_t LAE_ALARM_BATT
battery low alarm
Definition: laeAlarms.h:81
LaeDbAlarms m_alarms
alarm state data
Definition: laeDb.h:238
void LaeAlarms::update ( )
virtual

Update alarm and warning state.

Status, alarms, and erros from all monitored subsystems are processed to provide a unified alarm framework. The alarm state is written to the Laelaps real-time database.

Definition at line 105 of file laeAlarms.cxx.

References laelaps::LaeAlarmInfo::m_bIsCritical, laelaps::LaeAlarmInfo::m_uAlarms, laelaps::LaeAlarmInfo::m_uWarnings, motor::roboclaw::ParamStatusErrLogicBattHigh, motor::roboclaw::ParamStatusErrLogicBattLow, motor::roboclaw::ParamStatusErrMainBattHigh, motor::roboclaw::ParamStatusErrMot1Fault, motor::roboclaw::ParamStatusErrMot2Fault, motor::roboclaw::ParamStatusErrTemp, motor::roboclaw::ParamStatusWarnMainBattHigh, motor::roboclaw::ParamStatusWarnMainBattLow, motor::roboclaw::ParamStatusWarnMot1OverCur, motor::roboclaw::ParamStatusWarnMot2OverCur, and motor::roboclaw::ParamStatusWarnTemp.

Referenced by laelaps::LaeThreadWd::exec().

106 {
107  LaeAlarmInfo sys; // system alarms
108  LaeAlarmInfo subsys; // subsystem alarms
109  LaeAlarmInfo mot1; // motor 1 subsystem alarms
110  LaeAlarmInfo mot2; // motor 2 subsystem alarms
111  LaeAlarmInfo sensors; // sensors subsytem alarms
112  u32_t uStatus; // subsystem status
113  int nCtlr; // motor controller index
114  int nMotor1, nMotor2; // motors 1 and 2 absolute indices
115 
116  // clear local copy of system alarms
117  clearAlarms(sys);
118 
119  //
120  // Determine motor controllers and motors alarm state.
121  //
122  for(nCtlr=0; nCtlr<LaeNumMotorCtlrs; ++nCtlr)
123  {
124  clearAlarms(subsys);
125  clearAlarms(mot1);
126  clearAlarms(mot2);
127 
128  uStatus = RtDb.m_motorctlr[nCtlr].m_uStatus;
129 
130  if( nCtlr == LaeMotorCtlrIdFront ) // front
131  {
132  nMotor1 = LaeMotorIdLF;
133  nMotor2 = LaeMotorIdRF;
134  }
135  else // rear
136  {
137  nMotor1 = LaeMotorIdLR;
138  nMotor2 = LaeMotorIdRR;
139  }
140 
141  // map controller status to controller alarms
142  if( uStatus & ParamStatusErrTemp )
143  {
144  subsys.m_uAlarms |= LAE_ALARM_TEMP;
145  }
146  if( uStatus & ParamStatusErrMainBattHigh )
147  {
149  }
150  if( uStatus & ParamStatusErrLogicBattHigh )
151  {
153  }
154  if( uStatus & ParamStatusErrLogicBattLow )
155  {
157  }
158 
159  // map controller status to controller warnings
160  if( uStatus & ParamStatusWarnMainBattHigh )
161  {
163  }
164  if( uStatus & ParamStatusWarnMainBattLow )
165  {
167  }
168  if( uStatus & ParamStatusWarnTemp )
169  {
170  subsys.m_uWarnings |= LAE_WARN_TEMP;
171  }
172 
173  // contoller critcal alarms
174  if( subsys.m_uAlarms & LAE_CRIT_MOTCTLR )
175  {
176  subsys.m_bIsCritical = true;
177  }
178 
179  // motor alarms
180  if( uStatus & ParamStatusErrMot1Fault )
181  {
183  }
184  if( uStatus & ParamStatusErrMot2Fault )
185  {
187  }
188 
189  // motor warnings
190  if( uStatus & ParamStatusWarnMot1OverCur )
191  {
193  }
194  if( uStatus & ParamStatusWarnMot2OverCur )
195  {
197  }
198 
199  // motor critcal alarms
200  if( mot1.m_uAlarms & LAE_CRIT_MOT )
201  {
202  mot1.m_bIsCritical = true;
203  }
204  if( mot2.m_uAlarms & LAE_CRIT_MOT )
205  {
206  mot2.m_bIsCritical = true;
207  }
208 
209  // copy to database
210  copyAlarms(subsys, RtDb.m_alarms.m_motorctlr[nCtlr]);
211  copyAlarms(mot1, RtDb.m_alarms.m_motor[nMotor1]);
212  copyAlarms(mot2, RtDb.m_alarms.m_motor[nMotor2]);
213 
214  // update system alarms from subsystem state
215  updateSysAlarms(subsys, sys);
216  updateSysAlarms(mot1, sys);
217  updateSysAlarms(mot2, sys);
218  }
219 
220  //
221  // Determine battery alarm state
222  //
223  clearAlarms(subsys);
224 
226  {
227  subsys.m_uAlarms |= LAE_ALARM_BATT;
228  subsys.m_bIsCritical = true;
229  }
231  {
232  subsys.m_uWarnings |= LAE_WARN_BATT;
233  }
234 
235  // copy to database
237 
238  // update system alarms from subsystem state
239  updateSysAlarms(subsys, sys);
240 
241  //
242  // Determine senors alarm state
243  //
244  clearAlarms(subsys);
245 
246  if( !RtDb.m_enable.m_bImu )
247  {
248  subsys.m_uAlarms |= LAE_ALARM_IMU;
249  }
250  if( !RtDb.m_enable.m_bRange )
251  {
252  subsys.m_uAlarms |= LAE_ALARM_RANGE;
253  }
254  if( !RtDb.m_enable.m_bFCam )
255  {
256  subsys.m_uAlarms |= LAE_ALARM_FCAM;
257  }
258 
259  // copy to database
261 
262  // update system alarms from subsystem state
263  updateSysAlarms(subsys, sys);
264 
265  //
266  // Other system alarms.
267  //
269  {
270  sys.m_uAlarms |= LAE_ALARM_ESTOP;
271  }
272 
273  // copy system alarms to database
275 
276  //
277  // Final settings
278  //
280  {
282  }
283  else
284  {
286  }
287 
288  //fprintf(stderr, "DBG: isCrit=%d, alarms=0x%x, warns=0x%x\n",
289  // RtDb.m_alarms.m_system.m_bIsCritical,
290  // RtDb.m_alarms.m_system.m_uAlarms,
291  // RtDb.m_alarms.m_system.m_uWarnings);
292 }
static const int LaeMotorIdRR
right rear
Definition: laeMotor.h:106
LaeAlarmInfo m_sensors
sensor alarms
Definition: laeDb.h:217
virtual void updateSysAlarms(const LaeAlarmInfo &subsys, LaeAlarmInfo &sys)
Update system alarm state from subsystem alarm state.
Definition: laeAlarms.cxx:294
static const u32_t LAE_WARN_MOT_OVER_CUR
motor over current warning
Definition: laeAlarms.h:134
u32_t m_uWarnings
warning or&#39;ed bits
Definition: laeAlarms.h:161
Alarm information state structure.
Definition: laeAlarms.h:157
static void copyAlarms(const LaeAlarmInfo &src, LaeAlarmInfo &dst)
Copy alarm state.
Definition: laeAlarms.cxx:362
static const u32_t LAE_ALARM_NONE
no alarms
Definition: laeAlarms.h:74
LaeDbRobotStatus m_robotstatus
robot status data
Definition: laeDb.h:229
double m_fBatterySoC
estimated battery state of charge (%)
Definition: laeDb.h:202
static const u32_t LAE_WARN_MOTCTLR_BATT_V_LOW
motor controller battery input under voltage warn
Definition: laeAlarms.h:128
LaeAlarmInfo m_battery
battery subsystem alarm state
Definition: laeDb.h:213
static const double LAE_WARN_BATT_SOC
Alarm thresholds, criticalities, etc.
Definition: laeAlarms.h:141
LaeDb RtDb
The real-time database.
Definition: laeDb.h:244
LaeAlarmInfo m_system
system alarm summary state
Definition: laeDb.h:212
static const u32_t LAE_ALARM_MOTCTLR_BATT_V_HIGH
motor controller battery input over voltage alarm
Definition: laeAlarms.h:89
bool m_bIsCritical
is [not] critical alarm
Definition: laeAlarms.h:159
static const int LaeMotorIdRF
right front
Definition: laeMotor.h:104
static const int LaeMotorIdLR
left rear
Definition: laeMotor.h:105
bool m_bImu
IMU sensor [not] enabled.
Definition: laeDb.h:125
static const u32_t LAE_WARN_TEMP
temperature warning
Definition: laeAlarms.h:120
static const u32_t LAE_ALARM_RANGE
range alarm
Definition: laeAlarms.h:108
LaeDbEnable m_enable
key gpio state data
Definition: laeDb.h:230
bool m_bFCam
Front camera [not] enabled.
Definition: laeDb.h:126
static const u32_t LAE_WARN_BATT
battery low warning
Definition: laeAlarms.h:119
static const u32_t LAE_ALARM_TEMP
temperature alarm
Definition: laeAlarms.h:82
static const u32_t LAE_ALARM_FCAM
front camera alarm
Definition: laeAlarms.h:109
static const u32_t LAE_ALARM_MOTCTLR_LOGIC_V_HIGH
motor controller logic over voltage alarm
Definition: laeAlarms.h:91
static const u32_t LAE_ALARM_MOT_FAULT
motor drive fault alarm
Definition: laeAlarms.h:101
LaeDbMotorCtlr m_motorctlr[LaeNumMotorCtlrs]
motor controller and motor data
Definition: laeDb.h:231
LaeDbEnergy m_energy
battery and energy data
Definition: laeDb.h:237
bool m_bRange
Range sensors [not] enabled.
Definition: laeDb.h:124
u32_t m_uAlarms
alarm or&#39;ed bits
Definition: laeAlarms.h:160
static const u32_t LAE_WARN_MOTCTLR_BATT_V_HIGH
motor controller battery input over voltage warning
Definition: laeAlarms.h:126
static void clearAlarms(LaeAlarmInfo &info)
Clear alarm information state.
Definition: laeAlarms.cxx:355
bool m_bIsEStopped
robot is [not] emergency stopped
Definition: laeDb.h:109
u32_t m_uStatus
status bits
Definition: laeDb.h:134
static const u32_t LAE_ALARM_ESTOP
emergency stop
Definition: laeAlarms.h:80
static const int LaeMotorIdLF
left front
Definition: laeMotor.h:103
LaeAlarmInfo m_motorctlr[LaeNumMotorCtlrs]
motor contollers subsytem state
Definition: laeDb.h:214
static const u32_t LAE_CRIT_MOT
critacal alarms for motor subsystem
Definition: laeAlarms.h:149
static const u32_t LAE_ALARM_BATT
battery low alarm
Definition: laeAlarms.h:81
static const int LaeNumMotorCtlrs
number of motor controllers
Definition: laeMotor.h:115
static const u32_t LAE_ALARM_IMU
imu alarm
Definition: laeAlarms.h:107
static const int LaeMotorCtlrIdFront
front motor controller
Definition: laeMotor.h:113
LaeDbAlarms m_alarms
alarm state data
Definition: laeDb.h:238
bool m_bAlarmState
robot is [not] alarmed
Definition: laeDb.h:110
static const u32_t LAE_CRIT_MOTCTLR
critical alarms for motor controller subsystem
Definition: laeAlarms.h:146
static const double LAE_CRIT_BATT_SOC
battery critical state of charge threshold
Definition: laeAlarms.h:143
LaeAlarmInfo m_motor[LaeMotorsNumOf]
motors subsytem state
Definition: laeDb.h:216
static const u32_t LAE_ALARM_MOTCTLR_LOGIC_V_LOW
motor contorller logic under voltage alarm
Definition: laeAlarms.h:93
void LaeAlarms::updateSysAlarms ( const LaeAlarmInfo subsys,
LaeAlarmInfo sys 
)
protectedvirtual

Update system alarm state from subsystem alarm state.

Parameters
[in]subsysSubsystem alarm state.
[out]sysSystem alarm state.

Definition at line 294 of file laeAlarms.cxx.

References laelaps::LaeAlarmInfo::m_bIsCritical, laelaps::LaeAlarmInfo::m_uAlarms, and laelaps::LaeAlarmInfo::m_uWarnings.

295 {
296  //
297  // Any critically alarms subsystem propagates up to the system level.
298  //
299  if( subsys.m_bIsCritical )
300  {
301  sys.m_bIsCritical = true;
302  }
303 
304  //
305  // Subsytems alarms that propagate up to the system level.
306  //
307  if( subsys.m_uAlarms & LAE_ALARM_TEMP )
308  {
309  sys.m_uAlarms |= LAE_ALARM_TEMP;
310  }
311  if( subsys.m_uAlarms & LAE_ALARM_BATT )
312  {
313  sys.m_uAlarms |= LAE_ALARM_BATT;
314  }
315  if( subsys.m_uAlarms & LAE_ALARM_IMU )
316  {
317  sys.m_uAlarms |= LAE_ALARM_IMU;
318  }
319  if( subsys.m_uAlarms & LAE_ALARM_RANGE )
320  {
321  sys.m_uAlarms |= LAE_ALARM_RANGE;
322  }
323  if( subsys.m_uAlarms & LAE_ALARM_FCAM )
324  {
325  sys.m_uAlarms |= LAE_ALARM_FCAM;
326  }
327 
328  //
329  // Subsystem is [not] alarmed.
330  //
331  if( subsys.m_uAlarms != LAE_ALARM_NONE )
332  {
334  }
335 
336  //
337  // Subsytems warnings that propagate up to the system level.
338  //
339  if( subsys.m_uWarnings & LAE_WARN_TEMP )
340  {
341  sys.m_uWarnings |= LAE_WARN_TEMP;
342  }
343 
344  if( subsys.m_uWarnings & LAE_WARN_BATT )
345  {
346  sys.m_uWarnings |= LAE_WARN_BATT;
347  }
348 
349  if( subsys.m_uWarnings != LAE_WARN_NONE )
350  {
352  }
353 }
static const u32_t LAE_WARN_NONE
The [sub]sytem warnings.
Definition: laeAlarms.h:114
u32_t m_uWarnings
warning or&#39;ed bits
Definition: laeAlarms.h:161
static const u32_t LAE_ALARM_NONE
no alarms
Definition: laeAlarms.h:74
bool m_bIsCritical
is [not] critical alarm
Definition: laeAlarms.h:159
static const u32_t LAE_WARN_TEMP
temperature warning
Definition: laeAlarms.h:120
static const u32_t LAE_ALARM_RANGE
range alarm
Definition: laeAlarms.h:108
static const u32_t LAE_ALARM_SUBSYS
1+ subsystem alarms
Definition: laeAlarms.h:84
static const u32_t LAE_WARN_BATT
battery low warning
Definition: laeAlarms.h:119
static const u32_t LAE_ALARM_TEMP
temperature alarm
Definition: laeAlarms.h:82
static const u32_t LAE_ALARM_FCAM
front camera alarm
Definition: laeAlarms.h:109
static const u32_t LAE_WARN_SUBSYS
1+ subsystem warnings
Definition: laeAlarms.h:121
u32_t m_uAlarms
alarm or&#39;ed bits
Definition: laeAlarms.h:160
static const u32_t LAE_ALARM_BATT
battery low alarm
Definition: laeAlarms.h:81
static const u32_t LAE_ALARM_IMU
imu alarm
Definition: laeAlarms.h:107

The documentation for this class was generated from the following files: