LabVIEWForum.de
Schieberegister FiFo mit Inplace Stuktur realisieren - Druckversion

+- LabVIEWForum.de (https://www.labviewforum.de)
+-- Forum: LabVIEW (/Forum-LabVIEW)
+--- Forum: LabVIEW Allgemein (/Forum-LabVIEW-Allgemein)
+---- Forum: Signaldarstellung (/Forum-Signaldarstellung)
+---- Thema: Schieberegister FiFo mit Inplace Stuktur realisieren (/Thread-Schieberegister-FiFo-mit-Inplace-Stuktur-realisieren)

Seiten: 1 2


Schieberegister FiFo mit Inplace Stuktur realisieren - GT123 - 21.02.2012 15:27

Hallo,

ich benötige mal professionelle Hilfe.
Ich lese Messdatenpaare von mehreren Geräten. Schicke diese Daten in ein SR und ein xy Graph liest die Daten aus dem SR. Da ich Speicherfehler bekam bin ich auf die Thematik mit Inplace gekommen. Nun möchte ich das SR mittels
Inplacestrukturen versehen damit keine Kopien durch die Arrayfunktionen angelegt werden. Also das SR muss ich beschränken auf z.B. 10 000 Werte .... das ganze soll nach dem Fifo Prinzip funktionieren. Ich kriege das nicht hin mit den Inplace Strukturen. Kann mir jemand mein Beispiel ergänzen?
Oder gibt es eine noch eine bessere Methoden die Daten zu halten fürs Diagramm?
Welche Arrayfunktionen legen eigentlich Kopien an, alle?
Kopien sind bei grossen Datenmengen tödlich.


RE: Schieberegister FiFo mit Inplace Stuktur realisieren - eb - 21.02.2012 18:15

Hallo GT123,

Heute erst hab ich mich auch wieder mit diesem Thema beschäftigt. Dieser Post im Speziellen
http://www.labviewforum.de/Thread-Performance-Frage-Grosse-Arrays-in-Cluster-Schieberegister?pid=111384#pid111384
und der ganze Thread im Allgemeinen waren sehr aufschlussreich bzw. auffrischend.

Auch ich kann nur empfehlen solche Buffer mit den (named) Queues zu machen. Ist einfach zu bauen und das ganze Handling macht LV. Such mal nach einem Beispiel unter dem Stichwort "Lossy Enqueue".

Hoffe das hilft schonmal.


Gruß


RE: Schieberegister FiFo mit Inplace Stuktur realisieren - GT123 - 21.02.2012 18:26

Hi,
ja mit dem "Lossy Enqueue" hab ich was probiert. Frage mich nur wie ich auf geschriebene Daten reagieren mit Status Queue, denn ich möchte eigentlich nur aus der Queue lesen wenn sich ein Wert wieder ändert, dann aber nicht herausnehmen sondern eben nur alles in der Schlange lesen?


RE: Schieberegister FiFo mit Inplace Stuktur realisieren - eb - 21.02.2012 18:34

Hallo,

dieser Beitrag hat noch Infos zum Thema Ringspeicher:
http://www.labviewforum.de/thread-4370.html?highlight=Ringspeicher

Zu lossy Queue hier ein kleines Beispiel:
http://www.labviewforum.de/Thread-Ringpuffer-aber-wie?pid=96797#pid96797


Bis dann und schönen Feierabend
Gruß


RE: Schieberegister FiFo mit Inplace Stuktur realisieren - Hook1986 - 23.02.2012 14:50

Hallo GT123,

Du möchtest also immer in einem Schleifendurchlauf dein "Messwertarray" um einen Eintrag vergrößern und in einem XY-Plotter anzeigen? Dann ist doch ein SR eigentlich genau das richtige. Geh einfach hin und füge ein leeres Array an den Eingang deiner While-Schleife (SR) und dann in jedem Durchlauf einfach die Messwerte hinten in das Array einfügen. Dabei helfen die Funktionen "Array Länge" und "In Array einfügen". Das kannst du, wenn gewünscht auch noch in eine Case-Struktur bauen und als Select für diese Struktur ein Vergleich der Werte mit den im Array vorhandenen Werten machen. Ist ein Wertpaar gleich, so führst du den Befehl eben nicht aus, da das Paar schon vorhanden ist. Ist keine Übereinstimmung da, dann hinein ins Array und ins SR.

MfG Carsten


RE: Schieberegister FiFo mit Inplace Stuktur realisieren - GT123 - 03.03.2012 10:41

Hallo Carsten,
Zitat:Du möchtest also immer in einem Schleifendurchlauf dein "Messwertarray" um einen Eintrag vergrößern und in einem XY-Plotter anzeigen? Dann ist doch ein SR eigentlich genau das richtige. Geh einfach hin und füge ein leeres Array an den Eingang deiner While-Schleife (SR) und dann in jedem Durchlauf einfach die Messwerte hinten in das Array einfügen. Dabei helfen die Funktionen "Array Länge" und "In Array einfügen".
Solch eine Lösung hatte ich schon programmiert. Ich dachte jedoch das die Arrayfunktion "insert" und "replace" Kopien anlegen (bin mir aber nicht sicher) u. wollte dies mit Inplace-Schleifen lösen. Ein leeres Array an den Eingang des SR, beim ersten schreiben in das leere Array mit "insert" u. wenn ein Wert schon im Array ist mit "replace" die Werte einfügen.

Zitat:Das kannst du, wenn gewünscht auch noch in eine Case-Struktur bauen und als Select für diese Struktur ein Vergleich der Werte mit den im Array vorhandenen Werten machen. Ist ein Wertpaar gleich, so führst du den Befehl eben nicht aus, da das Paar schon vorhanden ist. Ist keine Übereinstimmung da, dann hinein ins Array und ins SR.
Das ist für mich nicht passend da jedes Messpaar erfasst werden muss ob gleich o. ungleich spielt da keine Rolle.
Trotzdem danke für den Hinweis.

Welche Arrayfunktionen Kopien anlegen weiss ich immer noch nicht genau. Ausser das "Array Build" das legt laut Recherche
Kopien an.


RE: Schieberegister FiFo mit Inplace Stuktur realisieren - eb - 05.03.2012 09:09

Hallo,

zu dem Thema "Kopien von Arrays": vielleicht hilft dir die Visualisierung mittels Tools->Profile->ShowBufferAllocations.
Da sieht man wo "Kopien" angelegt werden.


Gruß


RE: Schieberegister FiFo mit Inplace Stuktur realisieren - GT123 - 08.03.2012 17:09

Hallo Erik,

danke für den Tipp mit Tools->Profile->ShowBufferAllocations
Aber da gibt es ja extrem viele Kopien, an fast jedem Eck zeigt es dies an (Error Cluster, Default Werte....)
Jetzt sollte man noch wissen welche Kopien kritisch sind u. welchen nicht.


RE: Schieberegister FiFo mit Inplace Stuktur realisieren - eb - 09.03.2012 09:14

HalloGT123,

pauschal (denke ich) kann man sagen: die Größe des allokierten Bereiches hat einen Einfluss und die Häufigkeit dieser Allokierungen.
D.h. also je größer die Array-Kopien sind und je mehr davon in Schleifen gemacht werden, um so kritischer sind dieser "Punkte" bei der Übersicht.

Grüße

ps.: Zeig doch nochmal dein Vi her.


RE: Schieberegister FiFo mit Inplace Stuktur realisieren - GT123 - 09.03.2012 14:07

Hallo Erik,

anbei das Vi, nach meiner bisherigen Methode, einfach Daten von Queue ab ins SR.

Ganz oben in meiner ursprünglichen Frage habe ich auch ein Vi.
Bei dieser neueren Version versuchte ich die Daten eben mit Inplace zu handeln, sowie ein FiFo Prinzip einzubauen.
Aber auch bei den Inplace Strukturen gibt es Buffer Allocations?

Was hälst du von den VIs bezüglich Buffer Allocation?