LabVIEWForum.de - Schieberegister mit variabler Breite

LabVIEWForum.de

Normale Version: Schieberegister mit variabler Breite
Du siehst gerade eine vereinfachte Darstellung unserer Inhalte. Normale Ansicht mit richtiger Formatierung.
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
Benutze eine Queue statt ein Schieberegister, das macht genau was Du willst.

VDB
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.
' 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)"
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?
' 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]
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
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?
Referenz-URLs