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 

LIFO wie realisieren?



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!

07.09.2006, 09:33
Beitrag #1

DoubleU Offline
LVF-Gelegenheitsschreiber
**


Beiträge: 51
Registriert seit: Jan 2006

8.01
2004
kA


Deutschland
LIFO wie realisieren?
Hallo,

ich möchte einen LIFO in LabVIEW realsieren, bei dem ich immer Werte anfügen kann - jedoch nur eine definierte Anzahl darin enthalten bleibt. Wird lesend auf den Fifo zugegriffen sollen z.b. die letzten Werte der reihe nach (last in first out) abgegirffen werden.

Es gibt ein Beispiel in LabVIEW (Suche:Fifo) mit Message Queues, der Ansatz gefällt mir ganz gut. Das Problem dabei ist jedoch: Ist die Message Queue voll, kann kein Weiteres Element angefügt werden, bei mir soll jedoch einfach das älteste überschrieben werden.

Ich weiss das das ganze mit Shiftregister sehr leicht funktioniert, jedoch ist die Performance dabei nicht ideal, da immer meine ganzen Daten wieder "durchgeschoben" werden, obwohl ich nur auf ein Array Element zugreifen will. Ich bräuchte mehr LIFOS die ich zur Laufzeit dynamisch erzeugen kann. Bei Message queues wäre das ja in einer for-Schleife möglich...

Gruss
Uli
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
07.09.2006, 11:27
Beitrag #2

Kvasir Offline
LVF-Freak
****


Beiträge: 642
Registriert seit: May 2006

10
2004
DE_EN

0000
Oesterreich
LIFO wie realisieren?
Was du machen könntest wäre, den Case abfangen, dass die Queue voll ist und dann das älteste Element aus der Queue löschen um für das neue Platz zu machen.

Die volle Queue abzufangen geht ganz einfach. Einfach einen Timeout beim schreiben setzen. Wenn dieser überschritten wird, dann weil die Queue voll ist.
Schwieriger ist es das älteste Element aus der Queue zu löschen. Dazu hab ich keine Funktion gefunden. Habe dir also ein kleines SubVi geschrieben, was genau das erledigt.
Ob das Performance mäßig dann besser ist als eine Schieberegister weiß ich nicht. Allerdings startet dieses SubVi ja nur, wenn die Queue voll ist.

Hab dir auch ein kleines Beispiel angehängt, wie du das SubVi in etwa verwenden könntest. Ist allerdings nicht sonderlich schön.

Gruß


Angehängte Datei(en)
Sonstige .vi  queue_removelast.vi (Größe: 16,97 KB / Downloads: 190)

Sonstige .vi  bsp_unsch_n.vi (Größe: 22,64 KB / Downloads: 172)

A few weeks of developement and testing can save a WHOLE afternoon in the library!
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
07.09.2006, 11:56
Beitrag #3

DoubleU Offline
LVF-Gelegenheitsschreiber
**


Beiträge: 51
Registriert seit: Jan 2006

8.01
2004
kA


Deutschland
LIFO wie realisieren?
Danke, sowas könnte funktionierenSmile
Im Normallfall wird die Queue nicht voll, nur im Fehlerfall, und schnell soll das ganze nur im "Normallfall" sein. D.h. es ist auf jeden Fall für mich intressant.

Gruss
Uli

Edit:

' schrieb:Schwieriger ist es das älteste Element aus der Queue zu löschen. Dazu hab ich keine Funktion gefunden. Habe dir also ein kleines SubVi geschrieben, was genau das erledigt.
?? Muss man nicht einfach Dequeue element aufrufen um das älteste zu löschen, so hab ich mir das gedacht...
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
07.09.2006, 12:45 (Dieser Beitrag wurde zuletzt bearbeitet: 07.09.2006 12:47 von Kvasir.)
Beitrag #4

Kvasir Offline
LVF-Freak
****


Beiträge: 642
Registriert seit: May 2006

10
2004
DE_EN

0000
Oesterreich
LIFO wie realisieren?
Hmm also wenn ich dich richtig verstanden habe, soll dein Programm folgendes machen:
- Die neuesten Einträge der Queue als erstes abarbeiten (Lifo)
- Wenn die Queue voll ist, das älteste löschen und das neue reingeben.

Dequeue liest nun immer das vorderste Element aus der Queue aus.
Um deinen Lifo zu realsieren hängst du also neue Elmente an den Anfang der Queue (Element am Anfang einfügen), damit sie auch als erstes wieder ausgelesen werden.

Ist deine Queue nun voll willst du aber nicht ein Element vom Anfang löschen (dequeue), sondern das älteste, also das ganz hinten.
Und genau das macht mein SubVi. Es liest alle Einträge aus, löscht den letzten und schreibt die Restlichen wieder in der gleichen Reihenfolge in die Queue. Es ist sozusagen ein Workaround dafür, dass LabVIEW keine Funktion hat um bestimmte Postionen in der Queue auszulesen (zumindest kenn ich keine).

A few weeks of developement and testing can save a WHOLE afternoon in the library!
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
07.09.2006, 13:25
Beitrag #5

DoubleU Offline
LVF-Gelegenheitsschreiber
**


Beiträge: 51
Registriert seit: Jan 2006

8.01
2004
kA


Deutschland
LIFO wie realisieren?
JA richtig,

inzwischen hab ich einen anderen Entwurf mit einem FIFO zum testen realisiert, da hab ich es so gemacht. Hab ganz vergessen das es um LIFO gingWink. Im Prinzip müsste LabVIEW einfach noch ein VI zur verfügung stellen dequeue at opposit end.

Gruss
Uli
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
07.09.2006, 13:57 (Dieser Beitrag wurde zuletzt bearbeitet: 07.09.2006 13:57 von Kvasir.)
Beitrag #6

Kvasir Offline
LVF-Freak
****


Beiträge: 642
Registriert seit: May 2006

10
2004
DE_EN

0000
Oesterreich
LIFO wie realisieren?
Jep. genau diese Funktion fehltSad
Macht aber nix, mein kleines SubVi macht das wieder wett. Klingt komisch, is aber so ...Wink

A few weeks of developement and testing can save a WHOLE afternoon in the library!
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
  Durchflussmessung mit Hilfe von Impulsen realisieren MrBenBen 8 5.949 16.03.2016 14:38
Letzter Beitrag: MrBenBen
  Realisieren von drücken. Locke85 6 3.571 11.11.2015 10:10
Letzter Beitrag: Locke85
  Wie einfaches Statusfenster realisieren? joerg030284 6 5.713 14.04.2011 08:06
Letzter Beitrag: joerg030284
  2x I32 TypeCast zu 1x DBL wie realisieren? enigma 2 4.662 08.09.2010 07:38
Letzter Beitrag: GerdW
  Latch mit eigenem Tastendruck realisieren flattervieh 7 6.987 08.09.2009 21:35
Letzter Beitrag: flattervieh
  Farbmischer in VI realisieren SvarT 2 3.450 27.01.2009 10:58
Letzter Beitrag: SvarT

Gehe zu: