|
rllib
1
|
00001 /*************************************************************************** 00002 rlcontroller.h - description 00003 ------------------- 00004 begin : Wed Jun 16 2004 00005 copyright : (C) 2004 by Rainer Lehrig 00006 email : lehrig@t-online.de 00007 ***************************************************************************/ 00008 00009 /*************************************************************************** 00010 * * 00011 * This library is free software; you can redistribute it and/or modify * 00012 * it under the terms of the GNU LESSER GENERAL PUBLIC LICENSE as * 00013 * published by the Free Software Foundation * 00014 * * 00015 ***************************************************************************/ 00016 #ifndef _RL_CONTROLLER_H_ 00017 #define _RL_CONTROLLER_H_ 00018 00019 #include "rldefine.h" 00020 #include "rlthread.h" 00021 00027 class rlController : public rlThread 00028 { 00029 public: 00030 enum ControllerType 00031 { 00032 P = 1, 00033 I = 2, 00034 D_T1 = 3, 00035 PI = 4, 00036 PD_T1 = 5, 00037 PID_T1 = 6, 00038 PI_SUM = 7, 00039 PD_T1_SUM = 8, 00040 PID_T1_SUM = 9 00041 }; 00042 rlController(double (*_getMeasurement)() ,void (_writeOutput)(double output)); 00043 ~rlController(); 00044 void start(); 00045 void stop(); 00049 void setReference (double _reference); 00053 void setP (double _T, double _Kp); 00060 void setI (double _T, double _T1); 00067 void setD_T1 (double _T, double _TD, double _Td); 00074 void setPI (double _T, double _Kp, double _Tn); 00081 void setPD_T1 (double _T, double _Kp, double _TvP, double _Td); 00088 void setPID_T1 (double _T, double _Kpp, double _TnP, double _TvP, double _Td); 00095 void setPI_SUM (double _T, double _Kp, double _Tn); 00102 void setPD_T1_SUM (double _T, double _Kp, double _Tv, double _Td); 00109 void setPID_T1_SUM (double _T, double _Kp, double _Tn, double _Tv, double _Td); 00115 double Kp,Kpp,T,T1,Td,TD,Tn,TnP,TvP,Tv,reference; 00116 int type; 00117 int running; 00118 double d0,d1,d2,dD; 00119 double c1,c2,cD; 00120 double yk,yk_1,yk_2; 00121 double ek,ek_1,ek_2; 00122 double y1k,y1k_1,ydk,ydk_1; 00123 int dt; 00124 // callbacks 00128 double (*getMeasurement)(); 00132 void (*writeOutput)(double output); 00133 00142 int sleepLocally; 00146 double measurement; 00147 }; 00148 00149 #endif
1.7.5.1