LabVIEWForum.de - Zwei Whileschleifen beenden

LabVIEWForum.de

Normale Version: Zwei Whileschleifen beenden
Du siehst gerade eine vereinfachte Darstellung unserer Inhalte. Normale Ansicht mit richtiger Formatierung.
Hallo liebe LabView Gemeinde,

ich versuche in Labview zwei parallele Whileschleifen die sich gegenseitig beenden sollen zu realisieren.

Es ist mir auch soweit gelungen, nur gefällt mir die Lösung nicht so besonders, habe es über lokale Variablen gelöst.

Siehe dazu mein Beispiel Vi im Anhang.

Die obere Schleife soll die Messschleife darstellen.
Die untere die Laufzeischleife die runtergezählt wird.

Sobald bei der Messschleife ein Fehler autreten sollte müssen beide Schleifen beendet werden.
Auch müssen beide Schleifen beendet werden wenn die untere Laufzeitschleife bei Null angekommen ist.

Wie bereits geschrieben ist mir nur die Lösung mit den lokalen Variablen eingefallen.

Habt ihr vielleicht eine elegantere Methode dafür parat?

Bedanke mich

Simcum
Hallo simcum,

wozu überhaupt zwei Schleifen? Kannst du das nicht in einer Schleife erledigen?

Und wozu eine TimedWhileLoop? Reicht dir eine normale WhileLoop mit einem WaitUntil nicht aus?

So vielleicht:
[attachment=61285](AutoCleanup hat nicht so richtig funktioniert…)
Hallo GerW,

zwei Schleifen, weil in der Messchleife eine mehrkanälige Messung (Kanalanzahl kann variieren) duchgeführt wird.
Die genaue Messzeit kann Hardwarebedingt sich verändern, auch wenn die Kanalanzahl gleich bleibt.
Die Laufzeit muss aber kontinuierlich runtergezählt werden, würde ich es in der gleichen Schleife laufen lassen so würde
die Laufzeit mit Zeitsprüngen die der Messzeit entsprechen runtergezählt werden. Das ist nicht so optimal für die Darstellung.

Wie bereits geschrieben ist das Vi welches ich hochgeladen habe nur als Prinzipbeispiel zu betrachten.

Time Loop weil die Messungen können über mehrere Wochen gehen und die Schwankung von +- 1ms pro Schleifendurchlauf summiert sich entsprechend auf oder ab.
Hab mir auch schon überlegt die Wartezeit bis zum nächsten Vielfachen zu nutzen.


Wenn du da eine andere Idee hast nehme ich es gerne an.


Bedanke mich

Cumhur
Hallo simcum,

Zitat:Habt ihr vielleicht eine elegantere Methode dafür parat?
- Notifier: da kann man auch gleich den TimeOut zur Steuerung der Iterationszeit nutzen.
- eine FGV mit einem boolschen Input und einem boolschen Output: die merkt sich intern die Stoppbedingung.

Eine FGV könnte so aussehen:
[attachment=61286]

Lokale Variablen haben einen (IMHO großen) Nachteil: sie funktionieren nur lokal im VI! Sobald du deine Schleife zur "Restzeitanzeige" in ein eigenes VI auslagern willst, bekommst du also Probleme…
Hallo GerdW,

vielen Dank für die Tipps.

Werde es umsetzen

Gruß

Simcum
(17.09.2020 07:16 )GerdW schrieb: [ -> ]Hallo simcum,

Zitat:Habt ihr vielleicht eine elegantere Methode dafür parat?
- Notifier: da kann man auch gleich den TimeOut zur Steuerung der Iterationszeit nutzen.
- eine FGV mit einem boolschen Input und einem boolschen Output: die merkt sich intern die Stoppbedingung.

Eine FGV könnte so aussehen:


Lokale Variablen haben einen (IMHO großen) Nachteil: sie funktionieren nur lokal im VI! Sobald du deine Schleife zur "Restzeitanzeige" in ein eigenes VI auslagern willst, bekommst du also Probleme…

Hallo GerdW,

könntest du mir bitte das vi hochladen damit ich es mir mal anschauen kann, das wäre super von dir.
Mit FGV habe ich bis dato noch nie gearbeitet.

Bedanke mich
Hallo simcum,

Zitat:könntest du mir bitte das vi hochladen damit ich es mir mal anschauen kann, das wäre super von dir.
Mit FGV habe ich bis dato noch nie gearbeitet.
FGV = functional global variable
Einfach mal im Internet suchen, da wirst du viele Hinweise bekommen…

Letztendlich enthält eine FGV eine FeedbackNode, um intern Daten zu speichern. Man kann Daten reinschicken, bekommt Daten heraus und kann zusätzlich (gern per Enum) einen Befehl auf diesen Daten ausführen lassen. Quasi die Vorstufe zu einer OOP-Implementierung.
In diesem Fall beötigst du einen boolschen Eingang (die in den Schleifen generierte Abbruchbedingung) und einen boolschen Ausgang (die in der FGV kombinierte/gesammelte Abbruchbedingung). Und per Enum kannst du die FGV vor der Schleife initialisieren.

Versuch's erstmal allein, so lernst du das viel besser! Big Grin
Hallo GerdW,

ok werde ich, danke

Gruß

Simcum
@Gerd

Coole Sache - daran eine FGV als Endschalter für ein Programm mit mehreren Schleifen zu nutzen hatte ich auch noch nicht gedacht. Sind da die Ausführungszeiten / Blockierzeiten schnell genug, dass das auch bei größeren Programmen geht ohne dass man dann alle Schleifen runterbremst, weil die die FGV nur nacheinander abfragen dürfen?

Gruß Kiesch
Hallo Kiesch,

bei mir enthält diese Stop-FGV quasi nur eine Feedback-Node: hier den aktuellen Wert auszulesen ist eine Frage von Nanosekunden…
Referenz-URLs