Zur Übersicht - INFO - Neueste 50 Beiträge - Neuer Beitrag - Suchen - FAQ - Zum CC1-Forum - Zum CC-Pro-Forum

Re: PID-Regler Kategorie: Programmierung (von krassos - 3.07.2004 22:32)
Als Antwort auf Re: PID-Regler von krassos - 2.07.2004 23:09
Ich nutze:
C-Control II Unit, CC2-ReglerBoard, OSOPT V3.0
Hier eine etwas geänderte Version der function: ( ein paar erläuternde Worte nachfolgend)


/******************************************************************/
/* PID-Regler                                              
/*                                                              
/* Author    : Andreas Sperling                    
/* Vorlage   : Andreas Sperling                      
/* Version   : 0.4                                          
/* Datum     : 29. Juni 2004                        
/* geändert  : 03. Juli 2004                            
/* Getestet  : ja                                          
/* Benötigt  :                                                    
/*                                                              
/******************************************************************/

/*
Geändert: I-Anteil arbeitet nur innerhalb des Proportionalbandes
Dadurch wird die �berschwingweite bei grossen Führungssprüngen oder
grossen Störgrössen verringert.

Geändert: Abtastzeit ta wird innerhalb der function berechnet.
*/

/*
w Sollwert
x istwert
ta abtastzeit
tv vorhaltezeit (D-Anteil)
tn nachstellzeit (i-anteil)
kp proportionalanteil
*/

//konstanten für die berechnungen
const two = 2.0;
const tree = 3.0;
const zero = 0.0;
const twox  = 2000.0;
// ******************************
float ea;
float es,kd;
long z1,z2;
string diff,integral,zeit;
float ta;
function pid (int w,int x,int tv,int tn,float kp) returns int
{
int y1;float e,y,diff1;
z1=system.timer();
ta=(z1-z2);ta=ta/twox;z2=z1;if ta<0.1 or ta>20.0 ta=1.0; //Abtastzeitermittlung
e = w - x;//regelabweichung
if kp*e<500 es = es + ((ea + e) / two);else es=0.01; //i-speicher
diff1=e-ea;
kd = (kd+tv / ta * diff1)/two; //D-anteilsberechnung und d-Anteil ausklingen
y = kp * (e +(ta / tn * es) + kd); //stellwertsberechnung
y1=y;
if y>500 or y<0
{
if y>500 y1=500;
if y <0 y1=0;
}
ea = e;
//*****************************//
//kontrollanzeigen für den experimentellen betrieb
str.putfloatf(integral,ta / tn * es,3);str.putfloatf(diff,kd,3);
rblcd.clear();
rblcd.print(diff);rblcd.print(" ");
rblcd.line(2);rblcd.print(integral);integral="";diff="";
//*****************************//
return y1;
}


Also das Programm rundherum hängt natürlich stark von der Regelaufgabe ab.
Zu den Parametern:
w- INT - hier wird der Sollwert übergeben. Das int-format sollte bei den meisten aufgaben genügen.

x - int - hier wird der (gemessene) Istwert der Regelstrecke übergeben.

Bei einer einfachen Temperaturregelung wäre x also die aktuelle Temperatur und w
die Solltemperatur. Bei einer anspruchsvolleren Solarkollektorpumpe wäre w die Differenztemperatur
Kollektor-Speicher und x die Kollektortemperatur.

Der Rückgabewert kann direkt in eine entsprechende PLM-Ansteuerung weitergereicht werden.
Für einen quasistetigen Temperaturregler reicht als Ausgang ein Digitalausgang.
Mein quasistetigregler hab ich im Test mal so gestaltet:


int m2,y;
thread tick

{
loop
{
sleep 40;
regel.m2 = regel.m2 + 1;
if regel.m2 > 500 regel.m2 = 0;
}
}

function raum1(int w,int x)
{
int tv,tn;
float kp;
tv=2;tn=110;kp=30;
y=pidtest.pid(w,x,tv,tn,kp);
if y>m2 rbports.set(2,1); else rbports.set(2,0);
}

thread main
{

run tick;



}


tv -float- Vorhaltezeit definiert die grö�e des d-Anteils im regler.
je grö�er, um so stärkere Reaktion des d-Anteils. Abschalten durch tv=0.

tn-float- nachstellzeit. definiert den I-Anteil im regler. Je kleiner, um so stärker wirkt der I-Anteil.
abschalten durch sehr groÃ?e Werte.

tv und tn sind auf sekunden normiert (durch die ta berechnung innerhalb der function).

kp-float- definiert den Proportionalanteil im regler.

Eine Einstellung der Parameter von Hand erfordert etwas Gefühl und beobachtung der
einzelnen Anteile im Regler.

Richtwerte kann man wie folgt berechnen:
tu bezeichne die Totzeit der Regelstrecke. Als Totzeit bezeichnet man die Summe aller Zeiten vom
anlegen eines Eingangssignals (beispiel heizung an) bis zu einer Reaktion der Regelstrecke
( beispiel messwert am Temperaturfühler beginnt zu steigen)

tg bezeichne die Ausgleichszeit der Strecke. Die Ausgleichszeit ist die Zeit von der ersten Reaktion
bis zum erreichen des endwerts (bzw. dessen nähe). Die Ausgleichszeit beginnt also nach der Totzeit.

Jetzt die Regelparameter:  Recht brauchbare Werte kann man mit folgender Formel berechnen:
kp=0,6...0.95*tg/tu
tv=0,2...0,5*tu
tn=1...5*tu

Viel Spass beim probieren.

krassos

PS: Die praktische Einstellung der Parameter erfordert geduld und Spucke.
Im Einzelfall würde ich das aber gern hier diskutieren.


    Antwort schreiben


Antworten:

Re: PID-Regler (von guido - 9.11.2004 18:35)
    Re: PID-Regler (von krassos - 9.11.2004 18:56)
        Re: PID-Regler (von guido - 9.11.2004 20:49)
            Re: PID-Regler (von krassos - 10.11.2004 7:54)
                Re: PID-Regler (von guido - 10.11.2004 20:21)
                    Re: PID-Regler (von krassos - 11.11.2004 7:48)
                       Re: PID-Regler (von guido - 11.11.2004 19:38)
                          Re: PID-Regler (von krassos - 12.11.2004 19:19)
                             Re: PID-Regler (von guido - 12.11.2004 20:40)
                                Re: PID-Regler (von krassos - 12.11.2004 20:55)
                                   Re: PID-Regler (von guido - 14.11.2004 17:06)
                                     Re: PID-Regler (von guido - 8.12.2004 19:58)
                                       Re: PID-Regler (von krassos - 8.12.2004 22:02)
                                         Re: PID-Regler (von guido - 9.12.2004 21:23)
                                           Re: PID-Regler (von krassos - 9.12.2004 21:48)
                                             Re: PID-Regler (von Guido - 1.03.2005 17:46)
                                               Re: PID-Regler (von krassos - 7.03.2005 15:57)
                                                 Re: PID-Regler (von krassos - 7.03.2005 21:57)
                                                   Re: PID-Regler (von guido - 10.03.2005 17:37)
                                                     Re: PID-Regler (von guido - 13.03.2005 14:55)
                                                       Re: PID-Regler (von krassos - 16.03.2005 21:41)
                                                         Re: PID-Regler (von krassos - 8.04.2005 17:34)
                                                           Re: PID-Regler (von Guido - 13.04.2005 21:21)
                                                             Re: PID-Regler (von krassos - 14.04.2005 5:01)
                                                               Re: PID-Regler (von Guido - 14.04.2005 19:50)
    Re: PID-Regler (von guido - 9.11.2004 18:48)