Was sind im Rahmen eines PID-Algorithmus die Einheiten für die Grössen Messwert, Stellwert, Fehler, Kp, Tn, Tv? Ich sehe öfter in PID-Sourececodes Formeln wie yp = Kp * error /* P-Anteil berechnen */ (z.B. Beitrag "PID-Regler so realisierbar?"), was auf mich wie das Verrechnen von Kartoffeln mit Äpfeln wirkt. Bei einer Heizung würde man so durch Multiplikation aus Fehler ([Celsius]) mit Konstante eine Leistung erhalten. Es würde für mich nur Sinn ergeben, wenn Stellgrösse, Messwert und Fehler (also quasi alle Werte) jeweils dimensionslos aus dem Bereich 0,0 ... 1,0 bzw. 0% ...100% stammen würden. Nur sehe ich in den Beispielcodes nie das Skalieren auf 0...1. Man scheint immer direkt Messwerte/Fehler mit Faktoren zu multiplizieren, um direkt zum Stellwert zu kommen. Z.B. http://www.embedded.com/2000/0010/0010feat3.htm ("PID Without a Phd"): drive = UpdatePID(&plantPID, plantCommand - position, position) ruft die PID-Berechnung mit dem Fehler "plantCommand - position" auf, was eine Einheit wie mm haben könnte - aber nicht erkennbar dimensionslos ist. Hintergrund ist, dass ich mal Ziegler anwenden wollte und einen PID-Algorithmus brauche, in den ich das Ergebnis einsetzen kann. Muss ich also im PID-Algorithmus alles auf 0...1 skalieren, z.B. error = (Messwert - Sollwert) / (Tmax - Tmin)?
Das sollte man nicht so geanu nehmen. Aus einem Fehler wird eine Stellgroesse. Die Strecke hat ein Zeitverhalten, der Regler hat ein Zeitverhalten, und beide zusammen auch. Vielleicht solltest du mal eine Simulation auf dem PC laufenlassen.
Wen ich das nicht genau nehme, wie sollen dann die ziemlich genauen Ergebnisse vom Ziegler irgendeinen Sinn ergeben?
Mirko schrieb: > Bei > einer Heizung würde man so durch Multiplikation aus Fehler ([Celsius]) > mit Konstante eine Leistung erhalten. Abweichung * Konstante = Leistung Kelvin * 1 = Watt Das musste mir jetzt mal erklären. Welche Einheit hat denn die Konstante? Aber du hast schon recht, auch solche Algorithmen sind mathematisch korrekt. Es gibt da auch diverse Herleitungen des PID Reglers über veschiedene Methoden. (Laplace Transformation und sowas, glaube ich).
"ziemlich genauen Ergebnisse vom Ziegler" das ist doch schon ein Widersprung für sich^^ les dich erst einmal ein wenig in Regelungstechnik ein, dann klappts auch. Wenn überhaupt irgendwo eine Größe drinsteckt, dann in Kp. Kannst aber auch vorher alles auf den Stellbereich normieren, dann hast eben keine Einheiten
Die Verstärkungen sind dimensionslos. Die Zeitkonstanten sind, wie der Name schon sagt, Zeiten: Die Einheit ist also Sekunde.
> Wenn überhaupt irgendwo eine Größe drinsteckt, dann in Kp Vermutlich knapp daneben. Soweit ich das verstehe, ist Kp dimensionslos (Gain), Tp und Tn werden in [Sekunden] angegeben. Weil Kp dimensionslos ist, versteh ich nicht, wie man beispielsweise aus einer Temperaturdifferenz beim Ofen-PID duch Multiplikation mit Kp eine Heizleistung (Stellgrösse, Watt) erhalten kann - ausser es wäre alles auf 0 ... 1 normiert. Aber eben diese Normierung sehe ich in den Sourcecodes nie. > "ziemlich genauen Ergebnisse vom Ziegler" das ist doch schon ein Widersprung für sich^^ Nur wenn man den Widerspruch sehen will ;) Ich sage nicht, dass die Ziegler-Ergebniss gut sind - aber es sind nun mal exakte Zahlen. Irgendwo muss ich die einsetzen.
> Die Verstärkungen sind dimensionslos
Muss ich demnach den Fehler auch dimensionslos machen (durch den
möglichen Wertebereich teilen)?
> Wen ich das nicht genau nehme, wie sollen dann die ziemlich genauen > Ergebnisse vom Ziegler irgendeinen Sinn ergeben? Mach dich mal von diesem Gedanken frei. :-) Das ist eher als grobe Naeherung zu verstehen die fuer manches ausreichend ist, und fuer vieles der Anfang bevor du selber weiteroptimierst. Nebenbei gesagt in der Regelungstechnik kannst du sehr viel mit Mathe rumhampeln, eine Menge Studenten werfen auch dort das Handtuch. Es ist auch notwendig das einmal verstanden zu haben! Aber in der Praxis stoesst man schnell auf das Problem eine Strecke nicht richtig beschreiben zu koennen sobald die etwas komplizierter ist. Olaf
> wie man beispielsweise aus einer Temperaturdifferenz beim Ofen-PID duch
Multiplikation mit Kp eine Heizleistung (Stellgrösse, Watt) erhalten kann
kannst du auch nicht. Temperaturdifferenz*Kp bleibt eine Temperatur. Es
sei denn du integrierst im Kp noch deine Streckenverstäkungen, die du
vermutlich nicht so genau kennst, aber streng genommen ist Kp im Regler
dimensionslos.
Um auf dein Beispiel zurückzukommen, wäre das dann z.B.: Wenn du das
Fouriesche Gesetz ins Kp packst, bekommst du eine Wärmeleistung heraus.
> kannst du auch nicht. Temperaturdifferenz * Kp bleibt eine Temperatur
Aber die PID-Berechnung ist doch so (mit y = Stellgrösse, Ta =
Abtastzeit, Tn = Nachhaltezeit, usw.):
y = Kp * (Ta/Tn * errsum + Tv/Ta (ei - ei_1))
Hier wird aus einem Fehler (recht) die Stellgrösse (links) berechne. Das
sind offensichtlich unterschiedliche Dinge und dazwischen stehen nur
einheitenlose Faktoren.
Für mich ergibt das nur Sinn, wenn man alles im PID-Algorithmus
(Messwert, Stellwert und Fehler) dimensionslos betrachtet, also alles
auf 0...1 normiert. Aber das sehe ich in Beispielen nie.
Oops, in der letzten Formel habe ich ein ei an erster Stelle in der Klammer vergessen (P-Anteil).
Messwert, Stellwert und Fehler sind dimensionslos und normiert. Die Normierung findet aber nicht im Source statt, sondern bei der Berechnung bzw. Bestimmung der Reglerparameter. mfg, Stefan.
Normalerweise hast du ein mathemtisches Modell deiner Strecke. Diese
Strecke versuchst du nun durch eine Stellgröße zu regeln.
Angenommen du hast einen Glas Wasser, dessen Temperatur zu regeln
willst. Dafür misst du die Temperatur. Die Stellgröße ist aber natürlich
keine Temperatur sondern die Heizleistung. Diese stellst du z.B. durch
eine Spannung ein. Die Temperatur, die du misst, ist ja aber vermutlich
auch nur eine Spannung. Du misst ja nur irgendwie indirekt.
Der Fehler steckt jetzt in deinem Sollwert. Den müsstest du durch eine
Umrechnung, so wie du von der gemessenen Spannung auf die Temperatur
schließt, in eine Spannung umrechnen, damit alles passt.
Natürlich wirst du eher deine gemessene Spannung in eine Temperatur
umrechnen. Du nimmst im Prinzip die Umrechnung deiner Temperatur in
Spannungen in den Regler. So scheint dieser nicht mehr dimensionslos.
Der Regler ansich ist es noch, aber du hast eine Umrechnung
mitdazugenommen, die genaugenommen nicht Teil des Reglers ist.
Ich hoffe, dass es einigermaßen verständlich ist.
> y = Kp * (Ta/Tn * errsum + Tv/Ta (ei - ei_1))
wo hast du die Formel her?
> Ich hoffe, dass es einigermaßen verständlich ist. Nicht für mich :) Aber Stefan's Antwort werde ich vieleicht noch verstehen: In die Festlegung von Kp, z.B. per Ziegler-Nichols, fliesst ein Faktor ein, der den willkürlichen Wertebereich des Stellgliedes - könnte bei einer Heizung je nach Ansatz der Stellfunktion eín Prozenwert sein oder ein Byte 0...255 oder eine Einschaltzeit in 0....1000ms pro Sekunde - normiert und Stellwerte in eine Relation zu Temperaturdifferenzen setzt. > wo hast du die Formel her? Aus einer Vorlesung Regelungstechnik: http://people.fh-landshut.de/~sbr/Vorlesungsmitschrift_Version4.pdf (S. 55)
> In die Festlegung von Kp, z.B. per Ziegler-Nichols, fliesst > ein Faktor ein, der den willkürlichen Wertebereich des Stellgliedes - > könnte bei einer Heizung je nach Ansatz der Stellfunktion eín Prozenwert > sein oder ein Byte 0...255 oder eine Einschaltzeit in 0....1000ms pro > Sekunde - normiert und Stellwerte in eine Relation zu > Temperaturdifferenzen setzt. Kompliziert ausgedrückt, aber ich glaube Du hast es verstanden. Ich versuche das nochmal anders auszudrücken: Die Einheiten, die Du in Deiner ersten Frage gesucht hast, stecken in den Faktoren zur Normierung von Stellgröße, Führungsgröße und Regelgröße. mfg, Stefan.
Da steht die Formel auch richtig. ;-) y = Kp * (e(i) + Ta/Tn * SUM_k=0..i(e(k)) + Tv/Ta (e(i) - e(i-1))) Also im Prinzip ist das dann schon richtig mit den Dimensionen. In den Regler fließen Faktoren mit ein, sodass du mit deiner Einheit rechnen kannst. Daraus folgt also ungefähr: Vergiss die Einheiten, das geht meist schon so. ;-) Wenn du sagst, was du genau machen willst, kann dir vielleicht noch etwas mehr geholfen werden.
> was du genau machen willst, kann dir vielleicht noch
etwas mehr geholfen werden.
Ich will lediglich ein paar Tuning-Verfahren ausprobieren. Ein
akzeptabel funktionierender C-PID-Regler liegt vor - mit dem Algorithmus
der "Pid withouth a PhD-Seite". Ich war der Meinung, dass die
willkürliche Wahl bei bestimmten Dingen (z.B. Werteberich des
Stellgliedes oder Wahl der Einheit der Temperatur) ein Problem ist und
dass man explizit normieren muss, bevor man die mit Z-N ermittelten
Zahlenwerte einsetzen kann. Sonst hätte jeder andere Gleichungen. Der
Denkfehler war wohl, dass die per Z-N ermittelten Werte für alle Nutzer
einer bestimmten Regelstrecke identisch sind. Wenn ich das jetzt richtig
verstehe, erhalten zwei Anwender derselben Regelstrecke u.U.
unterschiedliche PID-Faktoren, je nachdem wie "Implementationsdetails"
wie Einheiten und Übergabeparameter an die Stellgliedfunktion gelöst
sind.
richtig. Wenn du es so verstehen willst. Dann wünsche ich dir noch viel Erfolg beim Optimieren. ;-)
Na. Es geht in dieser Richtung. Es gibt Leute, die rechnen ein System als Temperatur-in, Leistung-raus, oder PWM-raus, oder einfach nur 2^16-in, 2^16-aus. Wo und wie man normiert ist eigentlich egal. Eine Normierung ist ja nur eine Multiplikation. Zahlen sind weniger interessant wie ein Zeitverhalten.
Moin erstmal! Das Thema ist schon lange beendet- aber vielleicht bekomme ich ja doch eine erhellende Antwort. Ich habe mich in den letzten Wochen zum 1sten mal mit PID-Reglern befasst. Ohne die tiefsten Tiefen der mathematischen Herleitungen wirklich begriffen zu haben, zugegebener Maßen. So ein ungefähres Bild, was P-, I-, und D-Anteil bewirken sollen (und warum sie das auch tun) hat sich aber schon eingestellt. Aber genau bei dem Skalierungsproblem komme ich auch nicht weiter. Also angenommen man möchte eine Temperatur regeln, z.B. auf 50°C. Und angenommen, irgendwann würde diese Temperatur ereicht und sich nicht mehr ändern (also quasi Störgröße konstant -> Regleroutput (z.B. 50%)auch konstant und gleicht die Störgröße aus). Dann müsste ja der I-Anteil des Reglers bei einem Ausgangssignalbereich von 0..100 (%) permanent 50 rausgeben, oder? (Damit dann ein einfaches Stellventil z.B. immer in dieser Stellung bleibt). Ist das soweit richtig bzw. nachvollziehbar? Na, ich schau erstmal, ob da jemand antworten mag, dann kann's weiter gehen mit der Frage ;-) Danke, so oder so (wirklich informatives Forum, hat mir schon öfter geholfen) Stefan
Das stimmt so. Da bei Regelabweichung 0 der P-Anteil der Stellgröße ebenfalls 0 ist, muss der I-Anteil allein die erforderliche Stellgröße liefern. btw. Stellventile steuert man oft mit einem Dreipunktschrittregler an. siehe z.B. http://www.jumo.de/de_DE/support/faq-weiterbildung/faq/regler/T2/Q16.html
Moin Dieter Werner, danke für die schnelle Antwort! Nun denn. wenn ich jetzt mal die u.A. auch in diesem Forum benutzte Formel esum += e_neu y= Kp *e + Ki*esum + Kd* (e_neu-e_alt) wobei esum dann ja oft auf y_max begrenzt wird (was dann ja oft als Anti-Wind-Up bezeichnet wird). Meine ich auch hier und anderswo gefunden zu haben. Dann müsste, wenn ich Ki auf z.B. 0.5 gesetzt hätte, esum ja 100 sein? Wenn ich jetzt den Sollwert auf z.B 60° setzen würde, müsste ich also Ki vergrößern, um die Regelabweichung im oben angenommenen ZUSTAND überhaupt noch kompensieren zu können, da esum ja auf 100 begrenzt ist?? Soweit auch noch richtig? Stefan
... Den Drei-punkt-schrittregler habe ich mir schon schön programmiert- und zwar so, dass er immer 0..100% möchte. Jumo- PID-Regler beschreibung, Adruino-PID-Regler (sehr schön! Den Hinweis habe ich, glaube ich. auch hier im Forum gefundenund) und vieles, vieles andere habe ich mir auch schon 'reingezogen' Stefan
Mirko schrieb: > Was sind im Rahmen eines PID-Algorithmus die Einheiten für die > Grössen > Messwert, Stellwert, Fehler, Kp, Tn, Tv? > > Ich sehe öfter in PID-Sourececodes Formeln wie yp = Kp * error /* > P-Anteil berechnen */ (z.B. Beitrag "PID-Regler so realisierbar?"), > was auf mich wie das Verrechnen von Kartoffeln mit Äpfeln wirkt. Bei > einer Heizung würde man so durch Multiplikation aus Fehler ([Celsius]) > mit Konstante eine Leistung erhalten. Kommt drauf an. Bleiben wir doch gleich beim Beispiel einer Heizungsregelung. Soll- und Istwert sind °C. Der Fehler ist dann einfach nur K. Der Stellwert ist meinetwegen der Duty-Faktor einer PWM, also dimensionslos. Nun muß man also nicht weiter machen, als festzulegen, daß die Einheiten der Koeffizienten eben 1/K betragen sollen, damit das K bei der Multiplikation korrekt verschwindet. Oder man stellt wirklich direkt eine Leistung in kW. Auch kein Problem, dann wird eben einfach festgelegt, daß die Einheit der Koeffizenten kW/K sein soll. Genau das ist der Trick: Die Konstanten haben immer genau die Einheit, die sie brauchen, um die Fehlergröße bei der Multiplikation korrekt in die Stellgröße zu überführen. Da das sowohl zur Entwurfs- als auch zur Laufzeit Aufwand spart, ist es sinnvoll. Und weil es sinnvoll ist ist, wird es immer so gemacht und jeder (außer dir offensichtlich) weiß auch, daß es immer so gemacht wird. Deswegen kümmert sich auch niemand darum, in der Doku mit irgendwelchen Einheiten zu hantieren. Sie sind schlicht und einfach irrelevant.
Beim Anti-windup gibt es verschiedene Möglichkeiten. Die wohl einfachste ist es die Integration auszusetzen, wenn der Ausgang in der Begrenzung ist. Sehr ähnlich ist die Methode, dann wenn der Ausgang in der Begrenzung ist, esum so zu berechnen das gerade so die Begrenzung erreicht wird. Die 3. methode ist es einfach Esum zu begrenzen. Das klingt einfach, aber die Wahl der Grenzen ist halt das Probem, und da gibt es mehrere Möglichkeiten: 1) Etwa so das noch der Maximale Sollwert plus etwas Reserve erreicht wird. 2) So das noch der maximale Stellwert erreicht wird. 3) So das um den aktuellen Sollwert noch eine genügende Reserve besteht. Den letzten Fall kriegt man z.B. indem man zum Ausgangswert noch den Schätzwert für den aktuellen Sollwert dazu addiert - als ein einfache Form von Feed-Forward. Dann muss esum*Ki nur noch den Fehler der Schätzung korrigieren, und das kann man meist relativ eng begrenzen.
Man sollte sich von der ganzen Theorie loesen und sich das Verhalten anschauen. Es gibt immer einen Grund weshalb das System nicht linear ist. Der PID ist das Werkzeug fuer die Denkfaulen.
Danke, aber das Problem, auf das ich hinausmöchte ist die Skalierung / Normierung der Ein- und Ausgangsparameter eines Regel-Algos. Wenn ich dann nun mit einer der oben genannten Formeln eine Temperatur um die 500° (was auch immer) regeln möchte, aber immer noch 0..100 (%) als out erhalten möchte- wo fange ich da am besten an rumzuschrauben? Skaliere ich z.B. den Temperatur-Ist- & Sollwert z.B. von 450..550 auf 0..100 herunter? Oder (habe ich auch irgendwo gesehen) bekommen die Beiwerte (Kp, Ki, Kd) nen Faktor.. Oder nehme ich den Reglerausgang und versuche den wieder auf 0..100 runterzurechnen? Stefan
короткое троль schrieb: > Man sollte sich von der ganzen Theorie loesen und sich das > Verhalten > anschauen. Es gibt immer einen Grund weshalb das System nicht linear > ist. Der PID ist das Werkzeug fuer die Denkfaulen. Ja, wie machst Du das denn??? Lass mich / uns doch nicht dumm sterben.
Siehe auch Beitrag "PID-Algorythmen Ein- und Ausgangsparameter skalieren" Man kann in ADC-Koordinaten denken, oder so. Falls der Sensor linear verwende ich als Rechenwerte das ADC System. Dh. Sollwert ist der gewollte ADC Wert. Der Regelalgorithmus laeuft dann in Longinteger. Am Schluss wird dann auf das Stellglied runterskaliert. Nie Float. Falls der Sensor nicht linear ist, wird erst auf eine sinnvolle Groesse linearisiert. Natuerlich auf Ganzzahl. Fuer Temperaturen zB auf Milikelvin.
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.