Grundsätzliche Frage zu PID Regler

Zuviel Werbung?
-> Hier kostenlos registrieren
Ich würde ganz pragmatisch an die Sache ran gehen und mir zuerst die Frage stellen was mir wichtig ist. Ein möglichst gleichmäßiger Pumpenlauf oder ein möglichst genau eingehaltener Füllstand? Beide Faktoren stehen nämlich im Gegensatz. Einen möglichst genauen Füllstand kann ich nur mit einer schnellen Reaktion der Pumpen auf Änderungen erreichen. Ich vermute mal dass es bei deiner Anwendung ziemlich egal ist ob in dem Sumpf 1m oder 2m Wasser stehen. Ich würde den Sollwert auf 1,5m setzen, den Regler als P-Regler konfigurieren und KP so einstellen dass die Pumpen bei 1m Füllstand mit der minimalen und bei 2m mit der maximalen Leistung laufen. Das schont auch die Pumpen als wenn sie permanent beschleunigen und abbremsen müssen und bei hohen Drehzahlen vll. sogar anfangen zu kavitieren.
 
Hallo Leute,

da dieses Thema hier noch relativ aktuell ist habe ich mir gedacht, dass ich mein Problem hier auch einfach mal hereinstelle.
Auch ich möchte gerne einen PID-Regler nutzen, um damit die Aus und Einfahrgeschwindigkeit eines pneumatischen Zylinders zu regeln. Hierzu wird die Zeit des Aufahrens und Einfahrens durch 2 Endlagenschalter ermittelt. Über 2 Proportionalventile an den Ausgängen des Zylinders soll der Volumenstrom der Druckluft geregelt werden, um so auch die Geschwindigkeit zu beeinflussen. Die Proportionalventile werden dabei je nach Stromstärke (mA) weiter geöffnet oder geschlossen.
Ich habe mir hierfür die OSCAT.lib heruntergeladen und die beiden Regler CTRL_PID und FT_PID entdeckt. Ähnlich wie MasterOhh es erwähnt hatte dachte ich auch, dass ich die KP TN und TV Werte durch 'testen' grob abschätzen kann.Bei OSCAT habe ich dann aber auch den control_setr Block entdeckt mit dem man die Parameter bestimmen kann. Richtig verstehen tue ich das Vorgehen aber nicht. Es gibt außerdem bei den PID Reglern deutlich mehr Eingänge bei denen ich nicht genau weiß, was eigentlich gefordert ist.
Falls jemand Erfahrung mit den Reglern hat wäre ich über etwas Hilfe sehr dankbar.

Schöne Grüße
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Hierzu wird die Zeit des Aufahrens und Einfahrens durch 2 Endlagenschalter ermittelt. Über 2 Proportionalventile an den Ausgängen des Zylinders soll der Volumenstrom der Druckluft geregelt werden, um so auch die Geschwindigkeit zu beeinflussen. Die Proportionalventile werden dabei je nach Stromstärke (mA) weiter geöffnet oder geschlossen.
Durch die beiden EndlagenSchalter erhältst Du nicht den GeschwindigkeitsVerlauf beim Einfahren bzw. Ausfahren des Zylinders, sondern nur die DurchschnittsGeschwindigkeiten für den gesamten Weg.
Was Du wirklich Regeln willst, ist mir nicht so ganz klar. Einen Wert, den Du auswerten kannst, erhältst Du ja erst, wenn die Bewegung bereits abgeschlossen ist, also zu spät um noch auf die aktuelle Bewegung Einfluss nehmen zu können. Mit Regelung im eigentlichen Sinn hat das nicht viel zu tun.
Die Verhältnisse für beide Richtungen dürften unterschiedlich sein, zumindest die beim Ein- bzw. Ausfahren ausströmenden Luftvolumina sind unterschiedlich, wenn man nichts dagegen tut.
Daher gehe ich davon aus, dass die ProportionalVentile für beide Richtungen unterschiedlich eingestellt werden müssen. Ein "Regler", der sich um beide Richtungen kümmern soll, müsste Richtungs-abhängig immer wieder zwischen zwei ParameterSätzen umgeschaltet werden.
LuftZylinder sind hervorragende FederElemente und (je nach Anwendung) nicht so ganz einfach zu beherrschen. Probleme mit stick/slip werden gerne mal unterschätzt.
Da Du eine Regelung eingeplant hast, vermute ich, dass Du mit grösseren Variationen bei den zu bewegenden Massen rechnest. Genügt es denn dann, wenn Du erst bei der nächsten oder übernächsten Bewegung auf Deine neuesten "Messdaten" reagieren kannst?
 
Das die Volumenströme unterschiedlich hoch sind ist definitiv richtig.
Es geht mir darum, dass ich regeln kann mit welcher Frequenz der Zylinder sich bewegt. Ich möchte zB angeben können, dass der Hinweg 500ms dauert und der Rückweg dann ebenfalls 500ms. Die Propventile sollen diese Zeiten dann als Sollwert nehmen und darauf möglichst schnell reagieren. Es geht hier um sehr kleine Hübe. Die zu bewegende Last soll sich im Idealfall nicht verändern. Es geht eher darum mit dem Auf und Ab des Zylinders eine Flüssigkeit in Bewegung zu versetzen.
Dabei sollen dann symmetrische Profile (500ms 500ms) aber auch asymmetrische Profile (200ms 800ms) gefahren werden können.
Ist ein PID Regler da echt der falsche Ansatz?
 
Hmmm, Du sagst, die PropVentile sollen diese Zeiten dann als Sollwert nehmen und darauf möglichst schnell reagieren. Das klingt so, als sei ein PID-Regler nicht die schlechteste Wahl.
Aber, wie schon gesagt, Du misst immer erst im Nachhinein, wie schnell die Anordnung war und sobald der Regler etwas daraus machen könnte, ist er mit dem passenden ParameterSatz gar nicht an der Reihe, sondern muss sich erstmal um die GegenRichtung kümmern u.s.w. ...
Ich denke schon, dass sich mit einem oder besser 2 PID-Reglern etwas tricksen liesse, aber, ob dabei ein leicht nachzuvollziehender Lösungsweg herauskommt?
Mit welchen StörEinflüssen müssen wir denn rechnen, die der Regler ausregeln müsste? Ich vermute mal, dass es StörEinflüsse in diesem Sinne gar nicht gibt bzw., dass diese eher langsamer Natur sind und nicht schnell ausgeregelt werden müssen. Eigentlich willst Du doch nur, dass auf Veränderungen der Sollwerte schnell reagiert wird?

Mein Ansatz wäre eine Steuerung über eine DatenTabelle, wobei das Programm selbst diese Tabelle mit Daten füllt (und später noch verfeinert bzw. an sich ändernde Gegebenheiten anpasst?).
Welche Sollwerte das Programm an die PropVentile ausgibt, das weiss es und welche Zeiten für Hin- und Rückwege daraus resultieren, das misst es. Welche Zeiten und insbesondere Kombinationen von Zeiten dem Programm abverlangt werden, das lernt das Programm ebenfalls im Laufe seiner Anwendung.
Ich weiss nicht, welche Abhängigkeiten zwischen Zeit für Hinweg und Zeit für Rückweg bestehen. Ob sich eine simple oder zumindest überschaubare Formel ableiten lässt oder ob sich per Interpolation bzw. Extrapolation der Umfang der Tabelle im Rahmen halten lässt. Da müsste man mal etwas herumexperimentieren.

Wie schnell sind überhaupt die PropVentile? Wie müssen sie angesteuert werden? Gibt es eine RückMeldung der VentilStellung?
 
Zuletzt bearbeitet:
Zuviel Werbung?
-> Hier kostenlos registrieren
Genau großartige Störungen sollte es nicht geben
Was aber ein Problem sein könnte ist die Hysterese der Propventile.. Der Durchfluss beim weiteren Öffnen des Ventils ist ein anderer als beim Schließen.
Meinst du da gibt es eine simplere Lösung?
Vielen Dank erstmal
 
Was aber ein Problem sein könnte ist die Hysterese der Propventile.
Aber die Hysterese dürfte reproduzierbar bzw. vorhersehbar sein.
- Man könnte eine VentilStellung immer aus derselben Richtung anfahren - notfalls vorher eine Schleife fahren. Das Anfahren/Nachjustieren der VentilPosition kann ja schon in der Zeit passieren, wenn der Zylinder noch in der Gegenrichtung unterwegs ist.
- Man könnte die AnfahrRichtung in der Tabelle mit berücksichtigen.
Eine wirklich simple Lösung sehe ich nicht, aber vielleicht habe ich einfach nur zu viele, unnötige Bedenken?
Einfach mal ein Bisschen experimentieren und versuchen zu ergründen, welche Unwägbarkeiten noch lauern? Wenn ich Dich richtig verstanden habe, birgt das Experimentieren keine Gefahren, die man abfangen müsste.
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Ok Druckschwankungen sind natürlich möglich. Durch einen Druckminderer vor dem Zylinder wird dies aber versucht zu verhindern.

Die Hystetese Tabelle der Ventile habe ich natürlich. Ich würde dann für jedes Ventil einen eigenen PID Regler verwenden und im Idealfall das Ventil immer erst einmal schließen, damit die Stellung immer auf der gleichen Richtung angefahren wird.
Was ich aber noch nicht genau verstehe ist, wie ich genau vorgehen muss. Verwende ich die fertigen Blöcke aus der OSCAT Bibliothek? Und wenn ja wie genau muss ich dann vorgehen? Oder baue ich mir die PID Regler selbst in FUP zusammen?
 
Da Du ja die benötigte Zeit für die Bewegung immer erst dann kennst, wenn die Bewegung zuende ist, kannst Du Korrekturen an der Ventilstellung erst für die nächste Fahrt in die gleiche Richtung durchführen. Dafür halte ich einen PID-Regler für ungeeignet.
Ich würde die gemessene Zeit - getrennt für beide Richtungen - abspeichern, und vor dem nächsten Start in die gleiche Richtung (also dem übernächsten Start) aus der Differenz zwischen Soll- und Istzeit eine Korrektur für die Ventilansteuerung berechnen (Korrektur = P-Faktor * Zeitdifferenz). Den P-Faktor kannst Du durch probieren ermitteln: groß genug, dass die Abweichung der Fahrzeit möglichst klein ist, klein genug dass nicht durch Überkorrektur das System schwingt.
Gruß
Erich
 
Da Du ja die benötigte Zeit für die Bewegung immer erst dann kennst, wenn die Bewegung zuende ist, kannst Du Korrekturen an der Ventilstellung erst für die nächste Fahrt in die gleiche Richtung durchführen. Dafür halte ich einen PID-Regler für ungeeignet...

Ich sehe es im Prinzip genau so wie Erich, halte einen PID-Regler inzwischen jedoch für geeignet. Da ursprünglich von der Regelung der Geschwindigkeit die Rede war, und da es keinen Wegaufnehmer gibt, erschien mir eine stetige Geschwindigkeitsregelung zunächst als völlig unrealistisch. Und das auch noch mit einem pneumatischem Zylinder? Nach weiteren Informationen (kleiner Hub, kleine Laufzeiten, kaum Störgrößen) und nach der daraus resultierenden Erkenntnis, dass man die Gesamt-Laufzeit als Regelgröße verwenden kann, wird es mit stetiger Regelung tatsächlich wieder interessant. Mein Gedanke wäre, für jeweils eine Bewegungsrichtung einen PI-Regler zu verwenden, dessen Abtastzeit nicht konstant ist, sondern der aktuellen Laufzeit entspricht. Das bedeutet, der Algorithmus wird jeweils zum Zeitpunkt des Erreichens der Ziel-Endlage einmal neu berechnet, wobei die zur Berechnung des I-Anteils verwendete Abtastzeit der gerade ermittelten Laufzeit entsprechen muss. In der Gegenrichtung pausiert der Regler. Nach erneuter Richtungsumkehr wird die Messung der Laufzeit neu gestartet. Der Stellgrad wird somit mit jedem Hub etwas korrigiert. In der Gegenrichtung werkelt ein zweiter Regler analog zu dem ersten. Die beiden berechneten Stellgrade werden je nach Richtung auf das Prop-Ventil ausgegeben, bzw. auf das jeweilige für jede Richtung.

Ich würde erwarten, dass die Regelgröße (Laufzeit Pneumatikzylinder) selbst mit der besten Regelung immer wieder etwas abweichen wird. Von daher könnte es mit einem P-Regler schwierig werden. Damit der Regler nicht jedes mal voll gegensteuert, würde ich den Prozesswert unbedingt etwas dämpfen.

Mit was für einer Steuerung soll das denn laufen?
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Moin milli13,
erzähl uns doch mal was über Deine PropVentile. Wie kannst/musst Du sie ansteuern?
Gibst Du einen AnalogWert aus und das Ventil setzt diesen in eine VentilStellung um, oder sagst Du dem Ventil auffahren, zufahren oder nix verändern und Du musst hoffen, dass Du die erreichte VentilStellung über die Zeiten abschätzen kannst, die es mit Auffahren bzw. Zufahren beschäftigt war? Erhältst Du eine Rückmeldung über die erreichte Ventilstellung oder besitzt das Ventil einen eingebauten Regler, der die Iststellung der Sollstellung anpasst? Vielleicht hast Du ja an dieser Stelle ein Betätigungsfeld für Deine PID-Regler, auf die Du anscheinend nicht so gerne verzichten möchtest?
 
Ok, ich habe das am Anfang vermutlich doof formuliert. Es geht nicht darum die Geschwindigkeit des Kolbens steuern zu können, sondern nur darum die Zeit für den jeweiligen Hub kontrollieren zu können:)
Ich höre also bei euren Meinungen raus, dass ein PID Regler gar nicht wirklich nötig ist? Stattdessen ist die Idee nun zwei PI-Regler für die jeweiligen Richtungen zu entwickeln. Gibt es für PI-Regler auch vorgefertigte Blöcke? Oder kann mir da jemand eine kleine Einführung in das Thema geben?
Ich nutze eine WAGO SPS und arbeite daher mit e!cockpit.

Zu den Propventilen:
Es handelt sich um Proportional-Magnetventile. Sobald die Magnetspule stromdurchflossen ist öffnet sich das Ventil proportional zum Nennstrom. Ich gehe also davon aus, dass ich einen AnalogWert vorgeben kann und das Ventil dann die entsprechende Stellung anfährt.
Ich habe für das Ventil ein Durchflussdiagramm, welches mir den Zusammenhang zwischen mA und Durchfluss genau angibt. Dort ist natürlich auch die Hysterese zu erkennen.
Falls das hilft könnte ich dieses Diagramm natürlich mal hochladen. Genauso wie das Schaltschema für die Ansteuerung der Ventile.

Vielen Dank nochmal für die vielen weiterhelfenden Antworten
 
.. Gibt es für PI-Regler auch vorgefertigte Blöcke? Oder kann mir da jemand eine kleine Einführung in das Thema geben? ..
Ein PI-Regler ist z.Bsp. ein PID-Regler, an dem der D-Anteil abgeschaltet bzw. nicht parametriert ist. Zum Thema PID-Regler gibt es unzählige Literatur. Ich glaube kaum, dass sich jemand die Mühe macht, dieses Thema exclusiv für dich noch einmal aufzubereiten. Außer Heinileini vielleicht, der ist hier der Netteste :wink: .

Falls du beim Programmieren konkrete Fragen hast, dann gerne.
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Ja schon klar :D
Das ganze Thema brauche ich natürlich nicht erklärt bekommen. Es geht eher darum Hilfe bei manchen Eingängen der PiD Blöcke zu bekommen. Ich bin mir nicht immer sicher wofür manche Eingänge sind oder wie ich sie bezeichnen muss bzw ob ich Sie überhaupt brauche..
Könnte mir denn jemand sagen ob sich die Blöcke von Oscat dafür eignen? Oder welchen Vorteil welcher Block genau hat? (Ctrl oder Tf)
 
Außer Heinileini vielleicht, ...
Ach Dagobert - schnüff - danke für die Blumen!
Ich glaube, ich bin hier eher der starrsinnigste, wenn es darum geht, den m.E. unterbewerteten D-Anteil ganz gewaltig in den Vordergrund zu rücken auf Kosten des m.E. überbewerteten I-Anteils.
Zugegeben, digitale Regler versauen oft die Möglichkeiten, die man sich vom D-Anteil erhoffen kann. Die Bearbeitung des Reglers im Takt des SPS-Zyklus oder noch langsamer und die Digitalisierung von analogen Messwerten in 10 oder 13 oder 15 Bit sind nicht gerade hilfreich, um den D-Anteil wunschgemäss nutzen zu können.
 
Ok, also jetzt bin ich etwas durcheinander.
Heinileini würde mir also doch eher zu einem PID als zu einem PI-Regler raten?
Ich habe mir sowohl einen PID als auch einen PI Block nochmal genauer angeschaut. Die meisten Ein- und Ausgänge sind doch relativ gut verständlich. Wenn ich hier jeden Ein und Ausgang für meinen Fall einmal etwas genauer benennen würde, könntet Ihr mir dann sagen ob ich damit auf dem richtigen Weg bin?
Probleme habe ich leider immer noch bei der Ermittlung der Kp usw. Werte. Diese kann ich doch am besten durch einfache Test ermitteln oder irre ich mich gerade?
Leider habe ich noch nicht alle Bauteile da und kann somit noch gar nicht richtig loslegen...
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Heinileini würde mir also doch eher zu einem PID als zu einem PI-Regler raten?
Ein PID-Regler als "Basis" (bei Deiner Anwendung zwei PID-Regler) ist schonmal super, denn dann hast Du alle Möglichkeiten noch offen gelassen:
Du kannst ihn zum P-Regler oder zum PD-Regler oder zum PI-Regler "abspecken" (D-Regler bzw. I-Regler ohne P-Anteil kann man getrost ignorieren).
1. D-Anteil und I-Anteil unwirksam machen und den P-Anteil einstellen. D.h. die "Verstärkung" experimentell so weit erhöhen, bis der Regelkreis schwingt und festhalten, mit welcher Frequenz bzw. PeriodenDauer er schwingt. Dann die Verstärkung wieder verringern, bis das Schwingen aufhört.
2. Aus der Frequenz bzw. PeriodenDauer den D-Anteil ermitteln und den D-Anteil aktivieren (PD-Regler). Jetzt sollte es möglich sein, die ProportionalVerstärkung wieder ein wenig zu erhöhen, ohne dass die Schwingungen wieder einsetzen.
3. Aus der Frequenz bzw. der PeriodenDauer den I-Anteil ermitteln und den I-Anteil aktivieren (PID-Regler). Achtung: ein grosser ZahlenWert bedeutet beim I-Anteil eine kleine Wirkung und umgekehrt!
Falls die Verbesserung des ReglerVerhaltens durch den I-Anteil nicht wirklich nennenswert ist, im Zweifelsfall den I-Anteil lieber totlegen. Die Wirkung des I-Anteils ist oft nicht so gut, wie man es erhofft. Aber die Nebenwirkungen sind eigentlich immer so, wie man es auch seinem besten Feind nicht wünscht.
Meine ganz persönliche Meinung: von vornherein zu beschliessen, "den D-Anteil brauche ich nicht", ist schlecht. Denn der D-Anteil sorgt dafür, dass das FineTuning des Reglers mit dem I-Anteil überhaupt erst sinnvoll funktionieren kann. Ist die Einstellung des Reglers durch den fehlenden D-Anteil schlecht, so kann von FineTuning mit dem I-Anteil nicht die Rede sein. Man mutet dem Regler zu, mit dem I-Anteil etwas zu zaubern, was er gar nicht leisten kann … und man sorgt so dafür, dass man umso mehr gegen die Nebenwirkungen ankämpfen muss.
 
Vielen Dank Heinileini.
Habe mich gerade auf dem Gebiet etwas weiter eingelesen und bin froh, dass das was du gerade beschrieben hast ungefähr mit meinem Verständnis übereinstimmt. Ich habe im Netz eine Berechnungsmethode gefunden die sich in etwa so beschreiben lässt:
Ich nutze die PID-Regler, setze aber den I und D Anteil erstmal auf 0. Anschließend spiele ich mit dem P Wert so lange herum, bis ich eine gleichförmige Schwingung am Ausgang bekomme. Diesen kritischen P-Wert, sowie die kritische Schwingungsdauer , benötige ich um meine Werte berechnen zu können. Über Ziegler&Nichols lassen sich dann die entsprechenden Werte für den P,I und D-Regler berechnen.
Soweit so gut... Leider stoße ich hier gerade auf mein nächstes Problem, welches vermutlich ein ziemliches Anfänger Problem darstellt:
Wie kann ich meine analogen Ausgangswerte abspeichern um diese dann in einem Graph aufzutragen und die Schwingungen sowie die Schwingdauer zu erkennen?
In meinem Fall müsste ja die Stromstärke (mA) in Schwingungen versetzt werden. Im Idealfall würde ich gerne jeden mA-Wert abspeichern und diese dann in Excel oÄ über die Zeit auftragen. Dann ändere ich den P-Wert und gehe erneut so vor.
Ich habe zwar zB den Wago Datalogger entdeckt, der jede Sekunde einen Wert abspeichern kann. Ich befürchte aber das mir diese Messwerte nur bedingt helfen können, wenn meine Hub Zeiten sich im ms Bereich abspielen.
 
Zuletzt bearbeitet:
.. Wie kann ich meine analogen Ausgangswerte abspeichern um diese dann in einem Graph aufzutragen und die Schwingungen sowie die Schwingdauer zu erkennen? ..
Milli, die Einstellregeln von Ziegler & Nichols liefern nur grobe Richtwerte, und das auch nur bei gewöhnlichen Regelstrecken wie z.Bsp. bei Temperatur- oder Druckregelungen. Das was du regeln möchtest, ist hingegen schon etwas außergewöhnlich. Natürlich kannst du es nach diversen Einstellregeln probieren, aber viel Hoffnung auf brauchbare Ergebnisse würde ich mir nicht machen. Die Vorgehensweise, wie von Ziegler & Nichols & Heinileini beschrieben, ist dennoch praktikabel. Den Aufwand für wissenschaftlichen Aufzeichnungen würde ich vermeiden, es sei denn, du hast so wie so eine Visualisierung, auf der du entsprechende Kurven darstellen kannst. Wenn deine Laufzeit-Regelung schwingt, dann ist es die Hub-Dauer, die sich sinusartig ändert. Beträgt diese z.Bsp. um die 500ms in jeder Richtung, dann bekommst du ca. 1x pro Sekunde einen aktuellen Prozesswert je Richtung, den du aufzeichnet bzw. visualisieren müsstest. Ein Timing-Problem wäre es also nicht.

Den D-Anteil hätte ich im Zusammenhang mit deiner speziellen Regelung niemals erwähnt. Ich bin daher völlig überrascht, dass Heinileini ihn hier so sehr favorisiert. Vielleicht sollte man den höchst unwahrscheinlichen Fall, dass Heinileini den D-Anteil mit dem I-Anteil verwechselt, nicht gänzlich außer Acht lassen :ROFLMAO: .
 
Zurück
Oben