Ufe-pdi regler notizen
Aus SpaceOnEarth
Version vom 28. Dezember 2019, 13:21 Uhr von Maintenance script (Diskussion | Beiträge) (DokuwikiExportByHoxel)
I_UfE_Pdi_regler_notizen
PDI-Regler
Beispielprogramm
double e = 0;//aktuelle Regelabweichung
double ealt = 0;//vorherige Regelabweichung
double esum = 0;//Summe Regelabweichung
double w = 0;//Sollwert
double x = 0;//Istwert
double y = 0;//Stellgroesse
double YMIN=0;//Maximale Stellgroesse
double YMAX=100;//Maximale Stellgroesse
double Ta = .02;//Abtastzeit 20ms (Zeitkonstante)
double LFak = 2;//LFAK=Kp Anteil des Linearen Regelgliedes (Verstaerkung)
double IFak = 1; //IFak=I*Ta Anteil des Integralen Regelgliedes
double DFak = 0; //DFak=D/Ta Anteil des Differenziellen Regelgliedes
double AS = 1;//Ansprechschwelle des Reglers
double LP;//eingestellte pumpleistung
double LP_MIN;//Minimal zulaessige pumpleistung
double LP_MAX;//Maximal zulaessige pumpleistung
pdi_regler(){
e=t_soll-t_ist;//aktuelle Regelabweichung bestimmen
if ((e>= AS)||(e<=(-AS))){//soll was getan werden?
if ((y<YMAX)&&(y>YMIN)){ //bei uebersteuertem stellglied Integration einfrieren
esum=esum+e; //Summe der Regelabweichung aktualisieren
}
y=LFak*e+IFak*esum+DFak*(e-ealt); //Reglergleichung
ealt=e;//Regelabweichung fuer naechste Abtastung merken
}
if(y>YMAX){ //Stellgroesse 0..1023 begrenzen
y=YMAX;
} else if(y<YMIN){
y=YMIN;
}
pumpleistung=Min(LP_MIN,Max(LP_MAX,pumpleistung+y));
}
main(){
while(1){
warten();
messwerte_holen();
if(status==STATUS_REGELBETRIEB){
if(LP<LP_ZuKlein){
LP_zuklein_cn++;
if(LP_zuklein_cn>EINSCHLAFZEIT){status=STATUS_ANHALTEN;}
} else {
LP_zuklein_cn=0;
}
pdi_regler();
} else if(status==STATUS_ANHALTEN){
LP=0;
//evt waschen
} else if(status==...){
...
}
}
}
Wärmetauscherregler
Vortriebspumpe
Parameter
0@@
Messgrößen
1@@
Ermittelte Größen:
2@@
VortriebspumpenReglerInitialisierung:
3@@
VortriebspumpenReglerschritt:
4@@
Hauptzyklus (Status)
5@@\n\n