rllib  1
rlcontroller.h
Go to the documentation of this file.
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