LabVIEWForum.de
Schieberegister mit variabler Breite - Druckversion

+- LabVIEWForum.de (https://www.labviewforum.de)
+-- Forum: LabVIEW (/Forum-LabVIEW)
+--- Forum: LabVIEW Allgemein (/Forum-LabVIEW-Allgemein)
+--- Thema: Schieberegister mit variabler Breite (/Thread-Schieberegister-mit-variabler-Breite)



Schieberegister mit variabler Breite - olnol - 01.09.2009 11:02

Hallo! Ich benötige ein Schieberegister mit variabler Breite. Dh ich schreibe von rechts nach links in mein Register, jedes Eintrag rückt beim Schreiben eine Stelle nach links, ist das Register voll fällt der letzte Eintrag beim nächsten Zugriff links raus.

Das ganze benötige ich zur Implementierung eines Prätrigers um mir abhängig von der eingestellten Prätrigger-Zeit die letzten Daten vorzuhalten.

Ich hoffe mit kann da jemand weiterhelfen


Schieberegister mit variabler Breite - VDB - 01.09.2009 11:18

Benutze eine Queue statt ein Schieberegister, das macht genau was Du willst.

VDB


Schieberegister mit variabler Breite - olnol - 01.09.2009 12:10

Eine Queue wartet aber wenn sie voll ist und schiebt nicht das letzte Element hinten raus. Ich lese die Queue ja nicht ständig aus, sondern möchte eben mir immer zb. die letzten 3s meines Signals speichern und dazu muss eben der älteste Eintrag immer wieder gelöscht werden. Erkenne ich dann einen Triggerevent möchte ich das im meinem Register die n-Werte vor dem Triggerevent stehen.


Schieberegister mit variabler Breite - Lucki - 01.09.2009 12:39

' schrieb:Eine Queue wartet aber wenn sie voll ist und schiebt nicht das letzte Element hinten raus.
Dann ist Dir entgangen, daß es seitlv86zwei Funktionen zum Schreiben in die Queue gibt: "Element einfügen" und "Element einfügen (verlustbehaftet)"


Schieberegister mit variabler Breite - olnol - 01.09.2009 12:43

Mh leider steht mir an meinem Arbeitsplatz nur LabVIEW 8.2 zur Verfügung.
Zuhause habe ich lediglich die Studentenversion 8.6

Doch sollte so etwas doch auch mit 8.2 machbar sein, oder etwa nicht?


Schieberegister mit variabler Breite - Lucki - 01.09.2009 13:05

' schrieb:Doch sollte so etwas doch auch mit 8.2 machbar sein, oder etwa nicht?
Selbsverständlich ist das machbar, aber wahrscheinlich ist es dann etwas langsamer:
Also: Queue Status abfragen, wenn voll, letztes Element enfernen (=lesen), dann erst Element in Queue schreiben.
Edit:
Oder noch einfacher: Timeout=0 setzen, bei Timeout Element entfernen und noch mal in Queue schreiben.
[attachment=20957]


Schieberegister mit variabler Breite - olnol - 01.09.2009 14:34

Super danke das scheint zu funktionieren. Allerdings macht mir nun das Auslesen ein Problem. Und zwar habe ich 12 Elemente in der Queue. Jedes Element ist ein 2D-Array mit 1000 Samples. Zeile 0 ist Kanal 0 und Zeile 1 Kanal 1. Nun möchte ich meine Präsamples, dh 12*1000 von Kanal 0 in ein 1D-Array speichern. Die Variante im Anhang funktionier leider nicht so wie ich es mir vorstelle.

EDIT: So funktionierts

[attachment=20967]



Bin aber gerne für weitere Anregungen oder Verbesserungsvorschläge dankbar


Schieberegister mit variabler Breite - olnol - 01.09.2009 15:50

Mh noch ein Problem. Ich habe nun ein 2D-Array und möchte ein weiteres 2D-Array anhängen. Mit "buildArray" werden die Arrays allerdings nicht hintereinander gesetzt, so wie ich es gerne hätte, sondern untereinander.

Wie löse ich das Problem?