Wenn dein Problem oder deine Frage geklärt worden ist, markiere den Beitrag als "Lösung",
indem du auf den "Lösung" Button rechts unter dem entsprechenden Beitrag klickst. Vielen Dank!
Ich tüftel gerade fleißig mit der Behandlung von Ereignissen in einer While-Schleife, jedoch passt irgendwie meine logik nicht.
Nun mal zu meinem Ziel.
In einer While-Schleife wird eine Variable (Ausgang eines SubVI) unregelmäßig mit folgenden werte belegt.
0, 1, 5, 7, 20
Bei jedem Schleifendurchlauf jeweils eine Zahl.
Sobald die VARIABLE den Wert 0 hat soll die While schleife beendet werden.
Aber viel wichtiger ist, zu ermitteln, nach wievielen Schleifendurchläufen das erste mal die Variable den Wert 1, 5, 7 oder 20 hat.
diese Anzahl wird dann über ein Anzeigeelement ausgegeben.
Ich habe versucht über eine Gleichheitsoperation die variable abzufragen und dann den Wert des schleifenzählers auszugeben.
Hierbei habe ich nur das problem dass beim nächsten schleifendurchlauf, wenn die Variable einen anderen wert hat als zuvor meine Anzeige überschrieben wird.
Ich habe eben für jeden Wert (1, 5, 7, 20) eine eigene anzeige.
Wie muss meine Logik aussehen damit wirklich nur beim ersten auftreten der wert des schleifenzählers angezeigt wird und danach eben nichtmehr überschrieben wird.
Ich hoffe ihr könnt nachfollziehen was ich vorhabe.
' schrieb:Wie muss meine Logik aussehen damit wirklich nur beim ersten auftreten der wert des schleifenzählers angezeigt wird und danach eben nichtmehr überschrieben wird.
Ich hoffe ihr könnt nachfollziehen was ich vorhabe.
Hallo,
erstmal, ja, war sehr gut nachvollziehbar. Was du aus meiner Sicht brauchst, ist eine "2. Logikebene". 2 Ideen (die aber im Prinzip identisch sind) hätte ich:
1. Du hast ja für jede "Anzahl" eine Anzeige und somit auch eine Variable. Wenn diese Anzeige jetzt vor Schleifenbeginn auf meinetwegen -1 initialisiert sind, kannst du bei jedem Durchlauf parallel überprüfen, ob die Anzeige schon größergleich Null ist, in diesem Fall darfst du deinen Anzeige nicht mehr überschreiben.
2. Oder du legst für jede Anzeige parallel eine Bool-Variable an, die anfangs auf meinetwegen FALSE initialisiert wird. Sobald die entsprechende Zahl zum ersten Mal auftaucht, wird diese Boolean auf TRUE gesetzt und du hast nun einen Merker, diese Anzeige nicht mehr neu zu beschreiben.
Nachdem ein Bild bzw. VI mehr sagt als tausend Worte, hier noch für Variante 2 ein Screenshot:
MfG, Jens
Wer die erhabene Weisheit der Mathematik tadelt, nährt sich von Verwirrung. (Leonardo da Vinci)
!! BITTE !! stellt mir keine Fragen über PM, dafür ist das Forum da - andere haben vielleicht auch Interesse an der Antwort!
das mit der CASE Struktur ist mir jetzt schon klar.
Allerdings weis ich gerade nicht wie ich in der while-Schleife mehr als eine abfrage gestallte?
also für die einzelnen Zahlen.
und was ist das rechts von der -1, dieses NUMERIC 2?
Weiterhin habe ich in meiner Case-Struktur ein weißes Quadrat als Tunnel.
Kannst du mir noch erklären woher die einzelnen CASE-Strukturen für die einzelnen Zahlen wissen, wieso gerade die -1 als initialisierung für eine bestimmte struktur gelten?
Ich hab vergessen, einen Screen-Shot vom TRUE-Case zu machen:
Jetzt klarer? In der Variablen Numeric 2 steht in meinem Bsp also der Index, wenn zum ersten Mal eine Zufallszahl > 0.8 aufgetreten ist. Variable Numeric zeigt die Anzahl der Schleifendurchläufe an, bis zum ersten Mal ein Wert < 0.1 aufgetreten ist.
Um klar zu erkennen, ob überhaupt eine Zahl > 0.8 aufgetreten ist, initialisiere ich den Indicator "Numeric 2" über eine lokale Variable (Rechtsklick auf Indicator im BD->Create->Local Variable) auf den Wert -1.
MfG, Jens
Wer die erhabene Weisheit der Mathematik tadelt, nährt sich von Verwirrung. (Leonardo da Vinci)
!! BITTE !! stellt mir keine Fragen über PM, dafür ist das Forum da - andere haben vielleicht auch Interesse an der Antwort!
' schrieb:Jedoch habe ich beim boolschen Ausgangstunnel immernoch ein weißes Quadrat.
z.B.: Weil in einem Case der Anschluss fehlt. Entweder du machst eine Konstante hin oder du verwendest die Eigenschaft "Standard verwenden). Im Falle eines "großen weißen Quadrates" sollte ein Fehler vorliegen.
Im Falle eines "kleinen weißen Quadrates" liegt die Eigenschaft "Standard verwenden" vor und kein Fehler.
Es gäbe auch den Fall, dass du ein weißes Quadrat über einem grünen liegen hast. Das kommt dann, wenn du mit der Maus beim Verbinden nicht genau das Viereck triffst, sondern den Rahmen nebendran.
Jeder, der zur wahren Erkenntnis hindurchdringen will, muss den Berg Schwierigkeit alleine erklimmen (Helen Keller).
' schrieb:In einer While-Schleife wird eine Variable (Ausgang eines SubVI) unregelmäßig mit folgenden werte belegt.
0, 1, 5, 7, 20
Bei jedem Schleifendurchlauf jeweils eine Zahl.
Sobald die VARIABLE den Wert 0 hat soll die While schleife beendet werden.
Aber viel wichtiger ist, zu ermitteln, nach wievielen Schleifendurchläufen das erste mal die Variable den Wert 1, 5, 7 oder 20 hat.
Das Ganze macht - wenn überhaupt - nur Sinn, wenn das Sub-Vi auch andere Zahlen als die genannten erzeugt. Ich habe mich mal dafür entschieden, daß das Sub-VI Zufallszahlen im Bereich 0..49 erzeugt und daß das Haupt-VI zwei Anzeigen haben soll:
erste Anzeige: Anzahl Durchläufe bis um ersten Vorkommen von 1,5,7,20
zweite Anzeige: Anzahl Durchläufe bis Stop (Vorkommen von 0)
Wenn die Null vor der 1,5,7,20 erscheint, dann zeigt die erste Anzeige -1 an.
Es ist im Prinzip ein State-machine mit zwei Zuständen:
False-State: Vor dem ersten Vorkommen von 1,5,7,20
True-State: danach