summaryrefslogtreecommitdiffstats
path: root/Project/RateLimiter.cpp
diff options
context:
space:
mode:
authorThales Lima Oliveira <thaleslima.ufu@gmail.com>2017-05-13 16:15:22 -0300
committerGitHub <noreply@github.com>2017-05-13 16:15:22 -0300
commit17d1dd82ec065eff08546ef1fd2a188ce77471b2 (patch)
tree811c788656f71692ccb0b038215dab7a87c2c0dc /Project/RateLimiter.cpp
parentfe4776d88169c048e06c142d81bfd42651c63d1d (diff)
parentd44c3a76943c90cfcbf336961d9ba3516a1c80dc (diff)
downloadPSP.git-17d1dd82ec065eff08546ef1fd2a188ce77471b2.tar.gz
PSP.git-17d1dd82ec065eff08546ef1fd2a188ce77471b2.tar.xz
PSP.git-17d1dd82ec065eff08546ef1fd2a188ce77471b2.zip
Merge pull request #32 from Thales1330/wip/controller-solver
Wip controller solver
Diffstat (limited to 'Project/RateLimiter.cpp')
-rw-r--r--Project/RateLimiter.cpp27
1 files changed, 22 insertions, 5 deletions
diff --git a/Project/RateLimiter.cpp b/Project/RateLimiter.cpp
index 5da0578..42bede1 100644
--- a/Project/RateLimiter.cpp
+++ b/Project/RateLimiter.cpp
@@ -13,10 +13,7 @@ RateLimiter::RateLimiter(int id) : ControlElement(id)
m_nodeList.push_back(nodeOut);
}
-RateLimiter::~RateLimiter()
-{
-}
-
+RateLimiter::~RateLimiter() {}
void RateLimiter::Draw(wxPoint2DDouble translation, double scale) const
{
glLineWidth(1.0);
@@ -37,7 +34,7 @@ void RateLimiter::Draw(wxPoint2DDouble translation, double scale) const
axis.push_back(m_position + wxPoint2DDouble(0, -13));
axis.push_back(m_position + wxPoint2DDouble(0, 13));
DrawLine(axis, GL_LINES);
-
+
glLineWidth(2.0);
std::vector<wxPoint2DDouble> limSymbol;
limSymbol.push_back(m_position + wxPoint2DDouble(10, -10));
@@ -95,3 +92,23 @@ void RateLimiter::UpdatePoints()
m_nodeList[1]->SetPosition(m_position + wxPoint2DDouble(0, -18));
}
}
+
+bool RateLimiter::Solve(double input, double timeStep)
+{
+ double rate = (input - m_output) / timeStep;
+
+ bool reachLimit = false;
+ if(rate > m_upLimit) {
+ rate = m_upLimit;
+ reachLimit = true;
+ } else if(rate < m_lowLimit) {
+ rate = m_lowLimit;
+ reachLimit = true;
+ }
+
+ if(reachLimit)
+ m_output += rate * timeStep;
+ else
+ m_output = input;
+ return true;
+}