rlcontroller.cpp File Reference

#include "rlcontroller.h"
#include "rldefine.h"
#include "rlthread.h"
Include dependency graph for rlcontroller.cpp:
This graph shows which files directly or indirectly include this file:

Go to the source code of this file.

Functions

static void * control (void *arg)

Function Documentation

static void* control ( void *  arg  )  [static]

Definition at line 18 of file rlcontroller.cpp.

00019 {
00020   THREAD_PARAM *p = (THREAD_PARAM *) arg;
00021   rlController *c = (rlController *) p->user;
00022   while(c->running == 1)
00023   {
00024     rlsleep(c->dt);
00025     c->lock();
00026     c->ydk_1 = c->ydk;
00027     c->y1k_1 = c->y1k;
00028     c->yk_2  = c->yk_1;
00029     c->yk_1  = c->yk;
00030     c->ek_2  = c->ek_1;
00031     c->ek_1  = c->ek;
00032     c->ek    = c->reference - c->getMeasurement();
00033     switch(c->type)
00034     {
00035       case rlController::P:
00036         c->yk = c->d0*c->ek;
00037         break;
00038       case rlController::I:
00039       case rlController::D_T1:
00040       case rlController::PI:
00041       case rlController::PD_T1:
00042         c->yk = c->d0*c->ek + c->d1*c->ek_1 + c->c1*c->yk_1;
00043         break;
00044       case rlController::PID_T1:
00045         c->yk = c->d0*c->ek + c->d1*c->ek_1 + c->d2*c->ek_2 + c->c1*c->yk_1 + c->c2*c->yk_2;
00046         break;
00047       case rlController::PI_SUM:
00048         c->yk = c->Kp*c->ek + c->y1k;
00049         c->y1k = c->y1k_1 + c->d1*(c->ek+c->ek_1);
00050         break;
00051       case rlController::PD_T1_SUM:
00052         c->yk = c->Kp*c->ek + c->ydk;
00053         c->ydk = c->cD*c->ydk_1 + c->dD*(c->ek-c->ek_1);
00054         break;
00055       case rlController::PID_T1_SUM:
00056         c->yk = c->Kp*c->ek + c->y1k + c->ydk;
00057         c->y1k = c->y1k_1 + c->d1*(c->ek+c->ek_1);
00058         c->ydk = c->cD*c->ydk_1 + c->dD*(c->ek-c->ek_1);
00059         break;
00060       default:
00061         break;
00062     }
00063     c->unlock();
00064     c->writeOutput(c->yk);
00065   }
00066   return arg;
00067 } 

Generated on Mon Aug 30 20:16:16 2010 for rllib by  doxygen 1.6.3