ARCS6 AR6-REV.24062600
読み取り中…
検索中…
一致する文字列を見つけられません
PIcontroller.hh
[詳解]
1
5//
6// Copyright (C) 2011-2019 Yuki YOKOKURA
7// This program is free software;
8// you can redistribute it and/or modify it under the terms of the FreeBSD License.
9// For details, see the License.txt file.
10
11#ifndef PICONTROLLER
12#define PICONTROLLER
13
14#include "Integrator.hh"
15#include "Limiter.hh"
16
17namespace ARCS { // ARCS名前空間
20 template <IntegralType T = IntegralType::BACKWARD_EULER>
22 public:
27 PIcontroller(const double Pgain, const double Igain, const double SmplTime)
28 : Kp(Pgain), Ki(Igain), Integ(SmplTime)
29 {
30
31 }
32
36 : Kp(r.Kp), Ki(r.Ki), Integ(r.Integ)
37 {
38
39 }
40
43
44 }
45
49 double GetSignal(const double u){
50 return Kp*u + Ki*Integ.GetSignal(u);
51 }
52
57 double GetSignal(const double u, const double Limit){
58 Integ.Enable(false); // 積分器を一旦停止
59 double ytest = Kp*u + Ki*Integ.GetSignal(u);// 制御器出力を積分値を更新せずに一旦計算
60 if(-Limit < ytest && ytest < Limit){ // リミットの範囲内だったら,
61 Integ.Enable(true); // 積分器を再開して,
62 return Kp*u + Ki*Integ.GetSignal(u); // 普通にPIの計算して返す
63 }
64 return Limiter(ytest, Limit); // リミットの外だったらリミット値を返す
65 }
66
72 double GetSignal(const double u, const double LimitIn, const double LimitOut){
73 return Kp*u + Ki*Integ.GetSignal( u - 1.0/Kp*(LimitIn - LimitOut) );
74 }
75
78 void Enable(const bool Flag){
79 Integ.Enable(Flag);
80 }
81
84 Integ.ClearIntegralValue();
85 }
86
87 private:
88 PIcontroller(const PIcontroller&) = delete;
89 const PIcontroller& operator=(const PIcontroller&) = delete;
90 double Kp;
91 double Ki;
92 Integrator<T> Integ;
93 };
94}
95
96#endif
97
リミッタ
double Limiter(const double input, const double limit)
リミッタ
Definition Limiter.cc:18
積分器(テンプレート版)
積分器
Definition Integrator.hh:40
double GetSignal(const double u)
出力信号の取得
Definition Integrator.hh:79
void Enable(const bool Flag)
積分器を動かすか止めるかの選択
Definition Integrator.hh:127
void ClearIntegralValue(void)
積分器のリセット
Definition Integrator.hh:132
PI制御器
Definition PIcontroller.hh:21
double GetSignal(const double u, const double Limit)
PI制御器出力信号の計算(積分停止法版)
Definition PIcontroller.hh:57
void Enable(const bool Flag)
積分器を動かすか止めるかの選択
Definition PIcontroller.hh:78
double GetSignal(const double u)
PI制御器出力信号の計算(通常版)
Definition PIcontroller.hh:49
void ClearIntegralValue(void)
積分器のリセット
Definition PIcontroller.hh:83
double GetSignal(const double u, const double LimitIn, const double LimitOut)
PI制御器出力信号の計算(リミット偏差フィードバック版)
Definition PIcontroller.hh:72
PIcontroller(const double Pgain, const double Igain, const double SmplTime)
コンストラクタ
Definition PIcontroller.hh:27
~PIcontroller()
デストラクタ
Definition PIcontroller.hh:42
PIcontroller(PIcontroller &&r)
ムーブコンストラクタ
Definition PIcontroller.hh:35