LabVIEWForum.de - Ereignis in While schleife abfragen?

LabVIEWForum.de

Normale Version: Ereignis in While schleife abfragen?
Du siehst gerade eine vereinfachte Darstellung unserer Inhalte. Normale Ansicht mit richtiger Formatierung.
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.

gruß
' 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:

[attachment=9715]

MfG, Jens
Hallo Jens,

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?

Gruß
Ich hab vergessen, einen Screen-Shot vom TRUE-Case zu machen:

[attachment=9750]

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
so habe jetzt meine Struktur aufgebaut.

Jedoch habe ich beim boolschen Ausgangstunnel immernoch ein weißes Quadrat.
Wieso ist dieses Bei dir Grün?
' 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.
Hallo,

wenn du beide Cases "ausgefüllt" hast, sollte eigentlich alles gehen.

Ansonsten ist der Erklärung von "IchSelbst" nichts hinzuzufügen, außer vielleicht zu besseren Erhellung noch ein Screenshot:

[attachment=9754]

Oben: "großes weißes Quadrat"
Unten: "kleines weißes Quadrat"

MfG, Jens
' 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

(VI LV 8.2)
Referenz-URLs