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 

was macht die zweite while-Schleife?



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!

30.01.2013, 11:21
Beitrag #1

Hasenfuss Offline
LVF-Stammgast
***


Beiträge: 331
Registriert seit: Dec 2012

2012
2012
DE



was macht die zweite while-Schleife?
Guten Morgen!

Ich möchte in zwei parallelen Schleifen Daten erfassen (1) und Daten abspeichern (2). In (1) werden z.B. alle 1000ms Daten erfasst und in eine Queue gegeben (nicht ganz so auf diese Art, (1) soll nur ein Beispiel für das Einfügen in die Queue sein).

Meine Frage nun - was macht die Schleife Daten schreiben (2)? Pollt die Schleife, solange bis ein Element in der Queue ist bzw. wartet sie, bis ein Element an der Funktion Element aus Warteschlange holen ankommt (time-out dieser Funktion will ich nicht berücksichtigen)?

Oder gibt es "bessere" Lösungen als diese?


Angehängte Datei(en) Thumbnail(s)
   
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
30.01.2013, 11:24 (Dieser Beitrag wurde zuletzt bearbeitet: 30.01.2013 11:26 von Trinitatis.)
Beitrag #2

Trinitatis Offline
LVF-Guru
*****


Beiträge: 1.694
Registriert seit: May 2008

7.1 / 8.0 /2014-1, 18
2002
DE

18055
Deutschland
RE: was macht die zweite while-Schleife?
Hallo Hasenfuß,

deine Queue-Ausleseschleife wartet solange, bis ein Element in der Queue steht, oder ihr Tineout abgelaufen ist. Den würde ich in den meisten Fällen setzen, da sich dein VI sonst aufhängen könnte.


Gruß, Marko

Edit:
nur zur Präzision: Die Queue-Lesefunktion pollt nicht in dem Sinne, wie das eine Schleife täte - belastet also nicht den Prozessor!
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
30.01.2013, 11:28
Beitrag #3

SchwippSchwapp
Unregistered


 







RE: was macht die zweite while-Schleife?
schau mal hier:

http://grundpraktikum.physik.uni-saarlan...aenger.pdf
Diese Nachricht in einer Antwort zitieren to top
30.01.2013, 11:38 (Dieser Beitrag wurde zuletzt bearbeitet: 30.01.2013 11:39 von Hasenfuss.)
Beitrag #4

Hasenfuss Offline
LVF-Stammgast
***


Beiträge: 331
Registriert seit: Dec 2012

2012
2012
DE



RE: was macht die zweite while-Schleife?
Hallo Marko,

vielen Dank für Deine Antwort.

Du schreibst:
"... deine Queue-Ausleseschleife wartet solange, bis ein Element in der Queue steht, oder ihr Tineout abgelaufen ist. Den würde ich in den meisten Fällen setzen, da sich dein VI sonst aufhängen könnte. ..."

Meine eigentlich Umsetzung sieht bisher so aus, dass ich eine while-Schleife habe, die alle 5 sec. ausgelöst wird, dann ein Case der checkt, ob Elemente in der Warteschlange sind und dann alle Elemente in einer weiteren while-Schleife in die Datei schreibt. Dann hab ich in der Funktion Element aus Queue holen ein timeout-Wert gesetzt und die andere Seite mit dem Stopp-Button verbunden.

Das Problem war erstmal nur, dass ich mir nicht sicher war, was die while-Schleife in meinem ersten Fall macht, darum hatte ich ein etwas abstrahiertes Bild zugesendet, um meine Frage etwas besser zu verdeutlichen.    
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
30.01.2013, 12:00 (Dieser Beitrag wurde zuletzt bearbeitet: 30.01.2013 12:02 von Trinitatis.)
Beitrag #5

Trinitatis Offline
LVF-Guru
*****


Beiträge: 1.694
Registriert seit: May 2008

7.1 / 8.0 /2014-1, 18
2002
DE

18055
Deutschland
RE: was macht die zweite while-Schleife?
Ich würde schonmal das ständige Öffnen/schließen der Datei lassen. Datei einmal öffnen und dann in die Queue-Lesefunktion gehen. So kannst du dir auch deinen festen Wait von 5s sparen - die Queue-Lesefunktion wartet sowieso. Dann prüftst du den Ausgang, ob der TO angeschlagen hat und schreibst in die Datei, wenn nicht. Ansonsten machste nix.

Die beiden Schleifen synchronisieren sich dann von ganz allein.



Gruß, Marko


Edit:
Wenn du dann mit allem fertig bist - Datei wieder schließen!
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
30.01.2013, 13:33
Beitrag #6

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

Beiträge: 7.699
Registriert seit: Mar 2006

LV 2016-18 prof.
1995
DE

01108
Deutschland
RE: was macht die zweite while-Schleife?
(30.01.2013 12:00 )Trinitatis schrieb:  Ich würde schonmal das ständige Öffnen/schließen der Datei lassen.
...
Wenn du dann mit allem fertig bist - Datei wieder schließen!

Mich nerven zwar auch manchmal die elementaren Fragen von hasenfuß, aber diesmal hat er doch Vieles richtig gemacht. Das VI ist ja alles andere als funktionsfähig. Es sind auch die Stops in den Schleifen nicht angeschlossen, und in die Queue werden keine Daten eingegeben. Zur Illustration seiner Frage ist das jedoch ausreichend. Man kann ihm also unterstellen, dass er das mit dem Öffnen und Schließen der Dateien im "Ernstfall" richtig gemacht hätte.

Man sieht hier immer wieder bei Anfängern, dass in die Schleife zum Auslesen der Queue ein Wait reingemacht wird. Auch das wurde hier richtig gemacht. Im umgekehrten Fall würde sich die Queue (wenn die Datenrate nicht beschränkt ist) blitzartig füllen, es würden nicht aktuelle Daten aus der Vergangenhat ausgelesen. Oder noch besser: Wenn keine Queue-Länge angegeben ist (default), dann füllt sich die Queue, bis das Programm abstürzt.
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
Anzeige
30.01.2013, 15:02
Beitrag #7

Trinitatis Offline
LVF-Guru
*****


Beiträge: 1.694
Registriert seit: May 2008

7.1 / 8.0 /2014-1, 18
2002
DE

18055
Deutschland
RE: was macht die zweite while-Schleife?
Hallo Lucki,

Hasenfuss prüft in seiner Schleife mit der Case-Anweisung "1.." , ob in der Queue Daten vorhanden sind mit einer Wartezeit von 5s. Wenn welche da sind, dann springt er in den Verarbeitungszweig. In dieser Form ist ein Wait natürlich zwingend, da die Queue-Abfrage in den Fällen wo nix drinnen steht entsprechend schnell pollen würde.

Ich hatte aber vorgeschlagen, gleich in die Queue-Lesefunktion zu gehen, die ja auch das Flag TO überschritten angibt und somit auch ausgibt, ob die Queue Daten enthält, diese dann aber auch gleich ausgibt, do dass er sie weiterverarbeiten (speichern) könnte. In diesem (neuen) von mir skizzierten Fall könnte er sich dann die 5s Wartezeit sparen.


D.h. Hasenfuß könnte doch die Funktion Queue-Status lesen durch die Funktion Queue-Element auslesen ersetzen und seine Case-Struktur vom Flag TO überschritten abhängig machen. Dann könnte er in dem Case seine Datenspeicherung machen und sollte dort dann auch nicht die Datei jedesmal öffnen/schließen.

Oder habe ich komplett falsch verstanden, was er da vorhat?!Blink

Gruß, marko
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
30.01.2013, 19:50
Beitrag #8

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

Beiträge: 7.699
Registriert seit: Mar 2006

LV 2016-18 prof.
1995
DE

01108
Deutschland
RE: was macht die zweite while-Schleife?
@trinitatis
Vergiß alles, was ich gesagt habe. Ich hatte nur den ersten Beitrag von Hasenfuß gesehen und hatte mich ausschließlich darauf bezogen. Da Du Dich auf den aktuellen zweiten Beitrag bezogest, mussten wir aneinander vorbeireden.
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
01.02.2013, 09:52
Beitrag #9

Hasenfuss Offline
LVF-Stammgast
***


Beiträge: 331
Registriert seit: Dec 2012

2012
2012
DE



RE: was macht die zweite while-Schleife?
Guten Morgen!

Ich habe eine Frage zu der Funktion "Element aus Queue holen", die ich leider nicht aus der Hilfe beantworten konnte.

Die Funktion liefert ein timeout = true, wenn die Wartezeit überschritten wurde. Die Zeit kann ich einstellen, wird nichts definiert, hat die Wartezeit den Wert -1. Was passiert beim timeout-Wert von -1? Funktioniert der timeout von "Element aus Queue holen" dann wie eine Anzeige, die sofort reagiert?

Marko schrieb:
" ... Ich hatte aber vorgeschlagen, gleich in die Queue-Lesefunktion zu gehen, die ja auch das Flag TO überschritten angibt und somit auch ausgibt, ob die Queue Daten enthält, diese dann aber auch gleich ausgibt, do dass er sie weiterverarbeiten (speichern) könnte. In diesem (neuen) von mir skizzierten Fall könnte er sich dann die 5s Wartezeit sparen. ..."

Ich habe das jetzt so versucht umzusetzen wie in dem Bild hier - bin in einer while-Schleife. Wenn timeout = false, dann wird derl false-case aktiviert und das Element rausgelesen. Wenn aber ein timeout ausgelöst wird - hier in diesem Fall einfach mal nach 500ms, dann passiert erstmal nichts weiter, nur der true-case wird ausgeführt, danach ist die while-Schleife aber wieder aktiv - ich interpretiere dass jetzt so, dass das timeout mit 500ms verknüpft mit dem case der Warten-Funktion entspricht.

Aber ich bin mir immer noch unschlüssig, was passiert, wenn der timeout-Anschluss immer noch false liefert, aber noch kein Element da ist und es z.B. noch 400ms bis zum umsetzen auf true Zeit braucht? Dann würde in dieser Zeit ja der false-case ausgelöst werden, obwohl auch noch kein Element da ist.


Angehängte Datei(en) Thumbnail(s)
   
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
01.02.2013, 10:17 (Dieser Beitrag wurde zuletzt bearbeitet: 01.02.2013 10:19 von GerdW.)
Beitrag #10

GerdW Offline
______________
LVF-Team

Beiträge: 17.469
Registriert seit: May 2009

LV2021
1995
DE_EN

10×××
Deutschland
RE: was macht die zweite while-Schleife?
Hallo Hasenfuss,

die Hilfe zur Funktion schreibt:
Zitat:Timeout in ms gibt an, wie lange die Funktion bei leerer Queue darauf warten soll, dass ein Element in der Queue verfügbar wird. Die Voreinstellung lautet –1 (kein Zeitlimit).

Wenn die Funktion für die Dauer von Timeout in ms gewartet hat und die Queue immer noch leer ist, wird Timeout? TRUE.
Wie lange wartet die Funktion also bei einem TimeOut von "-1"?

Zitat:wenn der timeout-Anschluss immer noch false liefert, aber noch kein Element da ist
???
Entweder "TimeOut=TRUE, weil kein Element da" oder "TimeOut=False, weil Element da"...

Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
30
Antwort schreiben 


Möglicherweise verwandte Themen...
Themen Verfasser Antworten Views Letzter Beitrag
  Was macht das Express VI Messung von Frequenzkomponenten bachatero18 9 4.905 17.09.2020 07:56
Letzter Beitrag: Martin.Henz
  Timer macht was er will :-) Natalie1984 6 4.037 04.07.2019 12:49
Letzter Beitrag: IchSelbst
  Funktion Diagramm aufräumen macht komische Sachen Hasenfuss 5 5.944 01.02.2013 12:19
Letzter Beitrag: Kiesch
  State Machine macht mit selben Funktionen jedesmal etwas anderes anuller 6 6.580 10.04.2012 12:42
Letzter Beitrag: Lucki
  Inverser Tangens 2 Eingänge macht nicht das was ich mir denke Neil 5 5.417 07.04.2012 07:06
Letzter Beitrag: Lucki
  VI macht auf anderer Maschine "Blödsinn" gottfried 0 2.960 17.03.2012 10:01
Letzter Beitrag: gottfried

Gehe zu: