Erick / Mbed 2 deprecated ICE-F412

Dependencies:   mbed-rtos mbed

ICE-Application/src/ConfigurationHandler/Controls/SetpointControl.h

Committer:
jmarkel44
Date:
2017-01-24
Revision:
0:61364762ee0e

File content as of revision 0:61364762ee0e:

/******************************************************************************
 *
 * File:                SetpointControl.h
 * Desciption:          ICE Timer Control Class
 *
 *****************************************************************************/
#ifndef SETPOINTCONTROL_H
#define SETPOINTCONTROL_H

#include <string>
#include <stdio.h>

typedef enum {
    SETPOINT_CONTROL_OK,
    SETPOINT_CONTROL_UNK_STATE, 
    SETPOINT_CONTROL_ERROR,
    SETPOINT_CONTROL_DESTROY
} SetpointControlError_t;

// A setpoint control is a control based on a process variable with respect
// to a user defined control band. The output of this control object is a 
// true/false decision (for a relay, true means power on the relay).

//! SetpointControl - implements a setpoint control
class SetpointControl
{
private:
    std::string     controlFile;        // name of the control file
    std::string     id;                 // control identifier
    int             priority;           // control priority
    std::string     input;              // control input
    std::string     output;             // control output
    double          setpoint;           // setpoint value
    double          productFactor;
    bool            actingDir;          // acting direction, 1 direct - pH, 0 indirect - inhibitor
#if 0 
    double          highAlert;
    double          lowAlert;
    double          highFailsafe;
    double          lowFailsafe;
#endif
    double          tolerance;          // the error margining
    enum State {
        STATE_INIT,
        STATE_STARTUP,
        STATE_CONTROL_OFF,
        STATE_CONTROL_ON,
        STATE_DISABLE,
        STATE_RELOAD,
        STATE_MAX
    };
    State           currentState;
    
    bool validateControlData(const char *buf);
    void copyControlData(const char *buf);

    bool underLimit();          // check if reading is under the limit
    bool overLimit();           // check if reading is over the limit

    void startFeed(void);       // start a feed
    void stopFeed(void);        // stop a feed
    
    bool isVirtualOutput;       // output is virtual
public:
    /// create  a setpoint control
    SetpointControl() {
        currentState = STATE_INIT;
    };
    /// destroy a setpoint control
    ~SetpointControl() {
        printf("\r%s invoked\n", __func__);
    }

    /// load setpoint control data from a JSON configuration file
    bool load(std::string filename);

    /// unregister a setpoint control from the output thread
    void unregisterControl(void);

    /// start a setpoint control instance
    void start(void);

    /// update a setpoint control instance
    SetpointControlError_t update(void);

    //display the pertinents
    void display(void);

    std::string getControlFile(void) const {
        return controlFile;
    }
    std::string getId(void) const {
        return id;
    }
    unsigned int getPriority(void) const {
        return priority;
    }
    std::string getInput(void) const {
        return input;
    }
    std::string getOutput(void) const {
        return output;
    }
    float getProductFactor(void) const {
        return productFactor;
    }
    int getActingDir(void) const {
        return actingDir;
    }
    float getSetpoint(void) const {
        return setpoint;
    }
    
    State getCurrentState(void) const {
        return currentState;
    }
};

#endif