LabVIEWForum.de
Ringspeicher - Druckversion

+- LabVIEWForum.de (https://www.labviewforum.de)
+-- Forum: LabVIEW (/Forum-LabVIEW)
+--- Forum: LabVIEW Allgemein (/Forum-LabVIEW-Allgemein)
+---- Forum: Datenerfassung (DAQ) (/Forum-Datenerfassung-DAQ)
+---- Thema: Ringspeicher (/Thread-Ringspeicher--4370)

Seiten: 1 2 3 4


Ringspeicher - Maximilian - 11.10.2009 21:47

Achtung Anfänger!!!

hallo zusammen,

ich hab wieder einmal ein Problem. Ich habe versucht, dass Ringspeicher VI aus diesem Forum für meine Zwecke zu modifizieren. Und zwar benötige ich zwei Messkanäle (oder auch mehrere) die im Ringspeicher aufgezeichnet werden. Die Messwerte sind Temperatur- und ein Geschwindigkeitssignal (dies ist aber denke ich nicht relevant)

Ich denke das VI würde bis zum Array Split auch funktionieren, aber eben dieser genannte "Split" des Ringspechers funktioniert wohl nur für ein 1 dimensionales Array. Muss ich die einzelnen Messsignale jeweils in einem eigenen Ringspeicher abspeichern??

Mein geändertes VI (LabVIEW 8.5) als Info. Ich hoffe ihr könnt mir weiterhlfen wie ich einen mehrkanaligen Ringspeicher erstellen kann.

Gruß max


Ringspeicher - IchSelbst - 11.10.2009 22:08

' schrieb:Und zwar benötige ich zwei Messkanäle (oder auch mehrere) die im Ringspeicher aufgezeichnet werden. Die Messwerte sind Temperatur- und ein Geschwindigkeitssignal (dies ist aber denke ich nicht relevant)
Wenn du zwei Kanäle im Ringpuffer speichern willst, dann brauchst du auch nur 2*1000 allozieren, nicht 1000*1000!

Zitat:Ich denke das VI würde bis zum Array Split auch funktionieren,
Im prinzip wohl ja.
Allerdings kann ich immer nicht sofort entscheiden, ob die Daten auch richtig, also gemäß der Applikation, im 2D-Array liegen. Beachte: Zwei Spalten und 1000 Reihen oder 2 Reihen und 1000 Spalten?

Zitat:aber eben dieser genannte "Split" des Ringspechers funktioniert wohl nur für ein 1 dimensionales Array.
Jawohl. Geht eigentlich nur mit 1DArr.

Zitat:Muss ich die einzelnen Messsignale jeweils in einem eigenen Ringspeicher abspeichern??
Nicht zwangsläufig.
Deine bisherige Methode hat den Vorteil, dass die Anzahl der Kanäle beliebig sein kann. Dafür muss du vor dem Splitten das 2D-Array in 1D-Arrays aufteilen (Array indizieren).
Wenn du zwei 1D-Ringspeicher macht, ist die Erweiterung auf mehrere Kanäle kompliziert. Dafür ist das mit dem Splitten einfach.

Ich würde die Sache bei dem 2DArr belassen und dieses Array in 1DArrs teilen.


Ringspeicher - Maximilian - 11.10.2009 22:18

Und wie teil ich dieses 2DArr in ein 1DArrs??


Ringspeicher - Maximilian - 11.10.2009 22:57

Ich sollte schon genau lesen was du geschrieben hast; "Array indizieren" ist das Zauberwort.

Nun hab ich aber das problem mit den Spalten und den Zeilen. Ich hab nun 2 Spalten und 1000 Zeilen. Ich sollte aber 1000 Spalten und 2 Zeilen haben und die Datentypen für den Split stimmen nicht überein

Kann mir in der Geschichte nochmals jemand weiterhelfen??

- Wie kann ich die Spalten und zeilen tauschen
- Wie bekomm ich die gleichen Datentypen


Ringspeicher - Maximilian - 11.10.2009 23:09

Mein geändertes VI dazu

Lv85_img


Ringspeicher - SeBa - 12.10.2009 07:02

Moin,

ich lese hier immer von 2D Arrays und dann schau ich in dein VI und sehe, dass du ein 1D Array der Länge 20 mit dem Wert 2 befüllst und das dann "allocate memory" nennst.

Ist das so gewollt?

[attachment=21670]

Gruß SeBa


Ringspeicher - Lucki - 12.10.2009 08:28

Hier mal, gewissermassen außerhalb die laufenden Diskussion, eine einfachere Alternative zum Ringpuffer.
Dazu Vorbemerkung: Bei der Konzeption des Rinpuffers geht man ja davon aus, daß es viel zu aufwändig wäre, die gespeicherten Datenelemente im Puffer bei jedem neu hinzugkommenen Element um eine Speicherstelle zu verschieben. Deshalb läßt man die Daten stehen und arbeitet nur mit umlaufenden Zeigern für das als nächste zu schreibende und zu lesende Element.
Nun habe ich aber festgestellt, daß die Befürchtung gegenstandslos ist. Die LabVIEW-Funktion "In Array rotieren" ist unvorstellbar schnell, auch bei großen und vielkanaligen Datenmengen. Weiß nicht, wie die das zaubern, im Endergebnis zählt aber nur die Tatsache. Und von daher bietet sich ein vereinfachtes, auch für Anfänger ganz leicht verständliches Bufferkonzept ohne Ringzeiger-Arithmetik an, wobei auch mehrere Kanäle überhaupt keine Hürde sind.
Hier das Beispiel, welches ich so ähnlich auch schon mal gepostet haben muß.
[attachment=21671]
Lv86_img[attachment=21672]


Ringspeicher - Lucki - 12.10.2009 08:43

' schrieb:Ich denke das VI würde bis zum Array Split auch funktionieren, aber eben dieser genannte "Split" des Ringspeichers funktioniert wohl nur für ein 1 dimensionales Array. Muss ich die einzelnen Messsignale jeweils in einem eigenen Ringspeicher abspeichern??
Falls Du aber diesen Ringspeicher beibehalten und für mehrere Kanäle modifizieren möchtest, hier der Tip:
Auch bei mehreren Kanälen sollte das 1 D-Array beibehalten werden.
Wie soll das bei mehreren Kanälen funktionieren?
Mit dieser Datenstruktur: 1D-Array of Clusters. Jedes Clusterelemet enthält einen Datenpunkt aller Kanäle. (Das kann in dem oben mir oben geposteten VI abgeschaut werden.)


Ringspeicher - dimitri84 - 12.10.2009 09:19

Hallo Ludwig,

kann ich das "Ringpuffer.vi" einmal fürlv82haben? Sei bedankt.


Ringspeicher - Lucki - 12.10.2009 09:54

' schrieb:kann ich das "Ringpuffer.vi" einmal fürlv82haben? Sei bedankt.
[attachment=21678]