Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
ICE-Application/src/ConfigurationHandler/Controls/FailsafeControl.h
- Committer:
- jmarkel44
- Date:
- 2017-01-24
- Revision:
- 0:61364762ee0e
File content as of revision 0:61364762ee0e:
#ifndef FAILSAFECONTROL_H
#define FAILSAFECONTROL_H
#include <stdio.h>
#include <string>
#include "global.h"
#define FAILSAFE_CONTROL_DEBUG
typedef enum {
FAILSAFE_CONTROL_OK,
FAILSAFE_CONTROL_UNK_STATE,
FAILSAFE_CONTROL_ERROR,
} FailsafeControlError_t;
//! FailsafeControl - implements a failsafe by reading values from an
// input signal and manipulating an output.
class FailsafeControl
{
private:
std::string controlFile; // the control file
std::string id; // unique control identifier
std::string input; // sensor to read
std::string output; // output to manipulate
unsigned int priority; // control priority (typically 700)
typedef struct hfs_tag {
float value; // high-failsafe trigger value
float dutyCycle; // percentage of on-time
float interval; // in minutes
} hfs;
typedef struct lfs_tag {
float value; // low-failsafe trigger value
float dutyCycle; // percentag of on-time
float interval; // in minutes
} lfs;
lfs lfs_data; // Low Failsafe data
hfs hfs_data; // High Failsafe data
typedef struct timer_tag {
unsigned long offTime; // epoch time
unsigned long expirationTime; // epoch time
} Timer_t;
Timer_t duty_timer; // the duty timer
enum State {
STATE_INIT, // object instantiated
STATE_START, // control has been started
STATE_CONTROL_OFF, // control is not above/below limit
STATE_CONTROL_ON_LFS, // low-failsafe with output on
STATE_CONTROL_OFF_LFS, // low-failsafe with output off
STATE_CONTROL_ON_HFS, // high-failsafe with output on
STATE_CONTROL_OFF_HFS, // high-failsafe with output off
STATE_CONTROL_SENSOR_ERROR, // input sensor is faulted
STATE_MAX
};
State currentState;
bool isVirtualOutput;
bool validateControlData(const char *buf);
void copyControlData(const char *buf);
bool aboveHighFailsafe(void); // boolean check if above HFS watermark
bool belowLowFailsafe(void); // boolean check if below LFS watermark
void startHfsDutyTimer(void); // start the HFS duty timer
void stopHfsDutyTimer(void); // stop the HFS duty timer
void startLfsDutyTimer(void); // start the LFS duty timer
void stopLfsDutyTimer(void); // stop the LFS duty timer
bool dutyOnExpired(void); // boolean check if duty ON-time expired
bool dutyOffExpired(void); // boolean check if duty OFF-time expired
bool sensorError(void); // boolean check if input is faulted
void sendMailToOutput(OutputAction action);
public:
/// Create a failsafe control instance
FailsafeControl() {
currentState = STATE_INIT;
isVirtualOutput = false;
}
/// Destroy a failsafe control instance
~FailsafeControl() {
// "erased...from existence!" -- Doc Brown
printf("\r%s invoked\n", __func__);
}
/// load a failsafe control instance with data from a JSON configuration file
bool load(std::string filename);
/// start a failsafe control instance
void start(void);
/// update a failsafe control instance
FailsafeControlError_t update(void);
/// unregister a failsafe control instance
void unregisterControl(void);
/// display the pertinent data of a failsafe control instance
void display(void);
/// get control identifier
std::string getId() const {
return id;
}
};
#endif