18.04.2013, 14:59
|
Atilla
LVF-Gelegenheitsschreiber
Beiträge: 65
Registriert seit: Oct 2012
11
2012
DE
Deutschland
|
RE: Einstellung des simple_ PID Regler
Ich bin nun seit gestern dabei mir die theorie etwas näher zu bringen und bin mäßig erfolgreich, aber ich denke mittlerweile, das ich einfach den simple PID falsch anwende, weil ich einfach nicht verstehen kann, warum er mal meinen Wert setzt und dann wieder auf 0 setzt. Sogar wenn ich die Leistung erreicht habe, die ich haben möchte.
Mir ist durchaus bewusst, dass mein VI nicht sauber und ordentlich programmiert ist. Möglicherweise sind eine Funktionen unötige, aber das möchte ich gerade nicht hören. Mich interessiert ob ich den simple_PID.vi im Fall Leistungssteurung richtig plaziert habe. In diesem Fall befindet sich ein kleiner Zustandsautomat, doch davon wird im moment nur ein einziger Fall angesprochen (PID) den rest braucht man nicht zu beachten.
Der Output-Value von simple_PID wird an ein Vi geschickt, was dann aus dem Wert einen String macht und ihn an die Steuerung sendet. alle anderen SubVi's sind hier, denke ich, nicht von Bedeutung.
Ich hoffe ihr könnt mir da irgendwie weiter helfen, da ich extrem am verzeifeln bin.
gruß Atilla
simple_PID.vi (Größe: 12,73 KB / Downloads: 239)
PID-bestimmen.vi (Größe: 208,02 KB / Downloads: 252)
|
|
|
18.04.2013, 19:52
|
Holy
LVF-Stammgast
Beiträge: 339
Registriert seit: Sep 2008
2014
2007
EN
09XXX
Deutschland
|
RE: Einstellung des simple_ PID Regler
Ich versuche mal aus deinen Andeutungen zu verstehen was du probiert hast und an welcher Stelle es Probleme gibt. Prinzipiell scheinst du die "korrekten" Quellen bzw. Senken verbunden zu haben.
(18.04.2013 14:59 )Atilla schrieb: Ich bin nun seit gestern dabei mir die theorie etwas näher zu bringen und bin mäßig erfolgreich, aber ich denke mittlerweile, das ich einfach den simple PID falsch anwende, weil ich einfach nicht verstehen kann, warum er mal meinen Wert setzt und dann wieder auf 0 setzt. Sogar wenn ich die Leistung erreicht habe, die ich haben möchte.
Für die letzten Punkte würde ich einfach "falsche" PID-Parameter vermuten. Je nach Parametrierung versucht der PID einem Überschwingen über den Sollwert entgegenzusteuern. Und das kann auch bedeuten das er die Stellgröße auf 0 fährt.
Wie bist du mit deinen Versuchen vorgegangen? Wie sahen hierbei die PID-Parameter aus?
Was nutzt du um dir die Theorie näher zu bringen? Evtl. helfen hier ein paar Ressourcen von der NI Seite wie z.B. PID Theory Explained weiter.
Interessant wären sicher auch mal Graphen mit Sollwert, Istwert und Stellgröße. Einerseits für dich um die Regelparameter einstellen zu können und andererseits für uns um dir helfen zu können.
|
|
|
19.04.2013, 08:53
|
Atilla
LVF-Gelegenheitsschreiber
Beiträge: 65
Registriert seit: Oct 2012
11
2012
DE
Deutschland
|
RE: Einstellung des simple_ PID Regler
Zitat:Für die letzten Punkte würde ich einfach "falsche" PID-Parameter vermuten. Je nach Parametrierung versucht der PID einem Überschwingen über den Sollwert entgegenzusteuern. Und das kann auch bedeuten das er die Stellgröße auf 0 fährt.
Das Interessante ist halt, dass selbst wenn ich meinen Wunschwert erhalten habe setzt der Regler meinen Strom weiter, entweder zu hoch oder zu niedrig.
Zitat:Wie bist du mit deinen Versuchen vorgegangen? Wie sahen hierbei die PID-Parameter aus?
Zu aller erst habe ich einfach per Try and Error ausprobiert. Dafür habe ich meinen P Regler langsam hoch gesetzt und geschaut was passiert. Ich habe nun festgestellt das ich bei einem P-Wert von ca. 0,5 einen realtiv stabilen Verlauf habe, damit meine ich das die Überschläge nicht so groß sind und mein Strom im Bereich von 1,8-2,2 schwingt. Wenn ich jetzt die anderen Paramter und langsam hochsetze, so ergibt sich nur das die Auschläge wieder größer werden. Er hält einfach keinen Wert. Es ist egal welchen Wert ich an gebe, der Sollwert ist auch variabel, also der Nutzer stellt einen Wert ein und der bleibt, aber ich bin mittlerweile froh wenn ich überhaupt einen Wert halten kann.
Zitat:Was nutzt du um dir die Theorie näher zu bringen? Evtl. helfen hier ein paar Ressourcen von der NI Seite wie z.B. PID Theory Explained weiter.
Dafür habe ich mich erst in Wikipedia umgesehen und anschließend eine passenden Fachliteratur gesucht und gefunden. Dort habe ich mir das 1. Kapitel durchlesen um einfach das Vokabular zu verstehen. Anschließend habe ich mir versuch die Methoden der Einstellung näher zu bringen. Dabei habe ich mich für die Methode von ZIegler und Nichols entschieden, da sie mir sehr einfach schien.
Ich habe also erstmal meine Hochspannung auf 1000V gesetzt und die Strombegrenzung dafür auf 20mA. Aus diesem beiden Werten wird auch die Leistung berechnet, die konstant gehalten werden soll. Der Filamentstrom ist die Stellgröße, je nach dem wie dieser eingestellt ist, ändert sich der Emissionsstrom und die Hochspannung. Ab einem Filamentstrom von 2A erhalte ich erst einen Auschlag bei der Leistung.
Ich habe erst einen Strom von 0 gehabt und ihn dann auf 2,2 gesetzt. Die Sprungantwort habe ich aufgezeichnet und versucht mittels einer ausgleichgeraden eine Wendetangente zu bestimmten und daraus dann die Werte Tn=1,58 und Tv=2,239(siehe Wikipedia) aus zu rechnen. Aber die ausgerechneten Werte ergaben auch keine Besserung. Ich habe noch eine 2. Sprungantwort aufgezeichnet und erhielt ähnliche Werte für Tn und Tv.
Ich habe mir versucht einige Beispiele von Labview klar zu machen, doch ganz ohne Erklärung ist das etwas schwer. Danke für den Link ich werde mir das mal durchlesen.
Zitat:Interessant wären sicher auch mal Graphen mit Sollwert, Istwert und Stellgröße. Einerseits für dich um die Regelparameter einstellen zu können und andererseits für uns um dir helfen zu können.
Ich hoffe das dieses Bild Antwort genug ist :
Wie schon erwähnt ist der Filamentstrom die Stellgröße und diese schwnakt von 0,1 bis 2,3 hin und her. Manchmal werden einige Werte dazwischen gesetzt. Und mein Sollwert von 5W wird ein paar mal erreicht, aber er wird nicht gehalten.
An der Kommunikation liegt es nicht, da, wie ihr im Bild sehen könnte, ich jeden Sende- und Empfangsstring anzeigen lassen haben und diese genau die Werte wieder geben die anzeiget werden.
Danke für eure Bemühungen.
Gruß Atilla
|
|
|
19.04.2013, 11:22
|
Atilla
LVF-Gelegenheitsschreiber
Beiträge: 65
Registriert seit: Oct 2012
11
2012
DE
Deutschland
|
RE: Einstellung des simple_ PID Regler
Ich entschuldige mich zu tiefst für meinen dreifach Post, aber ich habe hier noch zwei Diagramm aufgenommen, wo ich denke, das sie etwas hilfreicher sein könnten.
Ich möchte euch nicht dränge, sondern euch nur genug Informationen liefern. Ich hoffe das ihr mir damit helfen könnt.
Mit freundlichen Grüße
Atilla
Hier ist die starke Schwankung um den Sollwert gut zu erkennen und das der Ausschlag nach unten immer sehr stark ist. Egal wie ich meine Paramter einstelle, ich schaffe es nicht einmal P so einzustellen, das ruhig um den Sollwert schwankt.
|
|
|
22.04.2013, 10:01
|
Atilla
LVF-Gelegenheitsschreiber
Beiträge: 65
Registriert seit: Oct 2012
11
2012
DE
Deutschland
|
RE: Einstellung des simple_ PID Regler
(19.04.2013 17:43 )Holy schrieb: Dein System ist scheinbar erheblich dynamische wie du mit deiner Datenerfassung bzw. Regelung. Zu sehen ist das an den wenigen (meist 3) Datenpunkten welche einen Peak und das Tal abbilden. Du regelst quasi zu selten. Um hier mit einer langsamen Regelung bessere Ergebnisse zu erzielen solltest du die Regelparameter stark zurückdrehen um ein eher träges Regelverhalten zu bekommen. Aktuell gibt dein Regler eine Stellgröße vor und wenn er den nächsten Ist-Wert sieht ist die Strecke schon sonstwohin geschossen.
Es wirkt so, das habe ich mir auch gedacht. Darum habe ich die Wartezeit der Schleife variable einstellbar gemacht und festgestellt das bei einer Zeit unterhalb von 350ms mein Programm nicht mehr mitkommt und zwischenzeitlich einfach nur alles 0 ausgibt.
Dann habe ich versucht niedrige Regelparamter zu verwenden und bin dafür die Regler in 0,001 Schritten hochgelaufen um sehen was passiert. Bis zu dem Zeitpunkt wo mein ich über 2A Filamentstrom komme läuft alles ganz gut. Die Schwankungen sind nur minimal. Aber dann irgendwann werden die Ausschläge stärker und jeder 3. Wert wird auf Null gesetzt. Mit I und D konnte ich da keine Glättung erzwingen. Stattdessen wurden die Auschlägen stärker.
Das doofe ist, dass meine Regelung erst ab 2A Strom anfangen kann, denn ab da erhöht sich auch der Emissionsstrom und somit die Leistung. Aber in diesem Bereich erhalte ich keine Glättung.
Gruß Atilla
|
|
|
22.04.2013, 10:17
|
GerdW
______________
Beiträge: 17.469
Registriert seit: May 2009
LV2021
1995
DE_EN
10×××
Deutschland
|
RE: Einstellung des simple_ PID Regler
Hallo Attila,
Zitat:festgestellt das bei einer Zeit unterhalb von 350ms mein Programm nicht mehr mitkommt und zwischenzeitlich einfach nur alles 0 ausgibt.
Dein Programm kommuniziert per VISA und serieller Schnittstelle (?) mit deinem Gerät. Leider hast du bisher nicht angegeben, mit welcher Geschwindigkeit hier Daten ausgetauscht werden:
- die Geschwindigkeit der Schnittstelle ist begrenzt durch die Baudrate und die Anzahl der zu übertragenden Bytes
- das Gerät könnte selbst noch einiges (von Millisekunden bis Sekunden) an Zeit für eine Antwort/Messung benötigen
Außerdem hast du die subVIs nicht angehangen, in denen die Kommunikation stattfindet. Hier könnte das Problem sein, dass dein Gerät nicht schnell genug antwortet und deshalb eine Null ausgegeben wird - als Standardwert für fehlende/fehlerhafte Daten in der Geräte-Botschaft. Hast du das per Debugging überprüft? Liefert dein Gerät überhaupt korrekte Daten?
Wie schon geschrieben: wenn dein System schneller agiert als du überhaupt Daten messen/austauschen kanst, wird eine Regelung schwierig. Da bleibt dann nur der vorgeschlagene Weg, mit sehr langsamen Regelparametern zu arbeiten und sich (extrem) langsam dem Sollwert anzunähern...
Zu der gezeigten Sprungantwort oben: Kannst du das nochmal plotten mitsamt dem Sprung des Stellparameters? Man sieht nur eine Kurve, weiß aber nicht, was/wie/wann der Sprungbefehl abgesetzt wurde. Ein Zählindex an der X-Achse ist auch nicht hilfreich, echte Zeitangaben vereinfachen die Interpretation...
|
|
|
22.04.2013, 10:44
|
Atilla
LVF-Gelegenheitsschreiber
Beiträge: 65
Registriert seit: Oct 2012
11
2012
DE
Deutschland
|
RE: Einstellung des simple_ PID Regler
Zitat:Dein Programm kommuniziert per VISA und serieller Schnittstelle (?) mit deinem Gerät. Leider hast du bisher nicht angegeben, mit welcher Geschwindigkeit hier Daten ausgetauscht werden:
- die Geschwindigkeit der Schnittstelle ist begrenzt durch die Baudrate und die Anzahl der zu übertragenden Bytes
- das Gerät könnte selbst noch einiges (von Millisekunden bis Sekunden) an Zeit für eine Antwort/Messung benötigen
Außerdem hast du die subVIs nicht angehangen, in denen die Kommunikation stattfindet. Hier könnte das Problem sein, dass dein Gerät nicht schnell genug antwortet und deshalb eine Null ausgegeben wird - als Standardwert für fehlende/fehlerhafte Daten in der Geräte-Botschaft. Hast du das per Debugging überprüft? Liefert dein Gerät überhaupt korrekte Daten?
Die Baudrate beträgt 9600 und ja das Gerät liefert korrete Daten. Die Subvis setzen einen String zusammen und senden diesen an das Gerät. Ich lasse mir durchgehend den String ausgeben und das was gesetzt oder ausgelesen wird passt mit meiner Ausgabe überein. Die Kommunikation habe ich per Konsole geprüft und daran sollte es nicht liegen, das die Werte falsch sind.
Zitat:Wie schon geschrieben: wenn dein System schneller agiert als du überhaupt Daten messen/austauschen kanst, wird eine Regelung schwierig. Da bleibt dann nur der vorgeschlagene Weg, mit sehr langsamen Regelparametern zu arbeiten und sich (extrem) langsam dem Sollwert anzunähern...
Wie langsam? In 0,0001 Schritten?
Zitat:Zu der gezeigten Sprungantwort oben: Kannst du das nochmal plotten mitsamt dem Sprung des Stellparameters? Man sieht nur eine Kurve, weiß aber nicht, was/wie/wann der Sprungbefehl abgesetzt wurde. Ein Zählindex an der X-Achse ist auch nicht hilfreich, echte Zeitangaben vereinfachen die Interpretation...
Ich weiß nicht genau was du damit meinst. Ich habe die Paramter P,I und D für die Sprungantwort nicht verwendet sondern manuell eingestellt. Also ich habe die Hochspannung und die Strombegrenzung eingestellt. Nach einigen Sekunden habe ich dann meinen Filamentstrom auf 2,2 Amper hochgesetzt und das Ergebnis aufgezeichnet. Anschließend habe ich dann den Wert erhöht auf 2,5 Amper.
Ich habe das ganze nochmal aufgenommen und diesemal ist die Einheit auf der x-Achse Sekunde auch wenn es da nicht steht.
|
|
|
22.04.2013, 12:09
|
GerdW
______________
Beiträge: 17.469
Registriert seit: May 2009
LV2021
1995
DE_EN
10×××
Deutschland
|
RE: Einstellung des simple_ PID Regler
Hallo Attila,
Zitat:Die Baudrate beträgt 9600 und ja das Gerät liefert korrete Daten.
D.h. du hast eine Übertragungsrate von ca. 1kByte/s, bei Botschaften von 10 Byte also max. 100 Messwerte pro Sekunde (exklusive Befehlsverarbeitungszeit des Geräts). Realistisch dürften 25Hz Samplerate sein...
Zitat:Die Subvis setzen einen String zusammen und senden diesen an das Gerät. Ich lasse mir durchgehend den String ausgeben und das was gesetzt oder ausgelesen wird passt mit meiner Ausgabe überein. Die Kommunikation habe ich per Konsole geprüft und daran sollte es nicht liegen, das die Werte falsch sind.
Und was sendet dein Gerät, wenn du mittendrin "Null"-Werte erhälst? Wo kommen diese Nullen her?
Zitat:Wie langsam? In 0,0001 Schritten?
Du sollst während der Regelung nicht an den PID-Parametern rumspielen!
Man stellt diese Parameter einmal ein und der Regler/das System soll sich dann (bei dir sehr langsam) an den Sollwert annähern...
Zitat:Nach einigen Sekunden habe ich dann meinen Filamentstrom auf 2,2 Amper hochgesetzt und das Ergebnis aufgezeichnet.
Diese Kurve ist noch "schön": das Gerät reagiert in einem Zeitraum von ca. 20s auf den Sprung und arbeitet "monoton steigend". P sollte ca. 1 sein: Stellwertänderung von 2,2 führt zu Istwertänderung von ca. 2,5.
Zitat:Anschließend habe ich dann den Wert erhöht auf 2,5 Amper.
Und hier wird's kritisch: Dein System reagiert innerhalb von 3s - und das sind bei dir gerade mal 3 Messwerte! Schlimmer noch: erst gibt es eine Reaktion in die falsche Richtung (diese Null bei 16s), danach dann innerhalb von 2 Messwerten auf den Sollwert. Wie soll ein PID-Regler damit klarkommen, wenn er womöglich noch auf Integral(E) und Diff(E) reagieren soll und das Resultat seiner Stellwertänderung immer erst eine Sekunde später "sieht"?
Dein P-Wert sollte hier eine ganz andere Größenordnung haben (Stellwertänderung von 0,3 führt zu Istwertänderung von 13). Solche stark nichtlinearen Systeme fahre ich gern mit einem PID-Regler mit Vorsteuerung: man macht eine grobe Abschätzung des Stellwertes über eine Vorsteuerung (die das nichtlineare Verhalten in einer Kennlinie abbildet) und der PID-Regler muss dann nur relativ kleine Fehlerwerte "wegregeln". Allerdings haben meine System typischerweise Zeitkonstanten in der Größenordnung 30s bis 2min, da ist das ganze unkritisch...
|
|
|
| |