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?
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
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?
Hallo,
Nur den Verglichsoperator in die Schleife? Zu wenig. Der ganze Vergleich muss rein.
Am besten, Screenshot oder VI hochladen.
MfG, Jens
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?
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
Versteh ich das richtig, daß du im endeffekt wissen möchtest, wie oft dein grenzwert pro zyklus überschritten wird?
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?
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
' 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