01.03.2011, 23:09
|
tetef
LVF-Gelegenheitsschreiber
Beiträge: 76
Registriert seit: Jun 2009
2010
2008
de_en
76133
Deutschland
|
RE: Bei 2 parallelen Schleifen Daten übergeben
Hi IchSelbst,
danke fuer Deine Antwort.
Ich mache nur sorgen, dass ein paar Daten verloren gehen.
Werden die Daten, bei der Uebertragung durch Queues, langsam wandern, order nicht??
Gibt es etwas, worauf man achten muss, wenn man mit Queues arbeitet?
gruss
|
|
|
01.03.2011, 23:21
|
IchSelbst
LVF-Guru
Beiträge: 3.695
Registriert seit: Feb 2005
11, 14, 15, 17, 18
-
DE
97437
Deutschland
|
RE: Bei 2 parallelen Schleifen Daten übergeben
(01.03.2011 23:09 )tetef schrieb: Ich mache nur sorgen, dass ein paar Daten verloren gehen.
Prinzipiell können keine Daten verloren gehen.
Zitat:Werden die Daten, bei der Uebertragung durch Queues, langsam wandern, order nicht??
Was meinst du denn mit "langsam wandern"?
Zitat:Gibt es etwas, worauf man achten muss, wenn man mit Queues arbeitet?
Eines ist ganz wichtig: Die Daten müssen aus einer Queue schneller herausgelesen werden können, als sie hinein geschrieben werden. Durch eine entsprechende Datenstruktur und angemessene Algorithmen kann man das immer erreichen.
Jeder, der zur wahren Erkenntnis hindurchdringen will, muss den Berg Schwierigkeit alleine erklimmen (Helen Keller).
|
|
|
02.03.2011, 09:24
|
tetef
LVF-Gelegenheitsschreiber
Beiträge: 76
Registriert seit: Jun 2009
2010
2008
de_en
76133
Deutschland
|
RE: Bei 2 parallelen Schleifen Daten übergeben
Hi,
aus dem Grund, dass einige Schleifen unterschiedliche VIs beinhalten, wird die Bearbeitungseit unterschiedlich sein. D.h. bis eine Schleife die Daten bearbeitet und in die Bus(Queue) zur Verfuegung steht, sieht immer kritisch. Eine Schleifen braucht laenger, die andere kurzer. Bei Queues, wenn die Daten nicht rechtzeitig geholt sind, dann werden sie verloren gehen?
Zitat:Was meinst du denn mit "langsam wandern"?
Das war von mir falsch geschaetzt. Sorry
Gruss
|
|
|
02.03.2011, 11:22
|
IchSelbst
LVF-Guru
Beiträge: 3.695
Registriert seit: Feb 2005
11, 14, 15, 17, 18
-
DE
97437
Deutschland
|
RE: Bei 2 parallelen Schleifen Daten übergeben
(02.03.2011 09:24 )tetef schrieb: wird die Bearbeitungseit unterschiedlich sein. D.h. bis eine Schleife die Daten bearbeitet und in die Bus(Queue) zur Verfuegung steht, sieht immer kritisch. Eine Schleifen braucht laenger, die andere kurzer.
So ist es.
Und da man um diesen Sachverhalt weis, kann man einen entsprechenden Algorithmus programmieren.
Zitat:Bei Queues, wenn die Daten nicht rechtzeitig geholt sind, dann werden sie verloren gehen?
Nein. Daten werden nicht verloren gehen. Dafür sorgt ja der Algorithmus.
Queues kann man nämlich hervorragend dafür einsetzen, um Laufzeitunterschiede in den einzelnen Modulen auszugleichen!
Eine Queue kann nicht nur einen einzigen Datensatz enthalten, sondern theoretisch beliebig viele. Es gibt nur ein einziges Kriterium: Über einen "großen" Zeitraum gesehen, muss das Auslesen schneller gehen als das Hineinschreiben.
Ein Beispiel:
Eine Queue kann 1000 Datensätze beinhalten. Die Erzeuger(Producer)-While-Schleife dauert 10ms. D.h. Daten werden mit 10ms in die Queue geschrieben. Pro Sekunde sind das also 100 Datensätze. Die Verbraucher(Consumer)-While-Schleife dauert 1 Sekunde. Diese Sekunde setzt sich aber aus mehreren Programmteilen zusammen: Queue auslesen, Daten verarbeiten, Daten anzeigen(Graph) oder speichern (Excel etc) oder sonst. Der Großteil der Sekunde, nämlich z.B. 750ms wird für Excel-Speichern verbraucht. Wichtig ist nun folgendes: Innerhalb eines Schleifendurchlaufes der Verbraucher-Schleife muss(!) die komplette Queue, also alle 100 Datensätze, ausgelesen werden. Nach dem Auslesen ist die Queue dann für (maximal) 10ms leer(!). Die 100 Datensätze müssen dann in dem einen Schleifendurchlauf weiterverarbeitet werden.
Oft ist es so:
Die Verarbeitung eines Datensatzes dauert z.B. 1ms. Würde man 100 Datensätze einzeln verarbeiten, würde das dann 100ms dauern. Verwendet man nun aber einen geeigneten Algorithmus, nämlich einen, der mit Arrays arbeiten kann, dauert die Verarbeitung der 100 Datensätze (z.B.) nur noch 50ms. Es ergibt sich also ein Zeitvorteil, wenn man mit Absicht die Queue voll laufen lässt und dann den kompletten Queueinhalt am Stück verarbeitet.
Selbstverständlich kann eine Queue auch Daten verlieren. Das tritt aber nur dann ein, wenn das Gesamtkonstrukt aus Datenstruktur und Programmstruktur schlecht gewählt ist. Man muss am Anfang schon eine Berechnung anstellen, welches Gesamtkonstrukt zielführend sein wird.
Jeder, der zur wahren Erkenntnis hindurchdringen will, muss den Berg Schwierigkeit alleine erklimmen (Helen Keller).
|
|
|
02.03.2011, 11:36
|
tetef
LVF-Gelegenheitsschreiber
Beiträge: 76
Registriert seit: Jun 2009
2010
2008
de_en
76133
Deutschland
|
RE: Bei 2 parallelen Schleifen Daten übergeben
Hi,
ich habe es geloest, indem ich das ganze prozedur geteilt habe.
Fuer jedes Prozess ein Enqueu und Dequeue, damit ich die Zeit richtig verteilen kann.
Man darf nicht ein Obtain Queue ueber zwei Schleifen verteilen, sonst verteilen sich die Daten zwischen beiden Schleifen, was natuerlich ein Datenverlust verusacht.
Danke nochmal.
Ich habe jetzt ein kleines Problem: Kann man ueberhaupt ein Global Variable in einem Event Structure einsetzen?
Gruss
|
|
|
02.03.2011, 13:20
|
NWOmason
Simultator
Beiträge: 1.078
Registriert seit: Dec 2010
2012.SP1
2008
EN
93047
Deutschland
|
RE: Bei 2 parallelen Schleifen Daten übergeben
Achso, du willst ein Event auslösen bei Wertänderung der globalen Variablen. Das geht leider nicht direkt mit den Standartevents der Eventstruktur.
Du kannst allerdings ein Userevent kreieren, welches über eine globale Varibale abgefeuert und reagiert werden kann. Das ganze findet sich mit dazugehörigem Beispiel im NI-Forum:
Re: Can not use Global Variable in Event Structure
http://forums.ni.com/t5/LabVIEW/Can-not-...ue#M515036
Ich habs getestet, funktioniert einwandfrei
Beste Grüße,
NWO
|
|
|
02.03.2011, 15:55
|
tetef
LVF-Gelegenheitsschreiber
Beiträge: 76
Registriert seit: Jun 2009
2010
2008
de_en
76133
Deutschland
|
RE: Bei 2 parallelen Schleifen Daten übergeben
Also,
ich habe das Beispiel runtergeladen leider tut gar nix.
|
|
|
| |