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 

Mehrere while Schleifen über globale Variable beenden



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!

25.01.2009, 20:17 (Dieser Beitrag wurde zuletzt bearbeitet: 25.06.2012 12:41 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
Mehrere while Schleifen über globale Variable beenden
' schrieb:ich hab mal ein analoges beispiel programmiert und beigefügt, gestartet wird es über die Hauptwhileschleife. außerdem wäre es schön, wenn es eine möglichkeit gäbe dass sie gleichzeitig loslaufen. wäre tolle wenn mir jemand weiterhelfen könnte..

Habe den Thread hier gelesen, der so gelaufen ist: Du hast eine kompliziert aussehende Antwort erhalten, da hat Dich der Mut verlassen, so daß sich Deine weitern Fragen dann nur noch darauf richten, wie man LabVIEW lernt.

Deine Frage bezieht sich nicht nur auf das Stoppen, sondern auch auf die Synchronisierung der 3 Programme, und hierzu möchte ich etwas sagen.
Wenn man die in den Sub-Vi erzeugten Daten nicht mit globalen Veriablen, sondern mit Meldern zum Haupt-VI überträgt, dann synchronisieren sich die beiden Vis von selbst. Der Meldeempfänger (Im Haup-VI) wartet bei jedem Schleifendurchlauf, bis neue Daten vorliegen. Man braucht dort keine Waits.
Allerdings ist es dann immer so, daß der Datenerzeuger den Datenempfänger synchronisiert, also in Deinem Fall die Sub-Vis das Haup-VI bzw. die entsprechenden while-Schleifen im Haup-VI.
In umgekehrter Richtung, oder wenn wie in Deinem Fall alle freilaufenden SUB-VIs mit dem Haupt-VI synchronisiert werden solle, wirds schwieriger. (Stichwort: Rendezvous). Das möchte ich Dir erst mal ersparen.
Gewissermassen als Abfallprodukt eines solchen Erzeuger-Verbraucher-Konstruktion, also ohne jeden zusätzlichen Programmaufwand, funktioniert der Stopp aller VIs: Beim Stop im Haup-Vi zerstört man einfach den Melder. Das wird in den anderen VIs bemerkt, es kommt zu Fehlermeldung, die man dort an die Stoppknöpfe in den while-Schleifen anschließt.
Tipp: Hier im Forum suchen nach Erzeuger-Verbraucher-Struktur, es gibt da einfache Beispiele.
Hier Deine VIs ein bisschen geändert:


Angehängte Datei(en)
8.2 .vi  _Haupt_whileSchleife1.vi (Größe: 13,88 KB / Downloads: 195)

8.2 .vi  whileSchleife2.vi (Größe: 6,6 KB / Downloads: 156)

8.2 .vi  whileSchleife3.vi (Größe: 6,62 KB / Downloads: 154)
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
Anzeige
26.01.2009, 13:41
Beitrag #12

insertcoin Offline
LVF-Grünschnabel
*


Beiträge: 44
Registriert seit: Aug 2008

8.5.1
-
de

89
Deutschland
Mehrere while Schleifen über globale Variable beenden
ja stimmt schon, hatte vor dass jetzt zu lernen und dann entsprechend zu verwenden. will auch nichts übernehmen dass ich eh nicht kapier.
danke für die ausführliche beschreibung, komm erst morgen wieder an mein programm, werd das dann ausprobieren und wieder meldung machen.
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
26.01.2009, 20:08 (Dieser Beitrag wurde zuletzt bearbeitet: 25.06.2012 16:10 von Lucki.)
Beitrag #13

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

Beiträge: 7.699
Registriert seit: Mar 2006

LV 2016-18 prof.
1995
DE

01108
Deutschland
Mehrere while Schleifen über globale Variable beenden
' schrieb:ja stimmt schon, hatte vor dass jetzt zu lernen und dann entsprechend zu verwenden. will auch nichts übernehmen dass ich eh nicht kapier.
danke für die ausführliche beschreibung, komm erst morgen wieder an mein programm, werd das dann ausprobieren und wieder meldung machen.

Mir ist da noch eine einfache Methode zu Synchronisation eingefallen, so wie Du es haben wolltest.
Edit: Version geändert


Angehängte Datei(en)
8.2 .vi  whileSchleife2.vi (Größe: 6,62 KB / Downloads: 184)

8.2 .vi  whileSchleife3.vi (Größe: 6,63 KB / Downloads: 159)

8.2 .vi  _Haupt_whileSchleife1.vi (Größe: 12,51 KB / Downloads: 217)
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
27.01.2009, 11:33
Beitrag #14

insertcoin Offline
LVF-Grünschnabel
*


Beiträge: 44
Registriert seit: Aug 2008

8.5.1
-
de

89
Deutschland
Mehrere while Schleifen über globale Variable beenden
Ok, die Beispiele sind super, damit wäre mein Problem abgedeckt.
Ein paar Sachen sind mir aber noch nicht klar:

- Was bewirkt der ReInit des Stop Button der in Bsp.1 direkt als Knotenpunkt auf die while Schleife geführt ist?

- Die wait Anweisung in Bsp.2 am ersten Sequenzrahmen ist für den gemeinsamen Beginn oder??
Und der Sequenzrahmen in der while Schleife für das gleichzeitige Auslesen?

Fürs Verständnis, wenn ich wie in Bsp.2, mehrere Warteblöcke in einer while schleife eingebaut habe,
bestimmt der mit der längsten Wartezeit die Durchlaufzeit??
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
27.01.2009, 11:59
Beitrag #15

jg Offline
CLA & CLED
LVF-Team

Beiträge: 15.864
Registriert seit: Jun 2005

20xx / 8.x
1999
EN

Franken...
Deutschland
Mehrere while Schleifen über globale Variable beenden
' schrieb:Ok, die Beispiele sind super, damit wäre mein Problem abgedeckt.
Ein paar Sachen sind mir aber noch nicht klar:

- Was bewirkt der ReInit des Stop Button der in Bsp.1 direkt als Knotenpunkt auf die while Schleife geführt ist?
Da der Stop-Button als "Switch when pressed" und nicht als "Latch" definiert ist, setzt dieser Methodenknoten den Button vor Neustart des VIs wieder auf seinen Defaultzustand (in diesem Fall FALSE) zurück.
' schrieb:- Die wait Anweisung in Bsp.2 am ersten Sequenzrahmen ist für den gemeinsamen Beginn oder??
Eigentlich nicht direkt, ist aus meiner Sicht nur eine kosmetische Wartezeit... Hundertprozentig gleichzeitig werden die SubVIs nicht starten.
' schrieb:Und der Sequenzrahmen in der while Schleife für das gleichzeitige Auslesen?
Ja und Nein. Sorgt dafür, dass diese Schleife solange wartet, bis von jedem Notifier eine Meldung vorliegt, auch beim ersten Durchlauf. Schau dir einfach mal den Unterschied an ohne Sequenz.
' schrieb:Fürs Verständnis, wenn ich wie in Bsp.2, mehrere Warteblöcke in einer while schleife eingebaut habe,
bestimmt der mit der längsten Wartezeit die Durchlaufzeit??
Ja.

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!

Einführende Links zu LabVIEW, s. GerdWs Signatur.
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
27.01.2009, 14:10
Beitrag #16

insertcoin Offline
LVF-Grünschnabel
*


Beiträge: 44
Registriert seit: Aug 2008

8.5.1
-
de

89
Deutschland
Mehrere while Schleifen über globale Variable beenden
sehr cool, hab mein programm nun wie oben beschrieben umgesetzt und jetzt läuft alles sauber wie ich es wollte. vielen dank, ihr habt mir echt weitergeholfen. vorallem ist mein verständnis für LabVIEW jetzt wieder um einiges besser!!
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
Anzeige
27.01.2009, 17:34
Beitrag #17

insertcoin Offline
LVF-Grünschnabel
*


Beiträge: 44
Registriert seit: Aug 2008

8.5.1
-
de

89
Deutschland
Mehrere while Schleifen über globale Variable beenden
sehr seltsam, ich hab heute mittag schon eine antwort geschrieben, und die ist jetzt plötzlich verschwunden.

auf jeden fall hab ich mein programm wie oben besprochen, abgeändert. jetzt läuft alles genau wie ich es wollte.
nachmal danke an alle für die hilfe !!
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
27.01.2009, 17:45
Beitrag #18

jg Offline
CLA & CLED
LVF-Team

Beiträge: 15.864
Registriert seit: Jun 2005

20xx / 8.x
1999
EN

Franken...
Deutschland
Mehrere while Schleifen über globale Variable beenden
' schrieb:sehr seltsam, ich hab heute mittag schon eine antwort geschrieben, und die ist jetzt plötzlich verschwunden.

auf jeden fall hab ich mein programm wie oben besprochen, abgeändert. jetzt läuft alles genau wie ich es wollte.
nachmal danke an alle für die hilfe !!
Ist doch noch da..., vielleicht hättest du mal auf Seite 2 des Threads klicken sollen?

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!

Einführende Links zu LabVIEW, s. GerdWs Signatur.
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
27.01.2009, 18:56
Beitrag #19

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

Beiträge: 7.699
Registriert seit: Mar 2006

LV 2016-18 prof.
1995
DE

01108
Deutschland
Mehrere while Schleifen über globale Variable beenden
' schrieb:Eigentlich nicht direkt, ist aus meiner Sicht nur eine kosmetische Wartezeit... Hundertprozentig gleichzeitig werden die SubVIs nicht starten.
Gruß, Jens

Danke, Jens, daß Du schon geantwortet hast, war heute nicht am PC. Hier meine Erklärung, warum ich das so komisch gemacht habe.

Zuerst die einleitenden Beispile A,B,C , damits jeder versteht.
   
Im Beispiel A die normale Wartefunktion. Eigenschaften: Es wird ca. 1000 ms gewartet. Nachteil: zwei Freilaufendes VIs mit der gleichen Waretezeit laufen weder in Phase, noch laufen sie über längere Zeit synchron.
Im Beipiel B Warten mit Metronom. Der Tick kommt hier in jeder vollen Sekunde entsprechend der PC-Uhrzeit.
Eigenschaften: 2 Vis mit der gleichen Wartezeit laufen sowohl synchron als auch in Phase, d.h. die Ticks kommen in beiden VIs immer gleichzeitig. Nachteil: Da die Vis bzw. die Schleifen darin zufälltig in bezug auf die Uhrzeit gestartet werden, beträgt die Wartezeit bis zur vollen Sekunde beim ersten Schleifendurchlauf nicht 1000ms, sondern es ist irgendeine Zufallszeit zwischen 1 und 999ms.
Beispiel C: Dem kann man abhelfen, indem man die Schleife erst bei einem Tick, d.h bei der vollen Sekunde startet.

Und jetzt kommt die eigentliche Erklärung:
Wenn ich zwei freilaufende Sub-Vis im Haup-VI gleichzeitig starte, dann werden sie in Wirklichkeit kurz hintereinader gestartet, sagen wir mal im Abstand von 2ms. Wenn der Zufall es will, wird das eine in der 998sten ms aufgerufen, das zweite in der 1000sten ms. Das erste erhält dann in der 1000sten ms schon einen Tick, während das zweite noch geladen wird. Die beiden VIs laufen dann zwar trotzdem immer synchron, aber das erste ist immer einen vollen Tick voraus.
Um dieses Risiko auszuschalten, habe ich den Aufruf der beiden Sub-Vis so gemacht:
   
Die Sub-Vis werden umittelbar nach einen Sekundentick gestartet. Es ist dann eine volle Sekunde Zeit bis zum nächsten Tick, und der obige Effekt kann dann nach menschlichen Ermessen nicht mehr auftreten.

Das habe ich mir nur so ausgedacht, keine Ahnung, ob das eine Lösung ist, die einer Kritik von Profis standhält.
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
27.01.2009, 20:27
Beitrag #20

cb Offline
LVF-SeniorMod


Beiträge: 1.731
Registriert seit: Feb 2006

2018SP1
2001
EN

40xxx
Deutschland
Mehrere while Schleifen über globale Variable beenden
' schrieb:Das habe ich mir nur so ausgedacht, keine Ahnung, ob das eine Lösung ist, die einer Kritik von Profis standhält.

ich dachte du bist selbst profi?Big Grin
und ich find das sehr gut erklärt ....

http://www.rotabench.com - rotierende Prüfstände nach dem Baukasten-Prinzip
Webseite des Benutzers besuchen 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
  Datenaustausch über Cluster in zwei While-Schleifen creo_123 5 4.522 04.03.2022 09:36
Letzter Beitrag: Kiesch
  Globale Variablen Edi70 7 4.486 08.10.2021 17:01
Letzter Beitrag: GerdW
  2 Parallele While-Schleifen mit unterschiedlichen Timer beenden Tomate27 3 2.948 18.08.2020 13:29
Letzter Beitrag: GerdW
  Boolean als globale Variable ares2013 12 11.362 06.09.2019 13:57
Letzter Beitrag: GerdW
  Mehrere Befehle über System Exec VI creo_123 9 6.957 04.05.2017 06:03
Letzter Beitrag: creo_123
  Mehrere Messreihen aufnehmen über For-Schleife Gesetzt 3 4.197 18.04.2017 15:21
Letzter Beitrag: GerdW

Gehe zu: