SubVI in einer While-Schleife - Druckversion +- LabVIEWForum.de (https://www.labviewforum.de) +-- Forum: LabVIEW (/Forum-LabVIEW) +--- Forum: LabVIEW Allgemein (/Forum-LabVIEW-Allgemein) +--- Thema: SubVI in einer While-Schleife (/Thread-SubVI-in-einer-While-Schleife) |
SubVI in einer While-Schleife - Blondchen - 11.10.2007 08:17 Hallo zusammen, das unten angehängte (vereinfachte) VI soll beim Erreichen eines Maximalwertes für den Füllstand eines Tankes ein Zulauf-Ventil schließen, und dann beim Erreichen des Minimums wieder öffnen, bis wieder der Maximalwert erreicht ist usw. Wird das VI als SubVI in einer While-Schleife ausgeführt, wird jedoch zwischen Minimum und Maximum immer der Standardwert für das Ventil (True oder False) übergeben. Dies wurde gelöst, indem die "Lokale Variable" des Ventils, an das "Ventil" selbst übergeben wird. Diese Lösung erscheint mir aber sehr unsauber. Meine Frage ist, wie ich so etwas besser und eleganter bewerkstelligen kann? Für Anregungen und Tipps wäre ich sehr dankbar! [attachment=9097] SubVI in einer While-Schleife - PeeGee - 11.10.2007 23:33 Hallo Blondchen, ja, da kann man Dir nur recht geben, so ist's unsauber! So leid es mir tut, aber es schreit mal wieder nach einer State-Machine (endlicher Zustandsautomat), hier mit drei Zuständen: Z1: leer ->Aktion: Ventil öffnen -> Z2: füllend Z2: füllend (wartet bis voll) -> Aktion: Ventil schliessen -> Z3: leer-laufend Z3: leer-laufend (wartet bis leer) -> Z1:leer Aber bevor Du Dich in der Zustandsautomaten stürtzt: ein shift-register tut's auch: nicht parallel testen, sondern die cases schachteln den Test auf >= max in den false case des Tests <= min oder so dann hast Du ein endergebnis, welches Du ausgeben kannst. Das shiftregister brauchst Du, um das Ventil offen zu halten, bis voll ist bzw zu bis leer ist meld' Dich, wenn das vollkommen unklar war! Gruss PeeGee SubVI in einer While-Schleife - Blondchen - 12.10.2007 07:46 Danke PeeGee! Werde das ganze Mal ausprobieren und wenn ich noch Fragen habe, melde ich mich nochmal! Gruß Blondchen SubVI in einer While-Schleife - Lucki - 12.10.2007 07:50 Wenn nichts zu tun ist (also im Zustand zwischen min und max), dann mußt du doch auch an den "Magnetventil-Zulauf" nichts übergeben. Die Problem scheint zu sein, daß Du nicht weißt, was Du mit dem freistehenden Element anfangen könntest, und gewissermaßen als Verzweiflungstat übergibt Du mittels einen lokalen Variablen den Wert des Elementes an sich selbst. 2 Vorschläge:[list=1] [*]ein einem der beiden Cases den true/False -Wert nicht an die lokale Variable übergeben, sondern an das Element selbst. Dann hast Du 2 lokale Variable weniger.<> [*]Das Element auf "Anzeige" konfigurieren. Dann mußt Du nichts mehr daran anschließen.<> [st] SubVI in einer While-Schleife - Lucki - 12.10.2007 08:30 Habe nochmal nachgedacht, mein Rat war eher suboptimal. Du willst es ja als Sub-Vi haben. Das Sub-VI muß die Möglichkeit haben, zwischen zwei Aufrufen sich den zuletzt gültigen Wert merken zu können. Das geschieht gewöhnlich mit einem nicht initialisierten Schieberegister, wobei man als Hilfsmittel eine While-Schleife braucht, die nur ein einziges Mal durchlaufen wird. Eine andere Möglichkeit wäre natürlich, wenn das Sub.Vi für das Magnetventil einen Ein-und Ausgang hat. Auf den Eingang wird der bisherige Wert gegeben, am Ausgang liegt der neue Wert an. Dann braucht sich das Sub-VI nichts zu merken. Edit: An der Max/Min-Logik stimmt einiges nicht, bitte selbst korrigieren [attachment=9099] (VI LV 8.2) SubVI in einer While-Schleife - Blondchen - 12.10.2007 12:10 ' schrieb:Wenn nichts zu tun ist (also im Zustand zwischen min und max), dann mußt du doch auch an den "Magnetventil-Zulauf" nichts übergeben. Die Problem scheint zu sein, daß Du nicht weißt, was Du mit dem freistehenden Element anfangen könntest, und gewissermaßen als Verzweiflungstat übergibt Du mittels einen lokalen Variablen den Wert des Elementes an sich selbst. Das stimmt nicht ganz. Zuerst war das Element freistehend. Da hatte ich ja das Problem, dass das VI als Sub VI in der While-Schleife immer den "Standardwert" zugewiesen bekommen hat, wenn der Wert von Tank zwischen Min und Max lag. Dieses Problem trat nicht mehr auf, als ich die loakle Variable angeschlossen habe, da diese immer noch den Wert für das Ventil vom vorhergehenden Durchlauf hatte. ' schrieb:Habe nochmal nachgedacht, mein Rat war eher suboptimal. Danke werde ich auch ausprobieren. Komme grad nicht dazu eure beiden Vorschläge zu testen. Jedoch vielen Dank schonmal! SubVI in einer While-Schleife - Lucki - 12.10.2007 13:20 ' schrieb:Dieses Problem trat nicht mehr auf, als ich die loakle Variable angeschlossen habe, da diese immer Das konnte ich nicht glauben und habs gleich probiert. Und Du hast recht: Es funktioniert tatsächlich. (Aber irgendwie suspekt ist es mir noch immer). Also, wenn Du es so beibehalten willst und nur die Eleganz Deines SubVis etwas verbessern möchtest, dann so: [attachment=9139] SubVI in einer While-Schleife - Blondchen - 12.10.2007 13:37 Ich habe jetzt den Vorschlag mit der While Schleife und dem Register umgesetzt und es funktioniert wunderbar. Das ist sicher die bessere Lösung. Nochmals vielen Dank! SubVI in einer While-Schleife - PeeGee - 13.10.2007 10:47 "und es funktioniert wunderbar." ... und das ist die Hauptsache! (auch wenn ich mich schon entschuldigen wollte, dass doch der Zustandsautomat eigentlich vier Zustände gebraucht hätte - einen für voll) Nebenbei: @Lucky: Diene letzte Lösung scheint mir falsch, da für Tank<Max das Ventil _immer_ zu bleibt, oder? Aber die Verwendung der True/False-selects ist schöner lesbar als die von mir vorgeschlagenen cases! herzlichen Gruß PeeGee SubVI in einer While-Schleife - Lucki - 13.10.2007 12:22 ' schrieb:Nebenbei: Hier die VIs zur Überprüfung. NB: Wenn man aus dem Ausgabeelement (Anzeige) des SubVi den zuletzt übergebenen Wert mit einer lokalen Variablen beim nächsten Aufruf auslesen kann, dann könnte man das doch als Alternative für ein nichtinitialisiertes Schieberegister allgemein verwenden. Die Sache erscheint mir aber irgendwie suspekt. Mich würden dazu mal andere Meinungen interessieren. (VIs LV 8.2) |