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 

Letztes Element einer Queue ist immer Null



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!

23.10.2008, 10:31
Beitrag #1

tron Offline
LVF-Grünschnabel
*


Beiträge: 46
Registriert seit: Jul 2006

8.21
2006
de

64289
Deutschland
Letztes Element einer Queue ist immer Null
Hallo Experten,

Ich benutze eine Queue um Steuerdaten für eine Heizrampe in mein Hauptprogramm einzufüttern. Ein Sub-VI erstellt diese Queue mit einem Element pro Sekunde und das Haupt-VI liest diese Queue dann im Sekundentakt ein. Das funktioniert auch alles soweit.

Ich benutze zum Auslesen die Funktion "Dequeue Element". Wenn die Warteschlange leer ist, dann soll das Programm mit dem letzten Wert der Queue weiterlaufen. Leider tut es das nicht, ich muß den Timeout des "Dequeue Element" auf >1 setzen, ansonsten hängt das Programm, was ja auch zu erwarten ist, weil es auf den nächsten Wert der Queue wartet. Leider ist im Fall des Timeout dann das letzte Element, das die Queue verläßt, Null.

Genau da brauche ich dann den letzten Wert der Queue. Ich habe es mit einem "Preview Element" versucht, laufe da aber auch wieder in das Problem des Timeout.

Gruß,
Michael
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
Anzeige
23.10.2008, 10:40
Beitrag #2

Achim Offline
*****
*****


Beiträge: 4.222
Registriert seit: Nov 2005

20xx
2000
EN

978xx
Deutschland
Letztes Element einer Queue ist immer Null
Naja du könntest dir immer das gerade entnommene Element in ein Schieberegister schreiben...und mit "Get Queue Status" guckst du, wieviele Elemente noch in der Queue sind...wenn das "Null" sind, nimmst du das zuletzt ins Schieberegister geschobene Element ...wenn nicht, führst du "Dequeue Element" aus und schreibst dieses Element ins Schieberegister!

"Is there some mightier sage, of whom we have yet to learn?"

"Opportunity is missed by most people because it is dressed in overalls and looks like work." (Thomas Edison)
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
23.10.2008, 10:43
Beitrag #3

eg Offline
LVF-SeniorMod


Beiträge: 3.868
Registriert seit: Nov 2005

2016
2003
kA

66111
Deutschland
Letztes Element einer Queue ist immer Null
Du kannst das letzte Element in die Queue nach dem Auslesen wieder reinschreiben, dann brauchst du keinen Timeout.

Webseite des Benutzers besuchen Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
23.10.2008, 13:15
Beitrag #4

tron Offline
LVF-Grünschnabel
*


Beiträge: 46
Registriert seit: Jul 2006

8.21
2006
de

64289
Deutschland
Letztes Element einer Queue ist immer Null
Hi Leute,

danke für die Anregungen, das mit dem Schieberegister muß ich mal probieren.

Gruß,
Michael
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
23.10.2008, 14:28
Beitrag #5

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

Beiträge: 7.699
Registriert seit: Mar 2006

LV 2016-18 prof.
1995
DE

01108
Deutschland
Letztes Element einer Queue ist immer Null
Du mußt den Timeout=0 setzen und den Boolschen Ausgang abfragen, ob Timeout überschritten wurde.
Timeout nicht überschritten: es war zum Zeitpunkt der Abfrage mindestens ein Element in der Queue, alles ist OK.
Timeout überschritten: Es war zum Zeitpunkt der Abfrage kein Element in der Queue. Dann nimmst Du das vorhergehende Element aus dem Schieberegister. so wie vorgeschagen

Der Timeout = 0 muß angeschlossen werden, wenn auf das Kommen neuer Werte kein Verlass ist. Ohne Anschluß ist der Timeout -1 = unendlich und das kann zur Blockade führen.

Der Vorschlag von EG funktioniert so nicht, denn zum Zeitpunkt des Auslesens aus der Queue weißt Du ja noch nicht, ob bei der nächten Abfrage das reguläre nächste Element in der Queue ist oder nicht. Wenn ja, dann war das eingeschriebene Element überflüssig wie ein Kropf umd macht Probleme. Natürlich wäre das mit irgendeiner verqueren Logk alles wieder zurechtzubiegen, aber wozu der Aufwand.
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
23.10.2008, 14:38
Beitrag #6

eg Offline
LVF-SeniorMod


Beiträge: 3.868
Registriert seit: Nov 2005

2016
2003
kA

66111
Deutschland
Letztes Element einer Queue ist immer Null
Sorry, mein Vorschlag bezog sich auf Timeout = -1, warum soll es nicht funktionieren?

Webseite des Benutzers besuchen Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
Anzeige
23.10.2008, 15:20
Beitrag #7

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

Beiträge: 7.699
Registriert seit: Mar 2006

LV 2016-18 prof.
1995
DE

01108
Deutschland
Letztes Element einer Queue ist immer Null
Hier noch das Beispiel zum Beitrag:
   

Sonstige .vi  queue.vi (Größe: 14,26 KB / Downloads: 215)

@Eugen modifiziere doch einfach mal mein Beispiel so, daß es mit timout -1 funktioniert, dann sehen wir weiter.
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
23.10.2008, 15:31
Beitrag #8

eg Offline
LVF-SeniorMod


Beiträge: 3.868
Registriert seit: Nov 2005

2016
2003
kA

66111
Deutschland
Letztes Element einer Queue ist immer Null
Ja, warum geht es eigentlich so nicht?


Angehängte Datei(en) Thumbnail(s)
   

Webseite des Benutzers besuchen Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
23.10.2008, 16:13
Beitrag #9

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

Beiträge: 7.699
Registriert seit: Mar 2006

LV 2016-18 prof.
1995
DE

01108
Deutschland
Letztes Element einer Queue ist immer Null
' schrieb:Ja, warum geht es eigentlich so nicht?
Natürlich geht es so, genau so macht man es normalerweise. Es erfüllt nur nicht die Bedingung der Anfrage, die da lautet:
Zitat:Wenn die Warteschlange leer ist, ...
dann soll nicht auf das nächste eintreffende Element gewartet werden, sondern
Zitat:...dann soll das Programm mit dem letzten Wert der Queue weiterlaufen.

Gruß Ludwig
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
23.10.2008, 16:46 (Dieser Beitrag wurde zuletzt bearbeitet: 23.10.2008 16:47 von eg.)
Beitrag #10

eg Offline
LVF-SeniorMod


Beiträge: 3.868
Registriert seit: Nov 2005

2016
2003
kA

66111
Deutschland
Letztes Element einer Queue ist immer Null
Ok, habe jetzt so gemacht:

wenn mehr als 1 Element in der Queue, dann lesen
ansonsten nur Preview

Also doch ohne Schieberegister, das letzte Element bleibt einfach in der Queue.

Die Timeouts sind trotzdem überall -1Big Grin

Lv80_img
Sonstige .vi  queue_1.vi (Größe: 16,05 KB / Downloads: 230)


Angehängte Datei(en) Thumbnail(s)
   

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
  NULL aus Oracle DB auslesen Spliffy85 0 3.182 12.04.2011 10:40
Letzter Beitrag: Spliffy85

Gehe zu: