rllib  1
 All Classes Files Functions Variables Typedefs Enumerations Enumerator Macros
Public Types | Public Member Functions | Public Attributes | List of all members
rlController Class Reference

#include <rlcontroller.h>

Inheritance diagram for rlController:
Inheritance graph
[legend]
Collaboration diagram for rlController:
Collaboration graph
[legend]

Public Types

enum  ControllerType {
  P = 1, I = 2, D_T1 = 3, PI = 4,
  PD_T1 = 5, PID_T1 = 6, PI_SUM = 7, PD_T1_SUM = 8,
  PID_T1_SUM = 9
}
 

Public Member Functions

 rlController (double(*_getMeasurement)(), void(_writeOutput)(double output))
 
 ~rlController ()
 
void start ()
 
void stop ()
 
void setReference (double _reference)
 
void setP (double _T, double _Kp)
 
void setI (double _T, double _T1)
 
void setD_T1 (double _T, double _TD, double _Td)
 
void setPI (double _T, double _Kp, double _Tn)
 
void setPD_T1 (double _T, double _Kp, double _TvP, double _Td)
 
void setPID_T1 (double _T, double _Kpp, double _TnP, double _TvP, double _Td)
 
void setPI_SUM (double _T, double _Kp, double _Tn)
 
void setPD_T1_SUM (double _T, double _Kp, double _Tv, double _Td)
 
void setPID_T1_SUM (double _T, double _Kp, double _Tn, double _Tv, double _Td)
 
void setLimits (double _yk_min, double _yk_max)
 
void resetLimits ()
 
- Public Member Functions inherited from rlThread
 rlThread (int max_semphore=1000)
 
virtual ~rlThread ()
 
int create (void *(*func)(void *), void *argument)
 
int trylock ()
 
int lock ()
 
int unlock ()
 
int waitSemaphore ()
 
int incrementSemaphore ()
 
int join (void **status)
 
int cancel ()
 
void threadExit (void *status)
 

Public Attributes

double Kp
 
double Kpp
 
double T
 
double T1
 
double Td
 
double TD
 
double Tn
 
double TnP
 
double TvP
 
double Tv
 
double reference
 
int type
 
int running
 
double d0
 
double d1
 
double d2
 
double dD
 
double c1
 
double c2
 
double cD
 
double yk
 
double yk_1
 
double yk_2
 
double ek
 
double ek_1
 
double ek_2
 
double y1k
 
double y1k_1
 
double ydk
 
double ydk_1
 
int dt
 
double(* getMeasurement )()
 
void(* writeOutput )(double output)
 
int sleepLocally
 
double measurement
 
double yk_min
 
double yk_max
 
int limited
 
- Public Attributes inherited from rlThread
pthread_t tid
 
pthread_attr_t attr
 
pthread_mutex_t mutex
 
WSEMAPHORE semaphore
 

Detailed Description

class for closed loop control
According to: F. Doerrscheid/W. Latzel, Grundlagen der Regelungstechnik, B.G. Teubner Stuttgart
Page 436-437, Regelalgorithmen mit der Trapezregel

Definition at line 27 of file rlcontroller.h.

Member Enumeration Documentation

Enumerator:
P 
I 
D_T1 
PI 
PD_T1 
PID_T1 
PI_SUM 
PD_T1_SUM 
PID_T1_SUM 

Definition at line 30 of file rlcontroller.h.

{
P = 1,
I = 2,
D_T1 = 3,
PI = 4,
PD_T1 = 5,
PID_T1 = 6,
PI_SUM = 7,
PD_T1_SUM = 8,
};

Constructor & Destructor Documentation

rlController::rlController ( double(*)()  _getMeasurement,
void(_writeOutput)(double output)   
)

Definition at line 79 of file rlcontroller.cpp.

{
type = -1;
running = 0;
getMeasurement = _getMeasurement;
writeOutput = _writeOutput;
ydk_1 = 0.0f;
ydk = 0.0f;
y1k_1 = 0.0f;
y1k = 0.0f;
yk_2 = 0.0f;
yk_1 = 0.0f;
yk = 0.0f;
ek_2 = 0.0f;
ek_1 = 0.0f;
ek = 0.0f;
limited = 0;
yk_min = -999999;
yk_max = 999999;
}
rlController::~rlController ( )

Definition at line 103 of file rlcontroller.cpp.

{
stop();
}

Member Function Documentation

void rlController::resetLimits ( )
 Reset limits for the controller output
 

Definition at line 271 of file rlcontroller.cpp.

{
yk_min = -999999;
yk_max = 999999;
limited = 0;
}
void rlController::setD_T1 ( double  _T,
double  _TD,
double  _Td 
)
                             TD * s
 Transfer function: Gr(s) = ---------
                            1 + Td*s
 T = cycle time in seconds
 

Definition at line 159 of file rlcontroller.cpp.

{
T = _T;
TD = _TD;
Td = _Td;
dt = (int) (1000.0 * T);
d0 = TD / (Td + T/2.0);
d1 = -TD / (Td + T/2.0);
c1 = (Td-T/2.0)/(Td+T/2.0);
}
void rlController::setI ( double  _T,
double  _T1 
)
                              1
 Transfer function: Gr(s) = ------
                            T1 * s
 T = cycle time in seconds
 

Definition at line 146 of file rlcontroller.cpp.

{
type = I;
T = _T;
T1 = _T1;
dt = (int) (1000.0 * T);
d0 = T/(2.0*T1);
d1 = T/(2.0*T1);
c1 = 1.0;
}
void rlController::setLimits ( double  _yk_min,
double  _yk_max 
)
 Set limits for the controller output
 

Definition at line 262 of file rlcontroller.cpp.

{
yk_min = _yk_min;
yk_max = _yk_max;
limited = 1;
}
void rlController::setP ( double  _T,
double  _Kp 
)
 Transfer function: Gr(s) = Kp
 

Definition at line 135 of file rlcontroller.cpp.

{
type = P;
T = _T;
Kp = _Kp;
dt = (int) (1000.0 * T);
d0 = Kp;
}
void rlController::setPD_T1 ( double  _T,
double  _Kp,
double  _TvP,
double  _Td 
)
                                 1 + TvP*s
 Transfer function: Gr(s) = Kp * ---------
                                 1 + Td*s
 T = cycle time in seconds
 

Definition at line 187 of file rlcontroller.cpp.

{
T = _T;
Kp = _Kp;
TvP = _TvP;
Td = _Td;
dt = (int) (1000.0 * T);
d0 = Kp * (TvP+T/2.0) / (Td + T/2.0);
d1 = -Kp * (TvP - T/2.0) / (Td + T/2.0);
c1 = (Td - T/2.0)/(Td + T/2.0);
}
void rlController::setPD_T1_SUM ( double  _T,
double  _Kp,
double  _Tv,
double  _Td 
)
                                         Tv*s
 Transfer function: Gr(s) = Kp * ( 1 + -------- )
                                       1 + Td*s
 T = cycle time in seconds
 

Definition at line 232 of file rlcontroller.cpp.

{
T = _T;
Kp = _Kp;
Tv = _Tv;
Td = _Td;
dt = (int) (1000.0 * T);
dD = Kp * (Tv/(Td+T/2.0));
cD = (Td-T/2.0)/(Td+T/2.0);
}
void rlController::setPI ( double  _T,
double  _Kp,
double  _Tn 
)
                                 1 + Tn*s
 Transfer function: Gr(s) = Kp * --------
                                  Tn*s
 T = cycle time in seconds
 

Definition at line 173 of file rlcontroller.cpp.

{
type = PI;
T = _T;
Kp = _Kp;
Tn = _Tn;
dt = (int) (1000.0 * T);
d0 = Kp * (Tn+T/2.0) / Tn;
d1 = -Kp * (Tn - T/2.0) / Tn;
c1 = 1.0;
}
void rlController::setPI_SUM ( double  _T,
double  _Kp,
double  _Tn 
)
                                        1
 Transfer function: Gr(s) = Kp * ( 1 + ---- )
                                       Tn*s
 T = cycle time in seconds
 

Definition at line 220 of file rlcontroller.cpp.

{
T = _T;
Kp = _Kp;
Tn = _Tn;
dt = (int) (1000.0 * T);
d1 = Kp * (T/2.0)/Tn;
}
void rlController::setPID_T1 ( double  _T,
double  _Kpp,
double  _TnP,
double  _TvP,
double  _Td 
)
                                  1 + TnP*s   1 + TvP*s
 Transfer function: Gr(s) = Kpp * --------- * ---------
                                    TnP*s     1 + Td*s
 T = cycle time in seconds
 

Definition at line 202 of file rlcontroller.cpp.

{
T = _T;
Kpp = _Kpp;
TnP = _TnP;
TvP = _TvP;
Td = _Td;
dt = (int) (1000.0 * T);
d0 = Kpp * ((TnP+T/2.0) / TnP) * ((TvP+T/2.0))/(Td+T/2.0);
d1 = -2.0*Kpp * (TnP*TvP - (T/2.0)*(T/2.0)) / (TnP*(Td+T/2.0));
d2 = Kpp*((TnP-T/2.0)/TnP)*((TvP-T/2.0)/(Td+T/2.0));
c1 = 2*Td/(Td+T/2.0);
c2 = -(Td-T/2.0)/(Td+T/2.0);
}
void rlController::setPID_T1_SUM ( double  _T,
double  _Kp,
double  _Tn,
double  _Tv,
double  _Td 
)
                                        1       Tv*s
 Transfer function: Gr(s) = Kp * ( 1 + ---- + -------- )
                                       Tn*s   1 + Td*s
 T = cycle time in seconds
 

Definition at line 246 of file rlcontroller.cpp.

{
T = _T;
Kp = _Kp;
Tn = _Tn;
Tv = _Tv;
Td = _Td;
dt = (int) (1000.0 * T);
d1 = Kp*T/(2.0*Tn);
dD = Kp * (Tv/(Td+T/2.0));
cD = (Td-T/2.0)/(Td+T/2.0);
}
void rlController::setReference ( double  _reference)
 Set the reference value for the controller
 

Definition at line 130 of file rlcontroller.cpp.

{
reference = _reference;
}
void rlController::start ( )

Definition at line 108 of file rlcontroller.cpp.

{
running = 1;
ydk_1 = 0.0f;
ydk = 0.0f;
y1k_1 = 0.0f;
y1k = 0.0f;
yk_2 = 0.0f;
yk_1 = 0.0f;
yk = 0.0f;
ek_2 = 0.0f;
ek_1 = 0.0f;
ek = 0.0f;
}
void rlController::stop ( )

Definition at line 124 of file rlcontroller.cpp.

Member Data Documentation

double rlController::c1

Definition at line 127 of file rlcontroller.h.

double rlController::c2

Definition at line 127 of file rlcontroller.h.

double rlController::cD

Definition at line 127 of file rlcontroller.h.

double rlController::d0

Definition at line 126 of file rlcontroller.h.

double rlController::d1

Definition at line 126 of file rlcontroller.h.

double rlController::d2

Definition at line 126 of file rlcontroller.h.

double rlController::dD

Definition at line 126 of file rlcontroller.h.

int rlController::dt

Definition at line 131 of file rlcontroller.h.

double rlController::ek

Definition at line 129 of file rlcontroller.h.

double rlController::ek_1

Definition at line 129 of file rlcontroller.h.

double rlController::ek_2

Definition at line 129 of file rlcontroller.h.

double(* rlController::getMeasurement)()
 You have to supply this function for getting the measurement
 

Definition at line 136 of file rlcontroller.h.

double rlController::Kp
 Don't set the controller parameters directly
 Use the set methods, because they will also set the coefficients
 Controller parameters are for reading only
 

Definition at line 123 of file rlcontroller.h.

double rlController::Kpp

Definition at line 123 of file rlcontroller.h.

int rlController::limited

Definition at line 160 of file rlcontroller.h.

double rlController::measurement
 last measurement 
 

Definition at line 154 of file rlcontroller.h.

double rlController::reference

Definition at line 123 of file rlcontroller.h.

int rlController::running

Definition at line 125 of file rlcontroller.h.

int rlController::sleepLocally
 Default sleepLocally = 1
 But:
 Sleeping locally might me inaccurate.
 It might be better to have a central timer and wait for it in
 double (*_getMeasurement)();
 T = cycle time in seconds
 

Definition at line 150 of file rlcontroller.h.

double rlController::T

Definition at line 123 of file rlcontroller.h.

double rlController::T1

Definition at line 123 of file rlcontroller.h.

double rlController::Td

Definition at line 123 of file rlcontroller.h.

double rlController::TD

Definition at line 123 of file rlcontroller.h.

double rlController::Tn

Definition at line 123 of file rlcontroller.h.

double rlController::TnP

Definition at line 123 of file rlcontroller.h.

double rlController::Tv

Definition at line 123 of file rlcontroller.h.

double rlController::TvP

Definition at line 123 of file rlcontroller.h.

int rlController::type

Definition at line 124 of file rlcontroller.h.

void(* rlController::writeOutput)(double output)
 You have to supply this function for writing the output
 

Definition at line 140 of file rlcontroller.h.

double rlController::y1k

Definition at line 130 of file rlcontroller.h.

double rlController::y1k_1

Definition at line 130 of file rlcontroller.h.

double rlController::ydk

Definition at line 130 of file rlcontroller.h.

double rlController::ydk_1

Definition at line 130 of file rlcontroller.h.

double rlController::yk

Definition at line 128 of file rlcontroller.h.

double rlController::yk_1

Definition at line 128 of file rlcontroller.h.

double rlController::yk_2

Definition at line 128 of file rlcontroller.h.

double rlController::yk_max

Definition at line 159 of file rlcontroller.h.

double rlController::yk_min
 limits 
 

Definition at line 158 of file rlcontroller.h.


The documentation for this class was generated from the following files: