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 möchte eine While Schleife mit Hilfe der Property Node Val.(Signal) beenden. Es soll also, wie auf dem Screenshot zu sehen, bei einem bestimmten Wert ein Dialog Fenster erscheinen mit nur einer Wahlmöglichkeit. Beim drücken des "Beenden" Buttons auf dem Dialog Fenster soll das Programm abbrechen.
Nun meine Frage, warum geht das nicht? liegt es einfach daran das der "stop" button ein boolean ist?
Danke und mit freundlichen Grüßen
Idlewild
Anzeige
02.05.2012, 15:37 (Dieser Beitrag wurde zuletzt bearbeitet: 02.05.2012 15:39 von GerdW.)
- Die FOR-Loop wird erst nach Ablauf aller 25 Iterationen beendet...
- Der Stop-Knopf wird parallel dazu abgefragt - wahrscheinlich bevor du ihn setzt. Deshalb gibt es einen weiteren Durchlauf der Whileloop...
Nein, so wird es noch nicht so richtig funktionieren.
1) Da LabVIEW alles, was parallel abgearbeitet werden kann, auch parallel abarbeitet, ist der Wert des Stop-Buttons in der Regel schon direkt am Start der Schleife ausgelesen. Mit hoher Wahrscheinlichkeit hast du immer 2 Durchläufe deiner While-Schleife. Zum Beweis, schließ einfach einmal einen Indikator am Index der While-Schleife an.
2) Mit Value(Signaling) verwendest du eigentlich die falsche Property Node. In diesem Fall langt auch Value. Die Signaling-PropertyNode ist dafür gedacht, ein Event in einer Event-Struktur auszulösen, so als ob interaktiv der Button bedient wurde.
3) Du kannst die For-Schleife auch vorzeitig abbrechen, einfach mal Rechtsklick auf den Rand -> "Conditional Terminal". Aktuell gibst du nur den Vergleich des letzten Durchlaufs weiter.
Wie Gerd schon gesagt hat, THINK DATAFLOW.
Gruß, 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!
(02.05.2012 16:26 )Idlewild schrieb: So wie ich es jetzt gemacht habe, funktioniert es zumindest so wie ich es mir vorgestellt habe, aber ist es auch "vernünftig" programmiert?
Die "unvernünftige Programmierung" beginnt schon in der ersten For-Schleife. Von den 100 Durchläufen sind die ersten 99 für die Katz, die Ergebnisse werden überhaupt nicht verwendet. Für den boolschen Ausgang zählt nur das Ergebnis des letzten Durchlaufes.
03.05.2012, 07:23 (Dieser Beitrag wurde zuletzt bearbeitet: 03.05.2012 07:26 von Andora.)
ich möchte eine While Schleife mit Hilfe der Property Node Val.(Signal) beenden. Es soll also, wie auf dem Screenshot zu sehen, bei einem bestimmten Wert ein Dialog Fenster erscheinen mit nur einer Wahlmöglichkeit. Beim drücken des "Beenden" Buttons auf dem Dialog Fenster soll das Programm abbrechen.
Nun meine Frage, warum geht das nicht? liegt es einfach daran das der "stop" button ein boolean ist?
Danke und mit freundlichen Grüßen
Idlewild
Hallo,
du könntest dir mit Sequenzen helfen wie weiter unten :
oder
obwohl dadurch wird die Möglichkeit der manuellen Funktionalität des Schalters außer Kraft gesetzt. Ein Argument muss du aber haben.
wenn wir schon Vorschläge machen, will ich mich beteiligen:
Ganz ohne verschachtelte Schleife, ohne Sequenzen, ohne lokale Variablen oder PropertyNodes...
@jg: Die while Schleife wurde tatsächlich zweimal durchlaufen, bei der jetzigen Version wird sie sogar viermal durchlaufen. Ist nicht so toll. Das Value(Signaling) brauche ich tatsächlich für eine Event Struktur. Bei dem ganzen Programm ist eine Event Struktur in einer while Schleife, und bei bestimmten Ereignissen (Wete zu klein) soll die while Schleife beendet werden. Cool das mit dem Conditional Terminal wusste ich nicht, das ist schonmal hilfreich. Vielen dank!
@Lucki: habe ich mir auch nochmal genauer angeschaut, mit dem Hinweis von jg habe ich das behoben glaube ich
@Andora: die Möglichkeit des manuellen beenden des Programms soll weiter vorhanden sein, aber habe es jetzt auch nochmal mit Sequenzen ausprobiert
@gerdw: leider bin ich auf die property nodes angewiesen
Vielen dank euch!
Bei der jetzigen Version funktioniert die For Schleife dank dem Conditional Terminal so wie ich mir das vorgestellt habe. Es wird auch bei Abbruch ein "true" in den zweiten Frame der Sequenz übergeben. Aber warum wird beim drücken des "beenden" buttons im erscheinenden Dialog Fenster "ignoriert". Und im Gegensatz dazu kann ich im dritten Frame der Sequenz das Programm weiter laufen lassen bzw. sogar beenden, und zwar auch mit Value(Signaling). Und warum wird die while Schleife mehrmals durchlaufen
- Dein Stop-Event wird erst nach Abarbeiten des Start-Events abgearbeitet - DATAFLOW!
- Grundregel für Events: Ein Event sollte immer so schnell wie möglich abgearbeitet werden, lang laufende Schleifen im Eventcase vermeiden...