LabVIEWForum.de
Schleife wird zu früh beendet... Wie lässt sichs beheben? - Druckversion

+- LabVIEWForum.de (https://www.labviewforum.de)
+-- Forum: LabVIEW (/Forum-LabVIEW)
+--- Forum: LabVIEW Allgemein (/Forum-LabVIEW-Allgemein)
+--- Thema: Schleife wird zu früh beendet... Wie lässt sichs beheben? (/Thread-Schleife-wird-zu-frueh-beendet-Wie-laesst-sichs-beheben)

Seiten: 1 2


Schleife wird zu früh beendet... Wie lässt sichs beheben? - Excalibour - 18.05.2007 20:58

Hallo,
ich hab folgendes Problem: Ich hab eine Schleife, die mir True/False-Wechsel zählen soll. Das funktioniert auch soweit, solange man die Schleife manuell stoppt. Sobald ich aber das Stoppen durch eine weitere True/False-Entscheidung hervorrufe, wird offenbar die Schleife zu früh abgebrochen, sodass mir kein einziger Wechsel angezeigt wird.
Jetzt habe ich schon mal im Forum nach Warteoperationen gesucht, jedoch waren die alle nicht tauglich, bzw. ich hatte nicht den gewünschten Effekt.
Gibt es eine Funktion mit der man ein boolschen Wert verzögern kann? Oder habe ich eine Kleinigkeit im VI übersehn?


Schleife wird zu früh beendet... Wie lässt sichs beheben? - jg - 18.05.2007 21:51

Hallo,

ich denk mal, ich weiss, wo dein Fehler liegt.

Du musst die die True/False-Entscheidung innerhalb der While-Schleife einbauen.

Eine While-Schleife wird nämlich erst ausgeführt, wenn alle Eingänge anliegen. Also, wenn deine Stop-Bedingung für die While-Schleife auch außerhalb der While-Schleife liegt, wird sie nur einmal ausgeführt.

MfG, Jens


Schleife wird zu früh beendet... Wie lässt sichs beheben? - Excalibour - 19.05.2007 13:25

Deine Aussage klang ganz vernünftig und schien mir einleuchtend. Nachdem ich den Vergleichsoperator in die Schleife geschmissen hatte, habe ich dennoch nicht die gewünschten Ergebnisse bekommen. Woran liegts?


Schleife wird zu früh beendet... Wie lässt sichs beheben? - jg - 19.05.2007 14:06

Hallo,

Nur den Verglichsoperator in die Schleife? Zu wenig. Der ganze Vergleich muss rein.

Am besten, Screenshot oder VI hochladen.

MfG, Jens


Schleife wird zu früh beendet... Wie lässt sichs beheben? - Excalibour - 21.05.2007 09:42

Also hier ist das VI.
Was nicht klappt, ist auf der rechten Seite in der Schleife zu finden. Momentan ist nur die Bedingung in der Schleife, ich hatte jedoch auch mehr in die Schleife gepackt, jedoch ohne Erfolg. Was passt hier nicht? Warum wird die Schleife zu früh beendet?


Schleife wird zu früh beendet... Wie lässt sichs beheben? - jg - 21.05.2007 10:35

Hallo,

zu deinem letzen VI: Die While-Schleife läuft GENAU 1x durch.

Wieso: du vergleichst: Anzahl der Schleifendurchläufe deiner For-Schleife (ergibt sich aus der Zeilenanzahl der 2D-Arrays per Autoindexing) mit der aus Array-Size zurückgegebenen Zeilenanzahl der 2D-Arrays -> du vergleichst also N=N ergibt TRUE. Fertig.

Ich verstehe leider nicht, was deine zusätzliche Abbruchbedingung sein soll, bzw. was willst du eigentlich mit der While-Schleife da am Schluß berechnen?

MfG, Jens


Schleife wird zu früh beendet... Wie lässt sichs beheben? - canix - 21.05.2007 11:34

Versteh ich das richtig, daß du im endeffekt wissen möchtest, wie oft dein grenzwert pro zyklus überschritten wird?


Schleife wird zu früh beendet... Wie lässt sichs beheben? - Excalibour - 21.05.2007 12:55

Hi,
habe das Problem anders gelöst:
Verglichen wird jetzt nicht N von der for-schleife mit Zeilenzahl des Arrays sondern N von der for-schleife mit i von der While-Schleife. Dann wird die while-Schleife gestoppt, wenn alle Datensätze bearbeitet wurden.

Danke aber trotzdem für alle Ratschläge!

@canix: Ja, eigentlich schon... Hast Du einen besseren Vorschlag als die while-schleife?


Schleife wird zu früh beendet... Wie lässt sichs beheben? - jg - 21.05.2007 13:51

Hallo,

zwei einfachere Ansätze:
1. Nimm statt While-Schleife eine For-Schleife mit Autoindexing deines Boolschen Array oder noch besser:
2. Addiere doch gleich eine Variable in deiner ersten Schleife (innerhalb der Case-Struktur, in der das Boolsche-Array gebaut wird) auf, dann kannst du dir die zweite Schleife komplett sparen!

MfG, Jens


Schleife wird zu früh beendet... Wie lässt sichs beheben? - canix - 21.05.2007 13:52

' schrieb:@canix: Ja, eigentlich schon... Hast Du einen besseren Vorschlag als die while-schleife?

Jou, ich würde das alles in EINEM Schritt in der For-Schleife machen.
Einen neues 2d-Zähler-Array (des sich mit jedem Zyklus erweitert) durchschleifen und in dem Case, wo auf Grenzwertüberschreitung geprüft wird, den entsprechenden Zähler bezüglich Zyklusnummer hochzählen (den Index für das Zähler Array kannst du aus der Modulo-fkt. beziehen). Bei der Umsetzung kannst Du Dich in etwa an dem Zähler orientieren, der bereits vorhanden ist und zählt wieviele Zyklen "gefeuert" werden.

Das Array würde nachher folgendermassen aussen:

Index 0: 3599 3601
Index 1: 120 7080
Index 2: 5000 2200
...
Index 159: 4300 2900

Da du ja mal meintest, Du wolltest zwei Gruppen bilden (Zyklen mit und ohne Grenzwertüberschreitung) würde ich auf die letzte Version aus diesem Beitrag aufbauen:
http://www.LabVIEWforum.de/index.php?showtopic=5843#

und zwar 7.1: "versuch mit schleife 5.vi"

komme erst heute abend dazu dir ein beispiel zu posten

gruß
Jens