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 

Zu SCHNELLES Auslesen einer Queue-Funktion ???



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!

03.03.2011, 00:45
Beitrag #1

Sternhagel Offline
LVF-Grünschnabel
*


Beiträge: 27
Registriert seit: Feb 2011

10
2010
EN


Deutschland
Zu SCHNELLES Auslesen einer Queue-Funktion ???
Hallo,

Ich habe ein Problem mit dem Schreiben von Werten in eine Queue innerhalb einer While-Schleife und dem sehr schnellen Auslesen eben dieser Werte durch eine andere While Schleife. Es kommt dabei zu "Unterbrechungen", bzw. dem scheinbaren einlesen von Nullen (siehe Bilde im Anhang).

Ich lasse in meiner Anwendung zwei While-Schleifen parallel laufen. Eine Auslese-Schleife liest Werte aus einem Gerät aus und die andere Auswerte-Schleife ist für die Auswertung.
Daten der Auslese-Schleife sende ich mit einer Queue-Funktion zur Auswerte-Schleife. Es wird jeweils immer nur eine einzige Zahl pro Schleifendurchlauf übermittelt!

Mein Problem ist nun, dass je nachdem wie schnell ich die Auswerteschleife die Daten der Ausleseschleife abruft, es scheinbar zu "Unterbrechungen" der übertragenen Werte kommt.... es wird also immer mal wieder eine Null eingelesen, obwohl da keine Null ist.

Im Anhang habe ich drei Bilder angehängt welche durch eine Waveform-Chart dargestellt wurden. Angezeigt wird der durch die Queue-Funktion übertragene und von der Auswerte-Schleife abgerufene Wert über der Zeit:

1. Langsamer Auslesevorgang mit 50ms zwischen den Auslesevorgängen -> so sollte das aussehen !!!

2. Schneller Auslesevorgang mit 20ms zwischen den Auslesevorgängen -> man sieht schon ein paar "Einbrüche" bei denen scheinbar eine Null eingelesen wird !!!

3. Sehr schneller Auslesevorgang mit 10ms zwischen den Auslesevorgängen -> Es treten quasi ständig "Einbrüche" auf !!!

Man sieht also deutlich die Einbrüche je schneller ich die Werte aus der Auslese-Schleife abrufe. Die Auslese-Schleife schreibt ca. alle 15ms einen neuen Wert in die Queue-Funktion. Die Anzahl der Werte pro Queue ist auf nur einen Wert begrenzt.

Umgeghen kan nich das Problem durch das setzen eines hohen Time-Outs, allerdings ist das eine eher Suboptimale Option für mich, da wenn kein neuer Wert vorhanden ist, eben der alte Werte eingelesen wird.

Ich denke mal, dass das Problem folgendes ist:
Wenn die Auslese-Schleife im Begriff ist einen neuen Wert in die Queue zu schreiben und in dem selben Moment die Auswerte-Schleife einen Wert abrufen möchte, kommt es zu diesem "Einburch", bzw. dem einlesen einer Null??? !!!

Kann das sein?

Hat jemand eine Idee, wie ich dieses Problem aus der Welt schaffen kann?

viele Grüße
Peter


Angehängte Datei(en) Thumbnail(s)
           
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
03.03.2011, 02:29 (Dieser Beitrag wurde zuletzt bearbeitet: 03.03.2011 08:02 von jg.)
Beitrag #2

Sternhagel Offline
LVF-Grünschnabel
*


Beiträge: 27
Registriert seit: Feb 2011

10
2010
EN


Deutschland
RE: Zu SCHNELLES Auslesen einer Queue-Funktion ???
Ich habe gerade mal ein einfaches Beispielprogramm erstellt, welches das selbe Verhalten zeigt! Einfach runterladen und ausführen!

Man sieht wieder diese "Einbrüche" bei hoher Abrufrate.
Am liebsten wäre es mir, dass wenn noch kein neuer Wert in die Queue geschrieben wurde, einfach der alte Wert ausgegeben wird!

Edit jg: Fehlende LV-Version ergänzt


Angehängte Datei(en)
2010 .vi  Queue.vi (Größe: 15,16 KB / Downloads: 278)
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
03.03.2011, 07:32
Beitrag #3

NWOmason Offline
Simultator
*****


Beiträge: 1.078
Registriert seit: Dec 2010

2012.SP1
2008
EN

93047
Deutschland
RE: Zu SCHNELLES Auslesen einer Queue-Funktion ???
(03.03.2011 00:45 )Sternhagel schrieb:  Ich denke mal, dass das Problem folgendes ist:
Wenn die Auslese-Schleife im Begriff ist einen neuen Wert in die Queue zu schreiben und in dem selben Moment die Auswerte-Schleife einen Wert abrufen möchte, kommt es zu diesem "Einburch", bzw. dem einlesen einer Null??? !!!

Kann das sein?

Die Ausleseschleife liest alle 50ms eine Wert aus der Queue, egal ob einer drin ist, oder nicht, da der Timeouteingang der Queue mit 0 belegt ist, also nicht auf die Queue gewartet wird, bis ein neuer Wert ansteht.


(03.03.2011 00:45 )Sternhagel schrieb:  Hat jemand eine Idee, wie ich dieses Problem aus der Welt schaffen kann?

Ja, Timing aus der Ausleseschleife raus Smile


Beste Grüße,
NWO


Angehängte Datei(en) Thumbnail(s)
   

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!

(20.01.2012 11:02 )NWOmason schrieb:  Getting Started with NI LabVIEW Student Training
http://zone.ni.com/devzone/cda/tut/p/id/7466

Introduction to NI LabVIEW - Learn LabVIEW Basics
http://www.ni.com/gettingstarted/labviewbasics/

Top 5 der Empfehlungen für LabVIEW-Einsteiger
http://www.ni.com/newsletter/51735/de/
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
03.03.2011, 08:01
Beitrag #4

jg Offline
CLA & CLED
LVF-Team

Beiträge: 15.864
Registriert seit: Jun 2005

20xx / 8.x
1999
EN

Franken...
Deutschland
RE: Zu SCHNELLES Auslesen einer Queue-Funktion ???
Alternative: Dequeue hat einen Ausgang "timed out?". Diesen einfach auswerten und entsprechend reagieren:
   
Denn wenn "timed out?" = TRUE, dann ist gerade kein Element in der Queue, dann darf man auch keine Ausgabe weiterverarbeiten.

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
03.03.2011, 15:56
Beitrag #5

Sternhagel Offline
LVF-Grünschnabel
*


Beiträge: 27
Registriert seit: Feb 2011

10
2010
EN


Deutschland
RE: Zu SCHNELLES Auslesen einer Queue-Funktion ???
Dann wird das Element in der Queue also nach dem Auslesevorgang immer gelöscht, wenn ich euch richtig verstehe?

Nach der LabView Hilfe sollte es aber nicht so sein. Im Context-Menue bei der "Enqueue-Funktion" steht:
"Removes an element from the front of a queue and RETURNS the element."

Das "Returns the element" verstehe ich eigentlich so, dass es nach dem Auslesevorgang noch in der Queue sein sollte oder nicht???
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
03.03.2011, 16:18 (Dieser Beitrag wurde zuletzt bearbeitet: 03.03.2011 16:22 von GerdW.)
Beitrag #6

GerdW Offline
______________
LVF-Team

Beiträge: 17.469
Registriert seit: May 2009

LV2021
1995
DE_EN

10×××
Deutschland
RE: Zu SCHNELLES Auslesen einer Queue-Funktion ???
Hallo Sternhagel,

hier mal der Auszug aus der dt. Hilfe:
   

Mit dem Übersetzen hast du es nicht so? Smile "returns the element" TO YOU, but not to the queue...

Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
Anzeige
03.03.2011, 16:18
Beitrag #7

Sternhagel Offline
LVF-Grünschnabel
*


Beiträge: 27
Registriert seit: Feb 2011

10
2010
EN


Deutschland
RE: Zu SCHNELLES Auslesen einer Queue-Funktion ???
Ich habe das Problem nun folgendermaßen gelöst:

So kann ich nun sicher gehen, dass wenn kein neuer Wert in der Schleife ist, einfach der letzte vorhandene Wert genommen wird und nicht stattdessen eine Null eingelesen wird.

Sie Bilder im Anhang!


Angehängte Datei(en) Thumbnail(s)
       
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
03.03.2011, 16:29 (Dieser Beitrag wurde zuletzt bearbeitet: 03.03.2011 16:34 von toaran_.)
Beitrag #8

toaran_ Offline
LVF-Gelegenheitsschreiber
**


Beiträge: 237
Registriert seit: Feb 2007

2012
2006
EN

90763
Deutschland
RE: Zu SCHNELLES Auslesen einer Queue-Funktion ???
Hi

Warum lässt du nicht einfach 0 am timout eingang des DeQueue weg ... dann werden im diagramm auch nur die Werte angezeigt die du in den Q reinschreibst ... wenn nicht drinn steht wartet die schleife bis wieder was zum auslesen da ist ...


hier mal dein Beispiel entsprechend...

2010 .vi  Queue_.vi (Größe: 14,17 KB / Downloads: 262)

T
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
03.03.2011, 16:40
Beitrag #9

NWOmason Offline
Simultator
*****


Beiträge: 1.078
Registriert seit: Dec 2010

2012.SP1
2008
EN

93047
Deutschland
RE: Zu SCHNELLES Auslesen einer Queue-Funktion ???
(03.03.2011 16:29 )toaran_ schrieb:  Warum lässt du nicht einfach 0 am timout eingang des DeQueue weg ... dann werden im diagramm auch nur die Werte angezeigt die du in den Q reinschreibst ... wenn nicht drinn steht wartet die schleife bis wieder was zum auslesen da ist ...

Ich denke auch, dass dies die bessere Variante ist (wie ich oben bereits gezeigt habe). Denn bei deiner Lösung

(03.03.2011 16:18 )Sternhagel schrieb:  So kann ich nun sicher gehen, dass wenn kein neuer Wert in der Schleife ist, einfach der letzte vorhandene Wert genommen wird und nicht stattdessen eine Null eingelesen wird.

wird ja immer ein Wert mehrmals hergenommen, wenn du schneller liest. Ist das wirklich so gedacht?


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!

(20.01.2012 11:02 )NWOmason schrieb:  Getting Started with NI LabVIEW Student Training
http://zone.ni.com/devzone/cda/tut/p/id/7466

Introduction to NI LabVIEW - Learn LabVIEW Basics
http://www.ni.com/gettingstarted/labviewbasics/

Top 5 der Empfehlungen für LabVIEW-Einsteiger
http://www.ni.com/newsletter/51735/de/
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
03.03.2011, 17:06
Beitrag #10

Sternhagel Offline
LVF-Grünschnabel
*


Beiträge: 27
Registriert seit: Feb 2011

10
2010
EN


Deutschland
RE: Zu SCHNELLES Auslesen einer Queue-Funktion ???
(03.03.2011 16:18 )GerdW schrieb:  Mit dem Übersetzen hast du es nicht so? Smile "returns the element" TO YOU, but not to the queue...

Naja... dann ist halt die englische Hilfe etwas mißverständlich geschrieben :-) "returns the element" würde ich nie mit "das Element ausgeben" übersetzen sondern mit "das Element zurück geben" vor allem wenn im Satzteil davor explizit von "remove the element" gesprochen wird ... aber kann natürlich sein, dass "RETURN" für den Computerexperten tatsächlich "ausgeben" bedeutet... dafür bin ich nicht genug Fachmann :-)
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
Music FGEN Erzeugung eines Signalverlaufs anhand einer Mathematischen Funktion DavidStefan 11 7.452 29.05.2021 07:03
Letzter Beitrag: GerdW
  Daten einer SPS S7-1200 mit SP7 Toolkit auslesen Daniel9395 17 12.462 05.08.2020 09:26
Letzter Beitrag: Daniel9395
  Wie auf abgearbeitete Queue warten mez15 11 8.086 28.09.2017 13:02
Letzter Beitrag: TR61
  Datum Uhrzeit Queue DeleteAll 8 5.682 24.03.2017 15:47
Letzter Beitrag: GerdW
  TDMS in Queue laden gifo 8 5.466 07.01.2016 16:41
Letzter Beitrag: GerdW
  Fehlercluster via Queue hansi9990 23 14.324 07.08.2015 14:11
Letzter Beitrag: hansi9990

Gehe zu: