#include "rlcontroller.h"#include "rldefine.h"#include "rlthread.h"

Go to the source code of this file.
Functions | |
| static void * | control (void *arg) |
| 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 }
1.6.3