Vypracovaný semestrální práce na ZČU z předmětu KKY/VŘS (vložené řídící systémy) na téma PŘISTÁVÁNÍ RAKETY V GRAVITAČNÍM POLI ZEMĚ

Téma práce : PŘISTÁVÁNÍ RAKETY V GRAVITAČNÍM POLI ZEMĚ

Semestrální práce je téměř funkční, zápočet jsem za ní dostal :) Trošku problém jsem měl s blokem REXLang, který nebral můj zdrojový kód a pak jsem v diagramu potřeboval aktuální čas, který se mi nepovedlo z REXu dostat, takže je definován jako konstanta TIME_GENERATOR.

Diagram v systému REX

Diagram v systému REX

zdrojové kódy pro REX

Zdrojové kódy práce jsou ke stažení: sp-kky-vrs.zip

Dokumentace

Dokumentace je ke stažení: dokumentace.pdf

Návrh regulátorů

Fyzická implementace regulátoru je realizována pomocí funkčního bloku REXlang, který je standadním blokem prostředí REX. Tento blok se skládá ze vstupů které lze mapovat na výstupy. Dále je k dispozici možnost začlenit do bloku vlastní program ve formě zdrojového kódu založeného na jazyku C. Tímto jednoduchým spojením je dána možnost vytvářet bloky, které nejsou součástí prostředí REX. V mém konkrétním příkladě je realizován jediný vstup, aktuální rychlost rakety a jeden výstup akční veličiny Wrel. Regulátor je realizován ve formě reléového, P, PI a PID. Integrální složka je aproximována pomocí numerické metody lichoběžníkového pravidla a derivační složka pomocí diferencí (rozdíl reálné a chybové veličiny) Veškerá funkčnost je zřejmá ze zdrojových kódů.

/**********************************************
* releovy regulator pro regulaci rychlosti rakety
**********************************************/
double input(3) aktualni_rychlost;
double input(4) pozadovana_rychlost;
double output(0) Wrel;
double parameter(0) Wmax;
double parameter(1) Wmin;
double e_t;
int main(void) {
    e_t = pozadovana_rychlost -
aktualni_rychlost;
    if (e_t > 0) {
        Wrel = Wmin
    } else {
        Wrel = Wmax
    }
    return 0;
}
/**********************************************
* P regulator pro regulaci rychlosti rakety *
**********************************************/
double input(3) aktualni_rychlost;
double input(4) pozadovana_rychlost;
double output(0) Wrel;
double parameter(0) P;
double e_t;
int main(void)
{
e_t = pozadovana_rychlost - aktualni_rychlost;
Wrel += (P * e_t) ;
return 0;
}
/**********************************************
* PI regulator pro regulaci rychlosti rakety *
**********************************************/
double input(3) aktualni_rychlost;
double input(4) pozadovana_rychlost;
double output(0) Wrel;
double parameter(0) P;
double parameter(1) I;
double e_t;
double sum_e = 0.0;
int main(void)
{
e_t = pozadovana_rychlost - aktualni_rychlost;
sum_e += e_t;
Wrel += (P * e_t) + (I * sum_e );
return 0;
}
/***********************************************
* PID regulator pro regulaci rychlosti rakety*
***********************************************/
double input(3) cur_speed;
double input(4) req_speed;
double output(0) Wrel;
double parameter(0) P;
double parameter(1) I;
double parameter(2) D;
double e_t;
double sum_e = 0.0;
double last_speed = 0.0;
int main(void)
{
e_t = req_speed - cur_speed;
sum_e += e_t;
Wrel = (P * e_t) + (I * sum_e) - (D * (cur_speed
- last_speed));
last_speed = cur_speed;
return 0;
}