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!
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?
(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).
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?
(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).
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?
(02.03.2011 11:36 )tetef schrieb: Ich habe jetzt ein kleines Problem: Kann man ueberhaupt ein Global Variable in einem Event Structure einsetzen?
Kurze Antwort: Ja.
Lange Antwort: Natürlich. Sobald das Event ausgeführt wird die GV gelesen oder geschreiben. Das geht an jeder Stelle des VIs, also logischerweiße auch in einer Event Strukur
Beste Grüße,
NWO
9 von 10 Stimmen in meinem Kopf sagen: Ich bin nicht verrückt,
die andere summt die Melodie von Tetris.
NI schrieb:To use the abort button is like using a tree to stop a car!
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: