LabVIEWForum.de
While Loop mit Value Signaling beenden - Druckversion

+- LabVIEWForum.de (https://www.labviewforum.de)
+-- Forum: LabVIEW (/Forum-LabVIEW)
+--- Forum: LabVIEW Allgemein (/Forum-LabVIEW-Allgemein)
+--- Thema: While Loop mit Value Signaling beenden (/Thread-While-Loop-mit-Value-Signaling-beenden)

Seiten: 1 2


While Loop mit Value Signaling beenden - Idlewild - 02.05.2012 15:35

Hallo,

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


RE: While Loop mit Value Signaling beenden - GerdW - 02.05.2012 15:37

Hallo idlewild,

THINK DATAFLOW!

- 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...


RE: While Loop mit Value Signaling beenden - Idlewild - 02.05.2012 16:26

Hallo,

Vielen dank für die schnelle Antwort! War auf jeden Fall ein Anstoss nochmal drüber nachzudenken Wink

So wie ich es jetzt gemacht habe, funktioniert es zumindest so wie ich es mir vorgestellt habe, aber ist es auch "vernünftig" programmiert?

Danke und Grüße


RE: While Loop mit Value Signaling beenden - jg - 02.05.2012 16:37

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


RE: While Loop mit Value Signaling beenden - Lucki - 02.05.2012 17:59

(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.


RE: While Loop mit Value Signaling beenden - Andora - 03.05.2012 07:23

(02.05.2012 15:35 )Idlewild schrieb:  Hallo,

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 :

[attachment=39677] oder [attachment=39678]

obwohl dadurch wird die Möglichkeit der manuellen Funktionalität des Schalters außer Kraft gesetzt. Ein Argument muss du aber haben.


RE: While Loop mit Value Signaling beenden - GerdW - 03.05.2012 08:27

Hallo,

wenn wir schon Vorschläge machen, will ich mich beteiligen:
[attachment=39681]
Ganz ohne verschachtelte Schleife, ohne Sequenzen, ohne lokale Variablen oder PropertyNodes...


RE: While Loop mit Value Signaling beenden - Andora - 03.05.2012 08:33

(03.05.2012 08:27 )GerdW schrieb:  Hallo,

wenn wir schon Vorschläge machen, will ich mich beteiligen:

Ganz ohne verschachtelte Schleife, ohne Sequenzen, ohne lokale Variablen oder PropertyNodes...

das wäre die saubere Variante, ich habe den Schalter in Prinzip als überflüssig gesehen.


RE: While Loop mit Value Signaling beenden - Idlewild - 03.05.2012 09:36

Guten Morgen,

@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 Sad

Edit: die "not"s sollten da nicht mehr sein

[/php][/quote]


RE: While Loop mit Value Signaling beenden - GerdW - 03.05.2012 09:42

Hallo idlewild,

THINK DATAFLOW!

- 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...