LabVIEWForum.de
For-Scheife zu unterschiedlichen Zeitpunkten unterbrechen? - Druckversion

+- LabVIEWForum.de (https://www.labviewforum.de)
+-- Forum: LabVIEW (/Forum-LabVIEW)
+--- Forum: LabVIEW Allgemein (/Forum-LabVIEW-Allgemein)
+--- Thema: For-Scheife zu unterschiedlichen Zeitpunkten unterbrechen? (/Thread-For-Scheife-zu-unterschiedlichen-Zeitpunkten-unterbrechen)



For-Scheife zu unterschiedlichen Zeitpunkten unterbrechen? - Stefan_r - 28.10.2014 14:24

Guten Tag,
ich bin auf der Suche nach einer möglichst einfachen Lösung, eine For-Schleife an mehreren Punkten im Ablauf dieser Schleife zu beenden.
Im Anhang ist ein Bild zu sehen wie ich es gerne machen würde. Auf Grund des Datenflusses funktioniert es ja leider nicht so einfach.
Zum Verständnis: Der Boolean kann sich zu beliebigen Zeitpunkt ändern. Daraufhin möchte ich dann sofort die Schleife beenden

Was ich ungern möchte, mit If-Bedingungen die weitere Ausführung zu schachteln. Das würde in meinem Programm extrem Aufwendig werden und ist eher meine Notlösung.


Vielen Dank im Voraus,
Stefan


RE: For-Scheife zu unterschiedlichen Zeitpunkten unterbrechen? - NoWay - 28.10.2014 14:49

Da gibt es theoretisch verschiedene Möglichkeiten, die mir auf die schnelle einfallen.

Die Erste: Du bastelst dir eine FGV, die du in jedem Schleifendurchlauf abfragst.
Die Zweite: Mittels Eventstruktur das Abbruchsignal abfragen und dann per lokale Variable an die Schleife übergeben

Getesetet habe ich das jetzt nicht. Mir fällt aber auch kein grund ein, warum das so nicht funktionieren sollte Tongue


RE: For-Scheife zu unterschiedlichen Zeitpunkten unterbrechen? - Stefan_r - 28.10.2014 14:58

Das Problem ist nicht, den Wert der Variablen aktuell in die Schleife zu bekommen, das Problem ist, zu verschiedenen Zeitpunkten das Condition Terminal auszuwerten.

Ich suche also eine Lösung wie ich das Condition-Terminal mehrmals in einem Schleifendurchgang. (C-Analogy möchte ich an beliebiger Stelle ein Break einsetzen können) auswerten kann.

In dem Beispiel wird jeweils der korrekte Werte an das "oder" gegeben, aber leider erst ausgewertet, wenn beide Werte bereits bekannt sind.
Ich möchte aber verhindern das do x ausgeführt wird, wenn sich der Boolean schon geändert hat bis dahin. (Wie gesagt ich könte do x in eine If-Condition setzen die den Boolean abfragt, aber das ganze Programm ist etwas komplexer sodass es zum Schluss sehr groß und unschön würde)


RE: For-Scheife zu unterschiedlichen Zeitpunkten unterbrechen? - jg - 28.10.2014 15:17

Ich sag nur "State Machine", da kannst du nach jedem Schritt abbrechen! (THINK Dataflow!!!!)

Bei dem Screenshot mit der Flat-Sequence ist das nur über Umwege erreichbar. Du müsstest jeden To-Do in eine Case-Struktur packen und auswerten, ob vorher ein Fehler aufgetreten ist.

Da fährst du mit einem Umbau zur State-Machine besser.

Gruß, Jens


RE: For-Scheife zu unterschiedlichen Zeitpunkten unterbrechen? - NoWay - 28.10.2014 15:22

Wie wäre es dann mit einer Statemachine?
Du hättest zwar dann den Aufwand gewonnen, dass du tatsächlich immer die Zustände überprüfen musst, aber das gesamte Szenario bleibt aufgrund der Struktur der Statemachine weiterhin übersichtlich.

Beispiel:
State 1: do y
next State
State 2: do x
next State
...
State n: Abbruch

Edit: Jens war schneller Big Grin


RE: For-Scheife zu unterschiedlichen Zeitpunkten unterbrechen? - Lucki - 29.10.2014 14:43

State-machine ist natürlich immer gut, aber wenn Du nur wissen wolltest, wie man genau Dein Beispiel auf einfachste Art zum funktionieren bringt, dann würde ich diese "extrem rudimentäre State-machine" vorschlagen:
[attachment=51198]

Als Pseudocode sähe das so aus:
begin:
do y
if Stop then exit
do x
If Stop then exit
goto begin
exit:

(Hier wurde nicht mit eingearbeitet, dass es sich um eine For-Schleife handelt, die bei Erreichen von i=N auf natürliche Weise beendet wird. Gegenüber Deinem Beipiel ist N [- bei mir fehlerhafter Weise gar nicht angeschlossen -] zu verdoppeln, da die Schleife für einen vollständigen Zyklus immer zwei mal durchläuft)

Gruß Ludwig


RE: For-Scheife zu unterschiedlichen Zeitpunkten unterbrechen? - Stefan_r - 03.11.2014 10:12

Vielen Dank für eure Antworten.
Dann werde ich also um eine Neustrukturierung des Codes nicht herumkommen.
(Verdoppeln des Condition-Terminals wäre auch zu schön gewesen Wink )