LabVIEWForum.de - PID Regler kontinuierlich betreiben trotz Case-Struktur

LabVIEWForum.de

Normale Version: PID Regler kontinuierlich betreiben trotz Case-Struktur
Du siehst gerade eine vereinfachte Darstellung unserer Inhalte. Normale Ansicht mit richtiger Formatierung.
Einen wunderschönen Nachmittag werte LVF-Gemeinde.

Ich habe eine Frage zum Betrieb eines PID-Reglers.

Ich habe eine Case-Struktur erstellt um verschiedene Prüfungen nacheinander abzufahren.

Die Regelung klappt soweit auch. Allerdings startet mein Regler bei jedem neuen Case wieder mit der Stellgröße bei 0 und fährt dann hoch. Ich möchte aber gerne, dass er mit der Stellgröße beim Wert aus dem vorherigen Case beginnt.

Gibt es da eine Möglichkeit?

Kann man den Regler außerhalb der Case-Struktur betreiben, also in der while-Schleife und dann bei neuem Case einfach einen höheren Sollwert übergeben, so dass er einfach vom aktuellen Wert aus die Stellgröße erhöht?

Vielen Dank und ein schönes Wochenende!

Philipp
' schrieb:Gibt es da eine Möglichkeit?
Klar. Wahrscheinlich gibt es sogar mehrere Möglichkeiten.
Ich weiß, dass es geht. Wie, weiß ich nicht. Dazu müsste ich den Sourcecode ankucken.

Zitat:Kann man den Regler außerhalb der Case-Struktur betreiben, also in der while-Schleife und dann bei neuem Case einfach einen höheren Sollwert übergeben, so dass er einfach vom aktuellen Wert aus die Stellgröße erhöht?
Ich sag wieder eiskalt: Ja. Nur wie?

Ich könnte jetzt einfach sagen: Zieh den Regler einfach raus, genau so wie du das beschrieben hast. Noch zwei, drei Drähte und fertig. Aber: Genaues kann man hier nur sagen, wenn man den Sourcecode sieht und noch nachfragen kann bei Unklarheiten.
Guten Abend!

Ich kann das VI leider erst morgen posten. Hab grad keinen Zugriff drauf!

Aber danke schon mal.

Gruß
Guten Morgen!

Hier nun das VI.

Viele Grüße

Lv86_img
' schrieb:Allerdings startet mein Regler bei jedem neuen Case wieder mit der Stellgröße bei 0 und fährt dann hoch. Ich möchte aber gerne, dass er mit der Stellgröße beim Wert aus dem vorherigen Case beginnt.
Tust du denn vor jedem "neuen Case" das Programm beenden? Da der Regler kontinuierlich aufgerufen wird, sollte das mit der Stellgröße aber schon so funktionieren. Unsure

Zitat:Hier nun das VI.
Ich empfehle, das Programm weiter zu modularisieren - d.h. noch mehr Unterprogramme. Vorteil: BD wird kleiner - und übersichtlicher. Man muss nicht sehen, wie eine Berechnung funktioniert (sehen würde man das "große BD"). Es reicht, wenn man weiß, dass hier diese eine Berechnung gemacht wird - das erkennt man aus dem Namen des SubVIs.
Außerdem solltest du den Regler mit der Messwertaufnahme sequenzieren (Istwert).
Hi!

Also ich beende nicht das komplette Programm bei jedem Case. Aber in dem Case Druckeinregelung wird nach Beendigung ja die while-Schleife beendet damit ich aus der kontinuierlichen Erfassung wieder rauskomme.Ich denke da liegt das Problem. Innerhalb eines Cases Druckeinregelung funktioniert die Regelung. Bei der nächsten Druckstufe wird wieder ein Case Druckeinregelung aufgerufen. Da ist dann wieder ein PID-VI drinne. Hier wird es erneut aufgerufen und startet dann bei 0. Dazu meine Frage, wie man das PID-VI am geschicktesten nach Außen ziehen kann, sodass eine kontinuielriche Regelung möglich ist.

Denke aber das wird schwierig, da die Stellgröße ja auch nur in einem Case erfasst wird. Müsste dann ja auch kontinuierlich geschehen. Ich denek ich muss alle Signale kontinuierlich in einem Case erfassen. Allerdings habe ich dann nach wie vor das Problem, dass bei einer anderen Druckstufe das PID-VI neu gestartet wird...

Ach ja: Was meinst du mit Sequenzieren m Zusammenhang mit dem Regler?

Grüße
' schrieb:... Bei der nächsten Druckstufe ...
Jetzt hab' ich's verstanden: Erst Init, dann 3.5, dann 4.5 usw. Ist halt schlecht zu finden, wenn's BD größer ist als der Bildschirm (<= Wink mit Zaunpfahl).

Zitat:wird wieder ein Case Druckeinregelung aufgerufen. Da ist dann wieder ein PID-VI drinne. Hier wird es erneut aufgerufen und startet dann bei 0.
Regler hab ich nicht am Rechner. Aber gehe mal von folgendem aus: Das PID-Regler-SubVI ist invariant. D.h., so oft, wie das SubVI irgendwo im BD steht, so viele Regler gibt es. Das heißt natürlich, dass jeder Regler von allen anderen nichts weiß - also auch nicht den letzten Sollwert und nicht das bisheriege Verhalten. Ohne dieses invariante Verhalten wären parallele Regler nicht möglich.

Du kannst folgendes machen: Einfach den Regler in ein SubVI legen und das SubVI aufrufen. Dadurch ist das PID-Regler-VI nur noch ein einziges mal vorhanden.

Zitat:Ach ja: Was meinst du mit Sequenzieren m Zusammenhang mit dem Regler?
Guckst du Pfeil im Bild.
Welcher Wert wird an den Regler übergeben? Der "Systemdruck Istwert" vom Beginn der Schleife, also vor Starten der Abtastung, oder der "Systemdruck Istwert", der nach der Abtastung entstanden ist?
Hi!

Danke für die schnelle Antwort!

Ich werde das Programm auf jeden Fall noch verkleinern. Nur solange ich evtl. noch was verändere wollte ich die einzelnen Teil nicht in SubVIs packen. Aber der Zaunpfahl hat mir auch schon öfters gewunken... Das viele Scrollen geht mir auf den ZEiger ... :-D

Das Sequenzieren hatte ich zwischenzeitlich schon erledigt:-). Habs jetzt direkt verdrahtet. Ist denke ich die bessere Lösung ;-)

Aber das eigentliche Problem ist doch noch ein anderes.Wenn ich eine höhere Druckstufe einregel, komme ich in ein neues dem eigentlich Mess- und Auswerteablauf übergeordnetes Case. Das ist nötig, da die Messwerte teilweise unterschiedlich ausgewertet werden. Das heißt ich habe in jedem Druck-Case einen kompletten Prüfablauf drin. Somit auch die Druckeinregelung.

Ich müsste glaube ich das VI so umgestalten, dass die Erfassung, Regelung und Auswertung komplett in einem Case abläuft, da sonst ja auch keine Messwerterfassung mehr geschieht und somit für die Regelung auch kein Istwert mehr vorhanden ist.

Das bedeutet dann wohl, dass meine ursprüngliche Idee nicht funktioniert, den Regler nach Außen zu ziehen und ihm nur die Werte zu übergeben...

Grüße

Philipp
' schrieb:Das bedeutet dann wohl, dass meine ursprüngliche Idee nicht funktioniert, den Regler nach Außen zu ziehen und ihm nur die Werte zu übergeben...
Nur alleine die Sache mit dem Regler würde ja schon erledigt sein, wenn du das Regel-VI in ein SubVI auslagerst.

Andererseits stimme ich dir zu:
Mach ein SubVI (ich nenn solche Teile immer "Klasse"), das selbständig im Hintergrund läuft und alles macht. Analog-In-Task erstellen, starten, Messwerte sampeln etc. pp.. Gesteuert wird dieses SubVI durch eine Queue. Daten kann dieses SubVI nach außen liefern entweder per Queue oder per Melder. Je nach gusto kann diese Klasse auch das Analog-Out-Zeugs beinhalten - spricht also den Regler. Oder du machst auch für Analog-Out eine eigene Klasse, die den Regelwert dann per Melder von der Analog-In-Klasse bekommt.
Referenz-URLs