Wenn dein Problem oder deine Frage geklärt worden ist, markiere den Beitrag als "Lösung",
indem du auf den "Lösung" Button rechts unter dem entsprechenden Beitrag klickst. Vielen Dank!
seit einiger Zeit beschäftigt mich die Frage um einen PID Regler. Ich habe im Forum danach gesucht und den simple_PID.vi gefunden. Das Vi sah so simple aus und die Anschlüße waren klar definiert, darum habe ich ihn schnell eingebaut und fertig. Gestern konnte ich dann zum ersten mal meine Software an der Hardware mit realen Werten testen. Dabei ist mir aufgefallen, dass der Regler irgendwie nicht so funktioniert wie gedacht. Entweder er setzt meinen Strom auf 0 oder auf max Wert.
Kurze Erklären zu meinem Programm.
Ich muss eine Steuerung programmieren. Dort gibt es zwei Messmethoden, die den Strom regeln sollen und zwar einmal abhängig von der Leistung oder von der Frequenz eines Zählers. Sind zwei verschiedene Methoden. Die einfachere ist die mit der Leistung darum gehe ich darauf weiter ein.
Ich habe also meinem simple_PID.vi meinen Sollwert der Leistung den den Istwert übergeben. Dazu noch die Werte P, I und D und die grenzen von 0-3, da mein Strom 3 A nicht übersteigen darf.
Die Konstanten P, I und D können bei mir auch nur jeweiles den Wert 3 annehmen. Da ich mir dachte das ein höherer Wert nicht von Bedeutung ist aufgrund der gesetzten Limits. Oder irre ich mich hier?
Das ist meine Vorgehensweise. Ich glaube mein Problem ist die Wahl von P,I und D. Ich habe dafür ein extra Vi geschrieben, wo man genau das selbe passiert wie oben beschrieben nur das man die Konstanten über 3 Regler variable einstellen kann im Bereich 0-3. Aber egal was ich da einstelle, der Verlauf ändert sich nicht. -.-
- Zum Einstellen von PID-Reglern gibt es die "Faustformel" nach Ziegler-Nichols, sehr gut beschrieben bei Wikipedia (suche dort nach den genannten Herren oder nach PID-Regler)...
- Die Werte für P,I,und D (eigentlich Kp, Tn, Tv) haben nichts mit den Outputlimits zu tun! Oder hat dein Regler plötzlich ein anderes Zeitverhalten, nur weil du bsw. eine Pumpe mit Drehzahl bis 3000rpm ansteuerst?
Zu deinem VI: Heavy overuse of local variables! ("Wert"-Propertynodes sind auch nur lokale Variablen, bzw. sogar die schlimmeren...)
Zum SimplePID: Es gibt keinen Grund, warum man an alten LV5-Programmierweisen (oder gar noch älter) festhalten sollte. Siehe Anhang...
Zitat:- Die Werte für P,I,und D (eigentlich Kp, Tn, Tv) haben nichts mit den Outputlimits zu tun! Oder hat dein Regler plötzlich ein anderes Zeitverhalten, nur weil du bsw. eine Pumpe mit Drehzahl bis 3000rpm ansteuerst?
Ok das habe ich nicht gewusst. Nein ich denke nicht, dass das Zeitverhalten ändert das sollte konstant bleiben. Ok danke, dass du mir sagst das P,I und D eigentlich Kp, Tn, und Tv sind erleichtern schon so einiger, aber den artikel auf Wikipedia verstehe ich nicht so ganz deshlab mache ich mich nun auf den Weg in die Bibliothek hoffe das ich da was brauchbares finde. Danke GerdW
Zitat:Zu deinem VI: Heavy overuse of local variables! ("Wert"-Propertynodes sind auch nur lokale Variablen, bzw. sogar die schlimmeren...)
"echte" lokale Variablen sind wenigstens (meist) schnell, wohingegen PropertyNodes mit zu den langsamsten Konstrukten gehören.
Nicht nur, dass ein Großteil der lokalen Variablen in deinem VI bei einem ordentlichen Design unnötig wären, du hast auch noch die prozessor-hungrigste Variante gewählt...
Gibt es noch andere Varianten vom simple-PID? Da sind doch keine Eigenschaftsknoten enthalten?
Lokale Variablen habe ich vermieden in meinem VI habe ich keine benutzt, dafür aber einige Eigenschaftsknoten. Da ich manchmal mitten im Ablauf genau diesen einen Wert kurz benötige. Ist das Schlimm?
Übrigens habe ich in der Bibliothek nichts gefunden. Oder auf jeden fall gemerkt, das ich auf die schnell einen gute kleine Anleitung wie ich P,I und D bestimme nicht so leicht finde. Die Faustformel von Ziegler-Nichols benötigt immer die kritischen Werte und ich bin mir nicht sicher wie ich die bestimme. Dann gab es noch ein anderes einfachers verfahren doch auch da musste ich etwas zuvor betimmen und ich weiß nicht wie ich das an meiner steuerung bewerkstellige, da ist schon sehr träge reagiert, viel Zeit braucht.
17.04.2013, 09:15 (Dieser Beitrag wurde zuletzt bearbeitet: 17.04.2013 09:17 von GerdW.)
Zitat:Dann gab es noch ein anderes einfachers verfahren doch auch da musste ich etwas zuvor betimmen und ich weiß nicht wie ich das an meiner steuerung bewerkstellige
Genau, eine Sprungantwort. Einmal einen Sprung der Stellgröße vorgeben und die Systemreaktion aufzeichnen!
Aus der Sprungantwort dann die PID-Parameter nach der Tabelle bei Wikipedia abschätzen. Weiter unten stehen noch ein paar Hinweise, wie man die Parameter empirisch ermitteln kann...
Ganz ohne Theorie sollte man mit (PID-)Reglern nicht anfangen.
Zitat:da ist schon sehr träge reagiert, viel Zeit braucht.
Zitat:"Einige" ist hoffentlich humoristisch gemeint
hmm eigentlich nicht, also ich habe schon so einige davon verwendet, aber wenn du das so schreibst, dann glaube ich langsam das es keine gute idee war -.-
Zitat:Genau, eine Sprungantwort. Einmal einen Sprung der Stellgröße vorgeben und die Systemreaktion aufzeichnen!
Aus der Sprungantwort dann die PID-Parameter nach der Tabelle bei Wikipedia abschätzen. Weiter unten stehen noch ein paar Hinweise, wie man die Parameter empirisch ermitteln kann...
Ganz ohne Theorie sollte man mit (PID-)Reglern nicht anfangen.
Ich habe es gerade probiert, aber irgendwie erhalte ich nicht das gewünschte Ergebnis. Ich habe zu erst versucht den Regelverstärker Kkrit rauszubekommen. Dafür muss ich langsam den P-Regler erhöhen bis ein periodischer Verlauf zu erkennen ist. Das ist dann mein Kkrit. Aber es lässt sich keine Änderung erkennen. Ich habe I und D auf 0 gesetzt und P zu beginn auch. Da passiert nichts und sieht alles ordentlich aus. Erhöhe ich nun den P Regler, und dabei ist egal wie hoch, erkenne ich zwar einen periodischen Verlauf, aber der ist immer der Selbe, bei egal welchem Wert P. Meine Steuerung setzt in einem gewissen Abstand entweder den Strom auf Max oder auf 0. Und sonst passiert nichts. Es pendelt sich nichts um meinen Wunschwert ein.
Zitat:glaube ich langsam das es keine gute idee war
Ich habe nichts dagegen, mal eine Propertynode "Wert" zu verwenden, insbesondere wenn man den ErrorCluster als Sequenzierung nutzt. Aber dauernd und überall und nur als Ersatz für eine lokale Variable? Und wenn nebenan noch die Terminals ungenutzt rumliegen?
Außerdem: Man kann Settings etc in einem Cluster sammeln und nur diesen einen Cluster per Schieberegister speichern. In jedem Case holt man sich die nötigen Werte aus dem Cluster und schreibt neue hinein...
Zitat:Ich habe zu erst versucht den Regelverstärker Kkrit rauszubekommen...
Das ist Ziegler-Nichols. Bei Wikipedia wird auch die vereinfachte Variante beschrieben: anhand einer Sprungantwort die nötigen Parameter abschätzen! Die Sprungantwort nimmt man ohne aktiven PID-Regler auf: einfach die Systemreaktion auf einen Sprung der Stellgröße aufzeichnen...
Zitat:Meine Steuerung setzt in einem gewissen Abstand entweder den Strom auf Max oder auf 0.
Hört sich an, als wenn das System zu träge reagiert und der Regler jedesmal (zu schnell für das System) ins Outputlimit läuft...
Wie schon gesagt: es hilft ungemein, wenn man sich einmal die Theorie dazu aneignet. Einfach so (mit einem anscheinend schwerfälligem System) an den Parametern rumspielen bringt nicht viel...