Harmony
HARMONic stabilitY assessment of PE-penetrated power systems
Loading...
Searching...
No Matches
ProportionalIntegral_controller.h
Go to the documentation of this file.
1#ifndef PROPORTIONALINTEGRAL_CONTROLLER_H
2#define PROPORTIONALINTEGRAL_CONTROLLER_H
3
4#include "Controller.h"
5
18public:
26 ProportionalIntegralController(const std::string& symbol, const std::vector<double>& value, int number_signals, std::vector<double> refs = { 0 })
27 : Controller(symbol, value, number_signals, refs) {
28 if (value.size() != 2) {
29 throw std::invalid_argument("Controller values must contain at least Kp and Ki.");
30 }
31 Kp = value[0]; // Proportional gain
32 Ki = value[1]; // Integral gain
33 zeta = 0.0; // Default damping ratio
34 bandwidth = 0.0; // Default bandwidth
35 }
36
44 void updateParameters(double newKp, double newKi, double newZeta, double newBandwidth);
45
46
54 virtual Eigen::VectorXd define_equations(const Eigen::VectorXd& x, const Eigen::VectorXd& u, const Eigen::VectorXd& c) override;
55
63 virtual Eigen::VectorXd define_equations(const double x, const double u, const double c) override;
64
66 virtual void printValues() override {
67 std::cout << " Controller type: PI \n"
68 << " Proportional Gain (Kp): " << Kp << "\n"
69 << " Integral Gain (Ki): " << Ki << "\n"
70 << " Damping Ratio (zeta): " << zeta << "\n"
71 << " Bandwidth: " << bandwidth << " Hz\n"
72 << " Reference Values: ";
73 for (const auto& ref : reference) {
74 std::cout << ref << " ";
75 }
76 std::cout << std::endl;
77 }
78
80 double getKp() const {
81 return Kp; // Get proportional gain
82 }
83
85 double getKi() const {
86 return Ki; // Get integral gain
87 }
88
90 double getZeta() const {
91 return zeta; // Get damping ratio
92 }
93
95 double getBandwidth() const {
96 return bandwidth; // Get bandwidth
97 }
98
100 virtual vector<double> getParameters() const override {
101 return { Kp, Ki, zeta, bandwidth }; // Return controller parameters
102 }
103
105 virtual void setParameters(const vector<double>& params) override {
106 if (params.size() != 4) {
107 throw std::invalid_argument("Parameter vector must contain Kp, Ki, zeta, and bandwidth.");
108 }
109 Kp = params[0];
110 Ki = params[1];
111 zeta = params[2];
112 bandwidth = params[3];
113 }
114
115private:
116 double Kp; // Proportional gain
117 double Ki; // Integral gain
118 double zeta; // Damping ratio
119 double bandwidth; // Bandwidth
120};
121
122#endif // PROPORTIONALINTEGRAL_CONTROLLER_H
Base class for reference-tracking controllers.
Abstract controller with per-channel reference values.
Definition Controller.h:17
std::vector< double > reference
Definition Controller.h:105
PI controller with optional damping and bandwidth metadata.
Definition ProportionalIntegral_controller.h:17
double getKi() const
Return the integral gain Ki.
Definition ProportionalIntegral_controller.h:85
virtual void printValues() override
Print controller type, gains, damping, bandwidth, and references.
Definition ProportionalIntegral_controller.h:66
double getKp() const
Return the proportional gain Kp.
Definition ProportionalIntegral_controller.h:80
double getBandwidth() const
Return the bandwidth (Hz).
Definition ProportionalIntegral_controller.h:95
double getZeta() const
Return the damping ratio.
Definition ProportionalIntegral_controller.h:90
virtual vector< double > getParameters() const override
Return { Kp, Ki, zeta, bandwidth }.
Definition ProportionalIntegral_controller.h:100
virtual Eigen::VectorXd define_equations(const Eigen::VectorXd &x, const Eigen::VectorXd &u, const Eigen::VectorXd &c) override
Vector PI-controller dynamics.
Definition ProportionalIntegral_controller.cpp:39
ProportionalIntegralController(const std::string &symbol, const std::vector< double > &value, int number_signals, std::vector< double > refs={ 0 })
Construct a PI controller.
Definition ProportionalIntegral_controller.h:26
void updateParameters(double newKp, double newKi, double newZeta, double newBandwidth)
Replace Kp, Ki, damping ratio, and bandwidth.
Definition ProportionalIntegral_controller.cpp:15
virtual void setParameters(const vector< double > &params) override
Set parameters from { Kp, Ki, zeta, bandwidth }.
Definition ProportionalIntegral_controller.h:105