LabVIEWForum.de - Stoppen einer For-Schlaufe wenn Case-Schlaufe nicht mehr erfuellt

LabVIEWForum.de

Normale Version: Stoppen einer For-Schlaufe wenn Case-Schlaufe nicht mehr erfuellt
Du siehst gerade eine vereinfachte Darstellung unserer Inhalte. Normale Ansicht mit richtiger Formatierung.

Guest

So, nach dem das eine Erledigt waere, hab ich einen Fehler entdeckt, an den ich gar nicht dachte.

Wie kann ich es erreichen, dass ich wenn ich eine For-Scheife in einer Case-Abfrage habe, die For-Schleife nicht mehr ablaeuft wenn der Case nicht mehr erfuellt ist. Denn sitze ich da erst mal drin, dann arbeitet der die ab und schaut danach erst ob die Bedingung noch erfuellt ist.

Danke,
Boris
Hi,

du musst auf ne While-Schleife umschwenken, ne FOR-Schleife kannst du definitv nicht abbrechen...Aber: Wie soll das überhaupt gehen: Wenn du wie du schreibst die FOR in nem Case hast, dann wird der Case ja ohnehin nicht mehr abgefragt, eben weil du schon drin bist! Das ist doch rein logisch unmöglich...beschreib mal, was du eigentlich vorhast...

Gruss
Achim
' schrieb:So, nach dem das eine Erledigt waere, hab ich einen Fehler entdeckt, an den ich gar nicht dachte.

Wie kann ich es erreichen, dass ich wenn ich eine For-Scheife in einer Case-Abfrage habe, die For-Schleife nicht mehr ablaeuft wenn der Case nicht mehr erfuellt ist. Denn sitze ich da erst mal drin, dann arbeitet der die ab und schaut danach erst ob die Bedingung noch erfuellt ist.

Danke,
Boris

For Schleien kann man nicht stoppen. Du musst stattdessen eine While-Schleife verwenden:

[attachment=3785]

Guest

In der For-Schleife werden meine Messstellen abgefragt und gemessen, berechnet ... Jedoch muss ich den Durckscanner von Hand weiter schalten, dazu zeigt mir ein Laempchen an, dass ich ihn umschalten soll und dann geb ich mit einem Taster auf der Frontpanal das Signal, dass es weiter machen kann. Das heisst ich muss quasi jeden For-Schleifen Schritt bestaetigen.

Hmmm, mit ne While-schleife.... muss mal schauen wie das klappen soll.
Wenn einer ein Tip hat, waere ich dankbar, hab nicht mehr viel Zeit.

Danke,
Boris




Hab gerade darueber nachgedacht. Aber das kann gar nicht gehen. Wenn ich die While-Schleife in der For-Schleife habe, dann macht die For schleife trotzdem weiter bis sie fertig ist, auch wenn die Aktionen in der While-Schleife nicht ausgefuehrt werden weil ich nicht bestaetige.
Wenn ich die While schleife vor die For-schleife mache, dann faengt diese ja immer wieder von neuem an zu zaehlen und das will ich auch nicht, da er ja nur einmal 48 Messstellen abfragen soll und nicht immer wieder von neuem.

Gibt es da nicht was, was auf ein Signal vom Benutzer wartet? Sowas wie ein "Wait on Input" durch einen Taster. Und wie sieht das auch, wie verdrahte ich das.

Danke Boris
Hi,

das machste am besten mit ner State Machine...der nächste State wird erst angesprungen, wenn du ne Taste drückst ...schau mal das Beispiel hier an:

http://www.LabVIEWforum.de/index.p...ost&p=15729

Gruss
A.
Die Vorschleife lässt sich vielleicht nicht abbrechen -aber wenn man den ganzen Inhalt der Forschleife in ein Case packt und die Casebedingung in einem Schieberegister der umfassenden Forschleife hat, kann man sie faktisch auch von innen deaktivieren.
Allerdings rate ich aus Übersichtsgründen auch zur StateMachine.
Hi,

wenn ich melph richtig verstanden habe, wird aber die FOR-Schleife trotzdem bis zum Ende durchgearbeitet, allerdings wird darin dann immer ein leerer Case angesprungen...nicht sehr effektiv! Das hatte ich mir als Workaround auch schon gedacht, wollte aber so nen Mist (...tschuldigung...) gar nicht erst erwähnen!

Gruss
Achim
' schrieb:Hi,

wenn ich melph richtig verstanden habe, wird aber die FOR-Schleife trotzdem bis zum Ende durchgearbeitet, allerdings wird darin dann immer ein leerer Case angesprungen...nicht sehr effektiv! Das hatte ich mir als Workaround auch schon gedacht, wollte aber so nen Mist (...tschuldigung...) gar nicht erst erwähnen!

Gruss
Achim

Sieht schlecht aus -stimmt.
Tatsächlich ist es kompilerabhängig, ob deaktivierte Forschleifen weitergeführt werden. Ist im (privaten)Falsecase nur eine Belegung der Casevariable mit False vorhanden wird ein optimierender Compiler das als Einbahnstrasse erkennen und entsprechend umsetzen. Wie stark LabVIEW vorkompiliert weiß wohl nur NI. Wahrscheinlich wird LabVIEW die leere Forschleife nur ganz durchzählen, wenn man ihm auf die Finger schaut (quasi Schrödingers <strike>Katze</strike> VI).
Und selbst wenn nicht: dann investiert man halt ein paar Prozessorschritte pro überflüssigen Schleifendurchlauf -das merkt man unter LabVIEW eh nicht (bzw nur im Embedded Bereich). Als "mach-mal-schnell"-Lösung ist das ok -bei mehr Zeit sollte man das schon aus ästhetischen Gründen als Statemachine umsetzen(die im übrigen aber auch nicht viel anders arbeitet).
@melph:
Gut gebrüllt, Löwe!
Hmm also vielleicht hab ich ja irgendetwas komplett falsch verstanden.

Du hast also eine For Schleife, die deine Messstände abfrägt. Du musst jedoch jeden einzelnen Schritt bestätigen?
Also brauchst du im Prinzip eine For Schleife, die mit ihren Iterationen wartet, bis du einen Knopf drückst. Richtig?

Das kann man doch ganz einfach mit einer While Schleife in der For Schleife lösen.
Erstell wie gehabt deine For Schleife und pack dann zusätlich eine leere While Schleife (mit einem Wait und einem Stop Button) hinzu.
Dann wird eine Iteration von der For Schleife abgearbeitet und dann steht das Programm so lange, bis du die While Schleife per Stop Button beendest. Das gleiche dann für die nächste Iteration usw.

edit: Hmm habe gerade gesehen, du hast ja einen 2. Thread mit dem selben Problem erstellt und dort wurde anscheinend schon geholfen.
Referenz-URLs