Software PID Regler in C#

Do you have a question? Post it now! No Registration Necessary

Translate This Thread From German to

Threaded View
Hallo Leute,

ich muss fFC%r meine Bachelorarbeit einen Software PID-Controller
schreiben der ein Heizregister ansteuert.

Die Regelstrecke ist unbekannt, die Heizung wird durch Taktung
gesteuert. D.h. es liegen immer z.b.: 1kw an

Ich habe mal die Heizung auf 1 kw angemacht um eine Kurve mit
Beharrungszustand zu bekommen.Daraus kann man erkennen das es sich um
eine PT1-Strecke handelt. Das funktioniert alles dufte, ich bekomme
alle Werte raus: T1,Ks

Nun wollte ich in Matlab die Werte simulieren um die passenen
VerstE4%rkungswerte Kpr,Tn,Tv rauszubekommen. das habe ich nicht
hinbekommen.

Mein C# Dump Programm funkioniert aber nicht ohne diese Werte:
Es kommt als StellgrF6%DFe immer riesige Werte heraus. Die Periodendauer
beschrE4%nke ich fest auf 20s. Aber selbst wenn ich 1 Grad vor dem
Sollwert liege will noch voll mit 20s Takten. Normalerweise mFC%sste er
da ja nur noch mit 3 - 4 % der max Periodendauer takten was ja nur noch
1s schalten und 19 sekunden nix machen wE4%re.

Wie bekomme ich den Wert heraus?


Re: Software PID Regler in C#
Sprungantwort
http://www.multimederer.de/main/down/1kw.pdf
Matlab
http://www.multimederer.de/main/down/pid.mdl
Situation
http://www.multimederer.de/main/down/ManagementSummary.pdf


Re: Software PID Regler in C#
So habe nochmal alles schF6%n zusammengefasst auf meiner Homepage
http://www.multimederer.de/main/index.php?p3D%reglung

Bitte schaut es euch an und helft mir!


Re: Software PID Regler in C#
multimederer schrieb:
Quoted text here. Click to load it

Einen 2 Punkt Regler mit PC und C# ?
Das ist mehr als mit Kanonen auf Spatzen geschossen.
Kein Wunder das es in Deutschlad bergabgeht, wenn so ein
Unfug an der Uni gelehrt wird.

Andreas

Re: Software PID Regler in C#
@Andreas
Quoted text here. Click to load it
Software PID Regler! fertige Regler will die meine Firma nett.
Quoted text here. Click to load it
LOL als ob du die Situation so einfach beurteilen kannst.
Quoted text here. Click to load it
>gelehrt wird.
Wenn schon FH!


Re: Software PID Regler in C#
multimederer schrieb:
Quoted text here. Click to load it
Nagut dann eben PID.

fertige Regler will die meine Firma nett.
Quoted text here. Click to load it

Ist schon klar.
Quoted text here. Click to load it
Ich denke schon, ich habe schon komplexe Heizungessteuerungen incl.
Teigpumpensteurung und Visualisierung auf einem 8051 Derivat
entwickelt.
Was ich eigentlich sagen wollte ist, das C# meiner Meinung nach
nicht sonderlich geeignet ist um Steuerungen zu implementieren.
F├╝r eine Zeile Code brauchts ja schon einen 40Mbyte Moloch, wo es ein
┬ÁC mit 32kbytes ( Die Chinesen brauchen daf├╝r nur einen Pic-Clone mit
512 Byte ROM :)  ) tun w├╝rde.


Quoted text here. Click to load it
>gelehrt wird.
Quoted text here. Click to load it

Na gut.


Aber vieleicht w├Ąre es besser mal den Sourcecode abzulegen,
und nicht das fertige Programm, damit man mal schauen kann was das
Problem sein k├Ânnte. ( Oder ├╝bersehe ich da etwas )


Andreas

Re: Software PID Regler in C#
@Andreas
Quoted text here. Click to load it

Mein Problem ist ja auch nicht das Programm, sondern aus der
Sprungantwort z.B. 1kW.pdf, die nF6%tigen Parameter der Strecke fFC%r den
PID herauszufinden, ganz konkret Kpr,Tn,Tv, fFC%r die Pid Parameter Bei
mir sind diese Parameter falsch sonst wFC%rde das Programm
funktionieren.


Quoted text here. Click to load it

Kann ich! Tustinverfahren

Kpp ist ein zusE4%tzlicher Faktor den ich aber erstmal auf 1 Stelle


float fRegelabweichungWasser13D%fSollwert-fIstwertNeuWasser;
SummeTemphalten(float K,float t,float Tn)
{
//Errechnet aus gemessenem StellgroeDF%enverlauf durschnittliche
      //StellgroeDF%e
//nach y3D%mx+b die zum halten der eingestellten Endtemperatur X
benF6%tigt wird //-Tangenttengleichung mit Excel errechnet
  return((0.45f*Istwert+ 16.5f)/(K*t/(2.0f*Tn)));
}
SummeEinKproMinWasser(float K, float t, float Tn)
{
//inline Funktion3D%>Gesamter Ouelltext wird in den Aufruf
FC%bergeben-weniger //verzF6%gerung
//Errechnet aus gemessenem StellgroeDF%enverlauf die durschnittliche
//EinstiegsstellgroeDF%e in die Rampe beim
//rauffahren nach y3D%mx+b-Tangenttengleichung- mit Excel errechnet
  return(0.3688f*Istwert + 47.974f)/(K*t/(2.0f*Tn));
}
pidberechnen()
{
if(fRegelabweichung1!3D%0)
{
    fSumme3D%SummeEinKproMin(Kpr,TA,Tn);

}

else
{
    fSumme3D%SummeTemphalten(Kpr,TA,Tn);

}

if (fStellgroesseReglerNeu<99.0f && fStellgroesseReglerNeu>-99.0f)
{
    fSumme+3D%fRegelabweichung1+fRegelabweichung2;
}

fProp3D%Kpr*Kpp*fRegelabweichungW1;

fIntegral3D%(Kpr*TA*(fSumme))/(2.0f*Tn);//Berechnung des I_Anteils



fDiff3D%Kpr*Tv*((fRegelabweichungW1-3*fRegelabweichung3+3*
fRegelabweichung2-fRegelabweichung4)/6*TA);

fDiff3D%((fDiff+fDiff2+fDiff3+fDiff4)/4);//Mittelwert fFC%r ein besseres
Ergenis
fDiff3D%fDiff3;
fDiff3D%fDiff2;
fDiff23D%fDiff;
fStellgroesseReglerNeu3D%fProp+fIntegral+fDiff; //StellgrF6%DFe3D%P+I+D

fRegelabweichung43D%fRegelabweichung3;
fRegelabweichung3D%fRegelabweichung;
fRegelabweichung3D%fRegelabweichung;
if (fStellgroesseReglerNeu>3D%100.0f) //darf nicht grF6%DFer als +-100
sein
{
    fStellgroesseReglerNeu3D%100.0f;
}
if (fStellgroesseReglerNeu<3D%(-100.0f))
{
    fStellgroesseReglerNeu3D%(-100.0f);
}
fPeriodendauer3D%((fStellgroesseReglerNeu/100)*20);//Periodendauer fest
20s
}


Re: Software PID Regler in C#
multimederer schrieb:

Quoted text here. Click to load it

Wenn das nicht ein spezielles Feature von C# ist, dann k├Ânnte hier der
Fehler liegen.

Gruss,
Jens

Re: Software PID Regler in C#
@jens
da habe ich mich verschrieben. habe es extra fFC%rs forum anders
aufgeschrieben richtig sollte es so heissen:

        fRegelabweichung43D%fRegelabweichung3;
    fRegelabweichung33D%fRegelabweichung2;
    fRegelabweichung23D%fRegelabweichung1;

Das dient dazu die alten Werte zu speichern da ich sie noch brauche zum
berechnen des D-Teils.

( Kp*Tv*(-Xd-(3*Xd)+(3*Xd)+Xd) )/(6*TA)
Differentialalgorithmus einer Mittelwertbildung nach Typ 4
und diese Xd sind meine Regelabweichungen.

@all
Nur weiss ich immer noch nicht wie ich jetzt meine Werte fFC%r Tv,Tn,Kp
simuliere!!!!! DC%berall in der Literatur oder im Intenet steht:"Und
dann habe ich es in den Simulator eingegeben und die Werte
rausbekommen". Herzlichen GlFC%ckwunsch. Gibt es hier keinen
Simulink-Guru?


Re: Software PID Regler in C#
Hallo,

[....]
Quoted text here. Click to load it

ich hab mir Dein Simulink-Modell angesehen und bin der Meinung, da├č da so
einige Unklarheiten und Fehler sein m├╝├čten. Bevor Du was in C mit dem
Rechner programmierst, sollte das Modell erstmal laufen. Ein PID-Algorithmus
ist nichts weiter als ein digitales IIR-Filter, damit w├╝rde ich mich zum
Schlu├č besch├Ąftigen, bevor Du die anderen Probleme gel├Âst hast. Ich selbst
bin nicht in der Automatisierung t├Ątig, kann aber trotzdem einiges erkennen,
so von meinen Grundlagenkenntnissen her.

Ich w├╝rde erstmal von Anfang an systematisch an die Sache herangehen. Die
Sprungantwort des Ofens habe ich gesehen. Mir f├Ąllt auf, da├č bei einem
W├Ąrmetransport keine  Laufzeit oder Totzeit zu sehen ist, aber das kann ja
so sein. Dann wundert mich, da├č Du das Abk├╝hlverhalten nicht aufgenommen
hast, denn das wird doch sicher anders sein, sch├Ątze ich mal so ab. Das
w├╝rde bedeuten, da├č Du streng genommen die PID-Koeffizienten umschalten mu├čt
je nach Aufheizen oder Abk├╝hlen, ohne die gespeicherte Energie im Filter zu
verlieren, alles machbar.

Dein Simulink-Modell ist, so wie Du es ins Netz gestellt hast, erstmal
unverst├Ąndlich. Ich hatte verstanden, da├č Du einen 2-Punktregler entwickeln
wolltest, das ist aber keiner, ich sehe keinen Schalter. Dann ist ein
fataler Fehler vorhanden im PID-Regler:

u1 >10%00

kann nur hei├čen

u1 <10%00

In Deinem Fall ist der I-Anteil n├Ąmlich sonst immer abgeschaltet. Dann geht
es weiter, die ├ťbertragungsfunktion der Strecke lautet:

1/(6000*s +1)

Das bedeutet, bei einem Einheitssprung ist der Endwert am Ausgang 1, das
macht hier keinen Sinn, ich hab da mal

140/(6000*s +1)

hingeschrieben, wobei ich die 140 mal als Temperatur in Celsius betrachte.
Deine feste Rechenschrittweite ist 1 s, dann ist die Endzeit von 10 s
sinnlos, ich hab mal 1.e5 s eingestellt und die Scope-Ausgaben auf 500000
Punkte vergr├Â├čert, damit alles zu sehen ist.

Jetzt allm├Ąhlich sieht man was Vern├╝nftiges. Der Regler ist nat├╝rlich stetig
und kein 2-Punktregler. Den kannst Du z.B. nach Ziegler&Nichols optimieren,
indem Du K- und D-Anteil ganz klein machst und K soweit hochdrehst, bis
Schwingen anf├Ąngt. Damit hast Di Kkritisch bestimmt, den Rest solltest Du
selber wissen, m├╝├čtest Du gelernt haben. Bei mir funktioniert das dann, die
Regelabweichung wird mit I-Anteil wie erwartet auf 0 geregelt, ist doch
fein.

Mit dem Simulink-Modell hast Du also noch einiges zu tun. Wenn das dann
richtig l├Ąuft kommt die Implementation in Hardware, ob C-Programm oder FPGA
oder was wei├č ich ist egal. Dann w├╝rde ich das Filter z.B. mit der
bilinearen Transformation in ein Abtastfilter umsetzen, wei├č nicht ob man in
der Regelungstechnik da anders vorgeht. Die n├Ąchste gr├Â├čere H├╝rde ist das
richtige Umsetzen des Simulink-Modells des Filters in eine bittreue bin├Ąre
Darstellung. Dabei m├╝ssen gro├če und kleine Grenzzyklen verhindert werden,
damit Dir die teure Anlage nicht abraucht im wahrsten Sinne des Wortes. Dazu
solltest Du die 2-Komplement-Multiplizierer und Addierer auf S├Ąttigung
einstellen und zu lange Zahlen abbrechen und nicht Runden.

Du hast also noch einiges zu tun, wobei das mit dem PID eigentlich eine
Sache 1 Tages nur sein kann. Das mit dem 2-Punkt-Regler allerdings wei├č ich
nicht, da kenne ich mich zuwenig aus, das wird etwas komplizierter zu
betrachten sein. Aber mit Simulink kannst Du ja blitzschnell alles
austesten, ich hab fr├╝her alles noch auf Papier ausgerechnet, als Hilfe nur
Taschenrechner, Du hast es nicht so schwer, finde ich.

Wenn Du Probleme mit dem Verst├Ąndnis hast, w├╝rde ich die Vorlesung und/oder
gute Lehrb├╝cher empfehlen, das mit der Suche ├╝ber Internet finde ich
pers├Ânlich nicht gerade effektiv.

mfg. Winfried

PS: und bitte, verhalte Dich doch in einer internationalen Newsgroup
angemessen, sonst geht keiner auf Dich ein. Wenn jemand schon mehr als ein
!-Zeichen verwendet, gehe ich schon auf Distanz.



Re: Software PID Regler in C#
@Winfried
Quoted text here. Click to load it

Das stimmt! FFC%r das AbkFC%hlverhalten muss ich die Werte auch noch
aufnehmen und dann das ganze auch wieder simulieren, damit ich meine
Kp,Tv und Tn rausfinde.

Ausserdem habe ich noch verschiedene kW (1-9) Stufen, wo ich
verschiedene Temperaturbereiche nutzen will (z.B. bei 1kw von 20B0%-
70B0%C),damit die Steigung nicht unter 0.5k/min geht(VDE-Vorschrift).
Diese Werte bei wieviel Kw welche Temperatur haben die Diplomanden vor
mir schon rausgefunden, die das ganze mit dem Mikroprozessor anno '94
angesteuert haben.

BlF6%d ist nur das der Beharrungszustand von FC%ber 3kW jenseits von 300
B0%C liegt wo bei mir aber SchluDF% ist, weil dann die
Temperatursicherung schaltet.
Ob Scheibenthermostate geprFC%ft werden die jenseits von 220B0%C liegen
muss ich noch nachfragen.

Interessant ist noch das ich mit einer bestimmten Steigung 0.5/min oder
1/min die Kurven fahren muss.

Ich probiere jetzt erstmal die Simulink-Werte so zu verE4%ndern wie du
es gesagt hast.


GruDF%20

Sebastian


Re: Software PID Regler in C#
@winfried
Wie kann ich K und D-Anteil ganz klein machen, in Simulink?
Von diesem Kkritisch-Verfahren habe ich gelesen in meinem Buch von
Reuter.


Re: Software PID Regler in C#
Hallo Sebastian,

Quoted text here. Click to load it

den Reuter habe ich auch, 2. Auflage von '75. Da stehen theoretische und
praktische Einstellkriterien drin, z.B. die von Ziegler und Nichols. Bei PID
geht das h├Âchst einfach, auch in Simulink:

Du machst I und D so klein wie m├Âglich, z.B. 1.e-12 oder so.
Dann machst Du K immer gr├Â├čer, bei meinem Beispiel zwischen 10 und 20, bis
erste Schwingungen auftreten, hier mit sehr kleiner Amplitude. Diesen Wert
Kkrit merkst Du dir. Die Frequenz bei Kkrit mi├čt Du und bekommst die
Periodendauer Tkrit.

Mit diesen Werten berechnest Du nach Ziegler und Nichols die P, PI- oder
PID-Koeffizienten:

P-Regler:
Kp=0.5*Kkrit

PI-Regler:
Kp=0.45*Kkrit
Tn=0.83*Tkrit

PID-Regler:
Kp=0.6*Kkrit
Tn=0.5*Tkrit        Nachstellzeit
Tv=0.125*Tkrit    Vorhaltezeit

Die ├ťbertragungsfunktion des PID-Reglers lautet so:

Fr=Kp + Ki/s + Kd*s

Ki=Kp/Tn
Kd=Kp*Tv

Die Optimierung nach Ziegler und Nichols soll f├╝r Zwecke der
Verfahrenstechnik sein, f├╝r Dich vielleicht grade richtig. Es stehen hier
noch andere f├╝r Strecken hoher Ordnung und Totzeit, die nach anderen
Kriterien optimieren. Es wird noch unterschieden zwischen optimal dem
F├╝hrungswert folgen oder optimal die St├Ârungen unterdr├╝cken. Dann stehen
noch mathematische Optimierungsans├Ątze drin, man kann es auch mit dem
Rechner machen, aber das ist dann schon gro├čer Aufwand.

In Deinem Simulink-Modell k├Ânnten die Koeffizienten Kp, Ki und Kd sein, hab
ich mir aber noch nicht so genau angesehen. Es k├Ânnte sein, da├č Du sogar nur
einen PI-Regler brauchst, aber jetzt m├╝├čte die Vorgehensweise klar sein.

Dein Simulink-Modell ist ein stetiger Regler. Ich hab Deine 1. Mail nochmal
gelesen, Du willst was takten mit Periode 20 s? Also doch kein
2-Punktregler, sondern eine Pulsbreitenmodulation PWM? Dann mu├čt Du vor die
Strecke noch eine PWM setzen, bestehend aus einem Dreieckgenerator Periode
20 s und einem Komparator, in einem Programm z.B. mit Up-Down-counter und
Vergleich einfach machbar. Eine PWM mit so kleiner Frequenz w├╝rde ich
allerdings mit Vorsicht betrachten, hab mal sowas im Audiobereich
betrachtet, das mit dem Abtasttheorem ist da ziemlich versch├Ąrft.

mfg. Winfried



Re: Software PID Regler in C#

Hallo Sebastian,


Quoted text here. Click to load it


Kann sein, da├č Du f├╝r diese F├Ąlle die Kurven alle einzeln aufnehmen mu├čt.
Ich vermute, da├č die sich alle unterscheiden k├Ânnten.

Quoted text here. Click to load it

Du brauchst nicht die ganze Kurve bis zum Endwert aufzunehmen. Eine
e-Funktion m├╝├čte man aus einem kleinen St├╝ck schon berechnen k├Ânnen, auch
Funktionen h├Âherer Ordnung. Zur Not m├╝├čte man ein Programm zur
Funktionsapproximation benutzen, k├Ânnte auch mit Matlab gehen.

Quoted text here. Click to load it

Die Steigung der Kurve hast Du ja schon mit dem Limiter +-0.5 begrenzt, das
funktioniert.

Quoted text here. Click to load it

Im Moment habe ich mal testweise den PID-Regler so eingestellt:

proportional K=1.e1
integral I=1.e-1
derivative D=1.e-9

Das ist mehr zuf├Ąllig so eingestellt, aber stabil. Wenn Du K gr├Â├čer machst,
treten Schwingungen auf, durch den Limiter aber mit kleiner Amplitude.

mfg. Winfried



Re: Software PID Regler in C#

Quoted text here. Click to load it
                            ~~               ~~~~~~~~~~~~

Quoted text here. Click to load it
                 ~~                          ~   ~

Gruslig!


Nick
--
Motormodelle / Engine Models:
<http://www.motor-manufaktur.de
We've slightly trimmed the long signature. Click to see the full one.
Re: Software PID Regler in C#
@Nick
Was ist dendaran gruslig?
Das ist eine sehr unkryptische Zeile, wo jeder Benuzter hier sofort
erkennt wie man die Periodendauer ausrechnet!!!!!
StellgrF6%DFe/100 : StellgrF6%DFe in Prozent
(StellgrF6%DFe/100)*20s : Zeit wie lange geschaltet wird bei 20s
Periodendauer

@all
Mir geht das gemeckere tierisch auf den Keks. Eure doofen Kommentare
kF6%nnt ihr woanders hinschreiben!!!!


Re: Software PID Regler in C#
Quoted text here. Click to load it
Zum Realnamen reichts offensichtlich immer noch nicht ...

Quoted text here. Click to load it
... also ist der Eifer hier etwas ged├Ąmpft.
Wenn man aber schon mit groops.google rumtut kann man ja diese newsgroup
nach PID googlen, das Thema taucht h├Ąufig auf.

MfG JRD

Re: Software PID Regler in C#
@Rafael
Ich habe echt das ganze Internet abgegoogled. Das macht kein Mensch mit
nen Software PID. Im Intenet findet man nur die Therorie.

sebi


Re: Software PID Regler in C#
Quoted text here. Click to load it
http://www.embeddedFORTH.de Heft 2 S. 6
hat eine leicht lesbare Darstellung zu PID in Software.

Bez├╝glich C# : man wird keinen fertigen Code in dieser
Sprache finden, sie ist eher ungeeignet. Andererseits
ist die Berechnung relativ trivial soda├č Sprache keine
Rolle spielt.

Bei kleinen Controllern wird Regler mit fester Abtast-
frequenz arbeiten, dann sind die Konstanten fest.
Bei PC ( oder allem was gut multiplizieren kann ) w├Ąre
es auch m├Âglich, das Programm in Schleife laufen zu
lassen und Timer zu lesen. Anhand der Zeitdifferenz
zum letzten Sample kann man dann Konstanten skalieren.
Man erreicht dadurch h├Âhere Abtastfrequenz und damit
bessere Regelung. Gleichzeitig gleicht man dadurch
Verz├Âgerungen automatisch aus wenn das Betriebsystem
unerw├╝nschte Interrupts einf├╝gt.
Die Skalierung ist f├╝r "P-Faktor" nicht n├Âtig, f├╝r "I"
einfach, bei "D" kanns schwierig werden.
 
Quoted text here. Click to load it
  Daf├╝r ist Ziegler & Nichols ( bzw. ├Ąhnliche Verfahren )
zust├Ąndig. Man sollte sich mal Lutz, Wendt "Taschenbuch der
Regelungstechnik" Verlag Harri Deutsch aus der Bibliothek
holen.
Jedoch mu├č man ber├╝cksichtigen, da├č Z&N aus
historischen Gr├╝nden f├╝r eine Serienanordnung des PID-Reglers
gedacht ist, w├Ąhrend man ihn ( wegen der Patches f├╝r I-Anteil )
auf Controller eher in Parallelschaltung implementieren wird.
Dadurch ├Ąndern sich die Parameter.
  Altmodisch & Faulheit f├Ârdernd:
Erwin Samal" Grundri├č der praktischen Regelungstechnik Band II"
Oldenbourg 1970
hat einen "Atlas der Regelungstechnik" wo ├╝bliche Sprungantworten
und ├╝bliche Einstellungen des PID-Reglers samt erreichbaren
Sprungantworten katalogisiert sind.

Quoted text here. Click to load it
Es mag zwar sein, da├č die Rauschunterdr├╝ckung durch solche
Diffrenzierer g├╝nstiger ist ( vgl. auch
http://www.embeddedFORTH.de Heft 6 S. 17 )
aber der Differenzierer f├╝r Z&N ( und die gesamte
klassische Regelungstechnik ) ist erstmal simpel einpoliger IIR.
Man sollte es erst mit dem machen und dann bei Rauschen
komplizierteres nachr├╝sten.

Bez├╝glich Tests: es macht wenig Sinn ungetestete Software
gegen echte Regelstrecke laufen zu lassen, weil dann beide
Mucken haben. Es kann sinnvoller sein die Sprungantwort
der Regelstrecke aufzunehmen und sie dann durch einen
groben Dummy aus RC-Gliedern, Operationsverst├Ąrkern zu
ersetzen. Anhand dem kann man dann die Software stabil
bekommen und dann erst an die echte Regelstrecke gehen.

MfG JRD

Re: Software PID Regler in C#
Danke Rafael!

Das sind doch mal endlich interessante Infos.
Ich werde sehen was ich daraus machen kann.
Auf solche Antworten warte ich!!!!

GruDF%
sebi


Site Timeline