122c257abSJames Feist #pragma once 222c257abSJames Feist 322c257abSJames Feist #include "controller.hpp" 422c257abSJames Feist #include "ec/pid.hpp" 522c257abSJames Feist #include "fan.hpp" 622c257abSJames Feist 722c257abSJames Feist #include <memory> 822c257abSJames Feist #include <vector> 922c257abSJames Feist 1022c257abSJames Feist class ZoneInterface; 1122c257abSJames Feist 1222c257abSJames Feist /* 1322c257abSJames Feist * Base class for PID controllers. Each PID that implements this needs to 14563a356fSPatrick Venture * provide an inputProc, setptProc, and outputProc. 1522c257abSJames Feist */ 1622c257abSJames Feist class PIDController : public Controller 1722c257abSJames Feist { 1822c257abSJames Feist public: 1922c257abSJames Feist PIDController(const std::string& id, ZoneInterface* owner) : 2022c257abSJames Feist Controller(), _owner(owner), _setpoint(0), _id(id) 2122c257abSJames Feist { 2222c257abSJames Feist } 2322c257abSJames Feist 2422c257abSJames Feist virtual ~PIDController() 2522c257abSJames Feist { 2622c257abSJames Feist } 2722c257abSJames Feist 285f59c0fdSPatrick Venture virtual double inputProc(void) override = 0; 295f59c0fdSPatrick Venture virtual double setptProc(void) = 0; 305f59c0fdSPatrick Venture virtual void outputProc(double value) override = 0; 3122c257abSJames Feist 32ee30648eSPatrick Venture void process(void) override; 3322c257abSJames Feist 34ee30648eSPatrick Venture std::string getID(void) override 3522c257abSJames Feist { 3622c257abSJames Feist return _id; 3722c257abSJames Feist } 385f59c0fdSPatrick Venture double getSetpoint(void) 3922c257abSJames Feist { 4022c257abSJames Feist return _setpoint; 4122c257abSJames Feist } 425f59c0fdSPatrick Venture void setSetpoint(double setpoint) 4322c257abSJames Feist { 4422c257abSJames Feist _setpoint = setpoint; 4522c257abSJames Feist } 4622c257abSJames Feist 47563a356fSPatrick Venture ec::pid_info_t* getPIDInfo(void) 4822c257abSJames Feist { 4922c257abSJames Feist return &_pid_info; 5022c257abSJames Feist } 5122c257abSJames Feist 52*572c43daSJames Feist double getLastInput(void) 53*572c43daSJames Feist { 54*572c43daSJames Feist return lastInput; 55*572c43daSJames Feist } 56*572c43daSJames Feist 5722c257abSJames Feist protected: 5822c257abSJames Feist ZoneInterface* _owner; 5922c257abSJames Feist 6022c257abSJames Feist private: 6122c257abSJames Feist // parameters 6222c257abSJames Feist ec::pid_info_t _pid_info; 635f59c0fdSPatrick Venture double _setpoint; 6422c257abSJames Feist std::string _id; 65*572c43daSJames Feist double lastInput = std::numeric_limits<double>::quiet_NaN(); 6622c257abSJames Feist }; 67