27.10.2006, 11:09
Beitrag #1
|
Guest
Unregistered
|
Stoppen einer For-Schlaufe wenn Case-Schlaufe nicht mehr erfuellt
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
|
|
|
27.10.2006, 11:12
(Dieser Beitrag wurde zuletzt bearbeitet: 27.10.2006 11:15 von Achim.)
Beitrag #2
|
|
|
27.10.2006, 11:13
Beitrag #3
|
cb
LVF-SeniorMod
Beiträge: 1.731
Registriert seit: Feb 2006
2018SP1
2001
EN
40xxx
Deutschland
|
Stoppen einer For-Schlaufe wenn Case-Schlaufe nicht mehr erfuellt
' 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:
|
|
|
27.10.2006, 11:38
Beitrag #4
|
Guest
Unregistered
|
Stoppen einer For-Schlaufe wenn Case-Schlaufe nicht mehr erfuellt
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
|
|
|
27.10.2006, 12:03
Beitrag #5
|
Achim
*****
Beiträge: 4.223
Registriert seit: Nov 2005
20xx
2000
EN
978xx
Deutschland
|
Stoppen einer For-Schlaufe wenn Case-Schlaufe nicht mehr erfuellt
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.
"Is there some mightier sage, of whom we have yet to learn?"
"Opportunity is missed by most people because it is dressed in overalls and looks like work." (Thomas Edison)
|
|
|
27.10.2006, 13:00
Beitrag #6
|
melph
LVF-Neueinsteiger
Beiträge: 6
Registriert seit: Sep 2006
8.01 Basic
2002
kA
Deutschland
|
Stoppen einer For-Schlaufe wenn Case-Schlaufe nicht mehr erfuellt
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.
|
|
|
27.10.2006, 13:19
Beitrag #7
|
|
|
27.10.2006, 13:45
Beitrag #8
|
melph
LVF-Neueinsteiger
Beiträge: 6
Registriert seit: Sep 2006
8.01 Basic
2002
kA
Deutschland
|
Stoppen einer For-Schlaufe wenn Case-Schlaufe nicht mehr erfuellt
' 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).
|
|
|
27.10.2006, 14:02
Beitrag #9
|
|
|
30.10.2006, 15:51
(Dieser Beitrag wurde zuletzt bearbeitet: 30.10.2006 15:57 von Kvasir.)
|
|
|
| |