INFO: Dieses Forum nutzt Cookies...
Cookies sind für den Betrieb des Forums unverzichtbar. Mit der Nutzung des Forums erklärst Du dich damit einverstanden, dass wir Cookies verwenden.

Es wird in jedem Fall ein Cookie gesetzt um diesen Hinweis nicht mehr zu erhalten. Desweiteren setzen wir Google Adsense und Google Analytics ein.


Antwort schreiben 

Wie kann man eine While Schleife von außen stoppen?



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!

01.12.2006, 15:14 (Dieser Beitrag wurde zuletzt bearbeitet: 01.12.2006 15:17 von Lucki.)
Beitrag #11

Lucki Offline
Tech.Exp.2.Klasse
LVF-Team

Beiträge: 7.699
Registriert seit: Mar 2006

LV 2016-18 prof.
1995
DE

01108
Deutschland
Wie kann man eine While Schleife von außen stoppen?
' schrieb:Hier Beispiel
Das Sub-Vi läßt sich nicht ohne weiteres mitten im Prozess stoppen, das geht nur über eine globale Variable oder mit anderen Methoden. Beispiel, wie es auch geht:
Das Sub-Vi erfasst kontinuierlich Daten und sendet diese über einen Melder an das Haup-VI. Wenn ich zu gegebener Zeit im Haupt.VI den Melder zerstörend beende, dann funktioniert der Melder im Sub-Vi nicht mehr und erzeugt einen Fehler. Diesen benutzte ich als Abbruchbedingung für das SU-VI.
Im Übrigen ist das einzig Denkbare und Richtige, daß in einer Schleife bei Abbruch noch alles ausgeführt wird. Wer soll anderenfalls wissen, was in der Schleife noch gemacht wurde und was nicht. Es bleibt Dir aber unbenommen, den Programmablauf entsprechend zu steuern, wenn Du irgendetwas bei Abbruch in der Schleife nicht mehr ausgeführt haben willst. Du brauchst dann in der Schleife einen Case und legst die Abbruchbedingung ran. Bei Abbruch wird dann für den Teil der Schleife, den Du bei Abbruch nicht ausgeführt haben möchtest, eine leeres Case ausgeführt. Aber das ist nicht unbedingt die feinste Art des Pogrammierens.
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
01.12.2006, 15:30 (Dieser Beitrag wurde zuletzt bearbeitet: 01.12.2006 15:35 von chris_deus.)
Beitrag #12

chris_deus Offline
LVF-Gelegenheitsschreiber
**


Beiträge: 78
Registriert seit: Aug 2006

2010
2006
en

48565
Deutschland
Wie kann man eine While Schleife von außen stoppen?
Ok ich glaube das funtioniert. Danke! Dann werde ich mal ne runde die Subvis umbasteln. ^^
Aber darauf muss man auch erstmal kommen!

MfG,
Chris

Webseite des Benutzers besuchen Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
02.12.2006, 11:24
Beitrag #13

chris_deus Offline
LVF-Gelegenheitsschreiber
**


Beiträge: 78
Registriert seit: Aug 2006

2010
2006
en

48565
Deutschland
Wie kann man eine While Schleife von außen stoppen?
Das hat mich noch auf folgende Idee gebracht......ist nicht so umständlich:

Die Subvis überprüfen einfach alle 5 sec welcher String in der Datei ......Stopp.txt steht.
Wenn das Hauptvi da "Stopp" reinschreibt, ist also nach 5 sec der Schleifendurchlauf quasi abgebrochen.
Gleichzeitig wird dann von einem speziellen Subvi, jede Motorenbewegung usw. gestoppt.

Bei meinem Programm würde ein voller durchlauf bis zu 10min dauern. - Da habe ich dann etwas Zeit und Nerven gespart ^^

Danke nochmal für die Hilfe!


MfG,
Chris

Webseite des Benutzers besuchen Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
02.12.2006, 18:39
Beitrag #14

Kvasir Offline
LVF-Freak
****


Beiträge: 642
Registriert seit: May 2006

10
2004
DE_EN

0000
Oesterreich
Wie kann man eine While Schleife von außen stoppen?
Dateien öffnen/schließen/lesen braucht allerdings recht viel Speicher und Arbeitsleistung.

Warum verwendest du nicht einfach einen Melder?

A few weeks of developement and testing can save a WHOLE afternoon in the library!
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
02.12.2006, 19:03 (Dieser Beitrag wurde zuletzt bearbeitet: 02.12.2006 19:15 von Lucki.)
Beitrag #15

Lucki Offline
Tech.Exp.2.Klasse
LVF-Team

Beiträge: 7.699
Registriert seit: Mar 2006

LV 2016-18 prof.
1995
DE

01108
Deutschland
Wie kann man eine While Schleife von außen stoppen?
<div align="left">
' schrieb:Das hat mich noch auf folgende Idee gebracht......ist nicht so umständlich:
Die Subvis überprüfen einfach alle 5 sec welcher String in der Datei ......Stopp.txt steht.
Mit der Idee liegst Du im Prinzip goldrichtig - allerdings nur im Prinzip, denn der Umweg über eine Datei und einen String ist 1000 mal zu umständlich.

Das Zauberwort, um Werte für alle VIs zwischenzuspeichern, heißt nicht Datei, sondern "nichtinitialisiertes Shift-Register". Ein solches VI wird "Global Variable VI" genannt, die entsprechende Variable ist eine "Funktionale Globale Variable". Sie ist einer echten globalen Variablen durchweg vorzuziehen. (Nicht aber einem Melder, da hat Kvasir schon recht)

Das Bild zeigt das Grundmuster eines solchen VIs. In Deinem Falle würde die Numerische Variable durch die Boolesche Variable "Abbruch" ersetzt werden, und auf die Gültigkeitsanzeige könnte auch verzichtet werden.
In der Hauptschleife wird das VI aufgerufen und gesetzt, in den Nebenschleifen aufgerufen und gelesen - fertig.</div>.


Angehängte Datei(en) Thumbnail(s)
   
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
05.12.2006, 10:07 (Dieser Beitrag wurde zuletzt bearbeitet: 05.12.2006 10:09 von chris_deus.)
Beitrag #16

chris_deus Offline
LVF-Gelegenheitsschreiber
**


Beiträge: 78
Registriert seit: Aug 2006

2010
2006
en

48565
Deutschland
Wie kann man eine While Schleife von außen stoppen?
Da hatte ich wohl ein Brett vorm Kopf! Das ist ja total einfach mit den Meldern!

Ok, dann mach ich das natürlich so.

Das it dem "nichtinitialisiertes Shift-Register" habe ich noch nicht so ganz verstanden....da machts aber bestimmt auch noch Klick.

Danke nochmal.


MfG,
Chris

Webseite des Benutzers besuchen Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
Anzeige
05.12.2006, 10:36
Beitrag #17

Kvasir Offline
LVF-Freak
****


Beiträge: 642
Registriert seit: May 2006

10
2004
DE_EN

0000
Oesterreich
Wie kann man eine While Schleife von außen stoppen?
Das mit dem "nichtinitialisierten Shiftregister" ist eigentlich ganz einfach. (Obwohl ich sagen muss, dass ich den Trick noch nicht kannte. Man lernt hier immer wieder was).

Normalerweise setzt man eine Konstante an den Eingang des Shiftregisters, außerhalb der Schleife. Dadurch nimmt das Register diesen Wert an beim ersten Durchlauf.
Tut man dies nicht, so steht im Shiftregister, der Wert den das Register bei der letzten Ausführung hatte.

Erstellst du nun so ein SubVi, wie Lucki gezeigt hat und führst es einmal aus, mit SetValue auf true, so nimmt dein Shiftregister diesen Wert auf und das SubVi schließt wieder (Die Schleife läuft ja immer nur 1x).
Rufst du das SubVi erneut auf, dann hat das Shiftregister (da ja keine Konstante vorgeschalten ist) den Wert, den du vorher hineingeschrieben hast.

Damit erfüllt dieses kleine SubVi die Funktion einer globalen Variable.

A few weeks of developement and testing can save a WHOLE afternoon in the library!
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
05.12.2006, 17:49 (Dieser Beitrag wurde zuletzt bearbeitet: 05.12.2006 17:50 von Lucki.)
Beitrag #18

Lucki Offline
Tech.Exp.2.Klasse
LVF-Team

Beiträge: 7.699
Registriert seit: Mar 2006

LV 2016-18 prof.
1995
DE

01108
Deutschland
Wie kann man eine While Schleife von außen stoppen?
<div align="left">
' schrieb:Das mit dem "nichtinitialisierten Shiftregister" ist eigentlich ganz einfach. (Obwohl ich sagen muss, dass ich den Trick noch nicht kannte. Man lernt hier immer wieder was).
Ich weiß das auch noch nicht sehr lange. Das Beispiel ist nicht auf meinem Mist gewachsen, es ist aus dem Buch Johnson/Jennings "LV graphical Proramming". Am Textrand dieses Beispiels steht sogar "CLAD", d.h es gehört zum Wissensstoff, wenn man ein "Certified LabVIEW Associated Developer" werden möchte.

Es gibt auch eine Labviev-Hilfe "Funktionale globale Variablen", aber das darin verwendete Beispiel ist so blöd, weil zu speziell, daß man von der Verwendung nur abgeschreckt werden kann.
</div>
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
06.12.2006, 15:59
Beitrag #19

chris_deus Offline
LVF-Gelegenheitsschreiber
**


Beiträge: 78
Registriert seit: Aug 2006

2010
2006
en

48565
Deutschland
Wie kann man eine While Schleife von außen stoppen?
Sehe ich das richtig, dass dann aber zwischendurch keine weiteren Shiftregister initialisiert werden dürfen?

Dann müsste ich ja alle Shiftregister mit Rückkopplungsknoten ersetzen.


MfG,
Chris

Webseite des Benutzers besuchen Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
06.12.2006, 16:19 (Dieser Beitrag wurde zuletzt bearbeitet: 06.12.2006 16:20 von Kvasir.)
Beitrag #20

Kvasir Offline
LVF-Freak
****


Beiträge: 642
Registriert seit: May 2006

10
2004
DE_EN

0000
Oesterreich
Wie kann man eine While Schleife von außen stoppen?
Doch du kannst natürlich weitere Shiftregister verwenden.

Der Wert bleibt nur erhalten, weil es ja immer genau das gleiche Shiftregister ist, das aufgerufen wird (selbes SubVi wird wiederholt aufgerufen).

Wenn du z.B.: eine Whileschleife mit einem uninitialiserten Shiftregister in einer Case Struktur hast, dann hat dieses Shiftregister, bei jedem neuen Durchlaufen der Case Struktur den letzten Wert. Dies kann zu unerwünschten Wirkungen führen, wenn z.B.: das Shiftregister als Abbruchbedingung für die Schleife gilt. Deswegen sollte man Shiftregister immer initialisieren um soetwas zu vermeiden, außer eben, man verwendet es als funktionale globale Variable.

Schau dir mal das Beispiel an, ich hoffe das erklärt was ich meine.


Angehängte Datei(en)
Sonstige .vi  shift.vi (Größe: 26,25 KB / Downloads: 213)

A few weeks of developement and testing can save a WHOLE afternoon in the library!
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
Antwort schreiben 


Möglicherweise verwandte Themen...
Themen Verfasser Antworten Views Letzter Beitrag
  Schleife stoppen in subVI illy777 31 13.500 14.09.2020 18:00
Letzter Beitrag: illy777
  While Schleife stoppen itz_me 4 5.877 13.04.2017 14:47
Letzter Beitrag: itz_me
  X Bildlaufleiste bei Signalverlaufsdiagram stoppen Carp 18 10.498 10.06.2016 09:57
Letzter Beitrag: Carp
  Frage zu Lauflicht stoppen(vorübergehend) fuego50 4 4.327 23.05.2016 17:05
Letzter Beitrag: fuego50
  Referenziertes VI stoppen marhi 7 5.840 08.03.2016 12:07
Letzter Beitrag: rolfk
  Parallele Schleifen beliebig stoppen/neustarten buettnerstefan 3 4.924 03.06.2015 15:23
Letzter Beitrag: buettnerstefan

Gehe zu: