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 

Array-Ringpuffer in While



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!

21.03.2007, 10:42 (Dieser Beitrag wurde zuletzt bearbeitet: 21.03.2007 10:56 von eg.)
Beitrag #1

eg Offline
LVF-SeniorMod


Beiträge: 3.868
Registriert seit: Nov 2005

2016
2003
kA

66111
Deutschland
Array-Ringpuffer in While
Hallo Leute,

ich habe eine Whileschleife(eine Task), die mir Daten auf einem XY-Plot darstellt. Habe schon öfters gelesen, dass man keine Arrays in While-Schleifen im Bezug auf die Speicherverwaltung von LV einsetzen soll, aber eine For-Schleife kann ich hier nicht einsetzten und XY-Plot kann nur Arrays darstellen. Im Screenshot seht ihr, dass die neuen Werte aus einer Queue ausgelesen werden und in ein Datenarray hinzugefügt. Der User kann die Grösse des Arraypuffers selbst einstellen, damit er selber entscheidet wieviele Daten er sehen will und selber auf die CPU-Auslastung und Speicherverbrauch achtet. Sobald also die Puffergrösse den eingestellten Wert überschreitet, wird der Puffer abgeschnitten. Auf dem XY-Plot wird der ganze Datenpuffer dargestellt, aber halt mit kleineren Frequenz als die Daten kommen (ich kann ja nicht meinen XY-Plot mit 400 Hz updaten, sonst hätte ich 100% CPU-Auslastung). Die letzte Case-Struktur ist für die Aufgabenstellung irrelevant, also einfach ignorieren.

Was könnt ihr mir vorschlagen? Soll ich da am besten gleich ein Array initialisieren und dann mit Replace Array Subset arbeiten. Oder gibt es was anderes bzw. besseres?

Danke, Eugen

P.S. ich habe es hier und nicht in Signaldartellung gepostet, weil meine Frage sich mehr auf die Speicherverwaltung bezieht.


Angehängte Datei(en) Thumbnail(s)
   

Webseite des Benutzers besuchen Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
21.03.2007, 11:37
Beitrag #2

jg Offline
CLA & CLED
LVF-Team

Beiträge: 15.864
Registriert seit: Jun 2005

20xx / 8.x
1999
EN

Franken...
Deutschland
Array-Ringpuffer in While
<div align="left">Hallo, Eugen,

ich glaube, wir sind uns hier alle im Forum einig, dass LV-Memory-Managermäßig die Variante mit Array-initalisieren und Replace-Array-Subset die optimale ist.

Meine Erfahrung ist hier aber, dass das in der Realität nur bei sehr großen Arrays einen Einfluß hat. Ich weiss jetzt natürlich nicht, mit welchen Datenmengen du maximal rechnest. Bei mir treten in der Regel nur kleine Datenmengen auf (einige tausend), so dass ich hauptsächlich recht gnadenlos mit Build-Array-Funktionen arbeite.

MfG, Jens</div>

Wer die erhabene Weisheit der Mathematik tadelt, nährt sich von Verwirrung. (Leonardo da Vinci)

!! BITTE !! stellt mir keine Fragen über PM, dafür ist das Forum da - andere haben vielleicht auch Interesse an der Antwort!

Einführende Links zu LabVIEW, s. GerdWs Signatur.
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
21.03.2007, 11:41
Beitrag #3

eg Offline
LVF-SeniorMod


Beiträge: 3.868
Registriert seit: Nov 2005

2016
2003
kA

66111
Deutschland
Array-Ringpuffer in While
' schrieb:<div align="left">Hallo, Eugen,

ich glaube, wir sind uns hier alle im Forum einig, dass LV-Memory-Managermäßig die Variante mit Array-initalisieren und Replace-Array-Subset die optimale ist.

Meine Erfahrung ist hier aber, dass das in der Realität nur bei sehr großen Arrays einen Einfluß hat. Ich weiss jetzt natürlich nicht, mit welchen Datenmengen du maximal rechnest. Bei mir treten in der Regel nur kleine Datenmengen auf (einige tausend), so dass ich hauptsächlich recht gnadenlos mit Build-Array-Funktionen arbeite.

MfG, Jens</div>


Danke schon mal für die Antwort. Die Puffergrösse ist bei mir auf 10000 Datenpunkte begrenzt. Das mit Init und Replace ist mit schon klar, aber versuche es mal hier einzusetzen. Ich frage ja Arraygröße ab und diese ist bei vorinitialisierten Arrays gleich groß.

Eugen

Webseite des Benutzers besuchen Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
21.03.2007, 11:55 (Dieser Beitrag wurde zuletzt bearbeitet: 21.03.2007 11:59 von VDB.)
Beitrag #4

VDB Offline
LVF-Stammgast
***


Beiträge: 426
Registriert seit: Oct 2005

2010-2011
1997
kA

52134
Deutschland
Array-Ringpuffer in While
' schrieb:Danke schon mal für die Antwort. Die Puffergrösse ist bei mir auf 10000 Datenpunkte begrenzt. Das mit Init und Replace ist mit schon klar, aber versuche es mal hier einzusetzen. Ich frage ja Arraygröße ab und diese ist bei vorinitialisierten Arrays gleich groß.

Eugen

Das geht hier doch auch, Du kannst dein Array mit NaNs initialisieren, die werden im Graphen nicht angezeigt. Die Arraygröße kannst Du in einem Shift-Register hochzählen. Eine weitere Optimierung wäre die Benutzung von SGL-Arrays statt DBL-Arrays (4 statt 8 Bytes) was für die Darstellung meistens völlig ausreicht.

VDB
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
21.03.2007, 12:01
Beitrag #5

eg Offline
LVF-SeniorMod


Beiträge: 3.868
Registriert seit: Nov 2005

2016
2003
kA

66111
Deutschland
Array-Ringpuffer in While
' schrieb:Das geht hier doch auch, Du kannst dein Array mit NaNs initialisieren, die werden im Graphen nicht angezeigt. Die Arraygröße kannst Du in einem Shift-Register hochzählen. Eine weitere Optimierung wäre die Benutzung von SGL-Arrays statt DBL-Arrays (4 statt 8 Bytes) was für die Darstellung meistens völlig ausreicht.

VDB


Was meinst du mit NaNs?

Es sind schon Singles, sieht mal leider nicht.

Eugen

Webseite des Benutzers besuchen Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
21.03.2007, 12:12
Beitrag #6

VDB Offline
LVF-Stammgast
***


Beiträge: 426
Registriert seit: Oct 2005

2010-2011
1997
kA

52134
Deutschland
Array-Ringpuffer in While
' schrieb:Was meinst du mit NaNs?

Es sind schon Singles, sieht mal leider nicht.

Eugen

NaN = Not A Number, wird bei Gleitkommazahlen benutzt um ungültige Ergebnisse darzustellen, z.B. dividieren durch 0. NaNs werden in Graphen und Charts nicht dargestellt.

VDB
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
21.03.2007, 12:25
Beitrag #7

jg Offline
CLA & CLED
LVF-Team

Beiträge: 15.864
Registriert seit: Jun 2005

20xx / 8.x
1999
EN

Franken...
Deutschland
Array-Ringpuffer in While
Hallo, Eugen,

dass du ja bei deinem Bsp schon immer ein komplettes Array in den XY-Graphen schiebst, habe ich in der Eile mal wieder übersehen. Ansonsten, der Vorschlag von VDB hört sich doch sehr gut an. Habe ich zwar selber noch nicht probiert, werde ich aber bestimmt auch demnächst mal machen. Ansonsten, 10.000 Datenpunkte ist für LabVIEW eigentlich noch relativ harmlos.

Da wir jetzt schon fast beim Thema "große Datenmengen" sind, hier noch ein Link von NI. Die dort verlinkte Bibliothek giga_LabVIEW.llb hatte ich mir auch irgendwann schon mal runtergeladen und angeschaut. Fand ich damals sehr interessant.

MfG, Jens

Wer die erhabene Weisheit der Mathematik tadelt, nährt sich von Verwirrung. (Leonardo da Vinci)

!! BITTE !! stellt mir keine Fragen über PM, dafür ist das Forum da - andere haben vielleicht auch Interesse an der Antwort!

Einführende Links zu LabVIEW, s. GerdWs Signatur.
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
21.03.2007, 12:54 (Dieser Beitrag wurde zuletzt bearbeitet: 21.03.2007 13:11 von eg.)
Beitrag #8

eg Offline
LVF-SeniorMod


Beiträge: 3.868
Registriert seit: Nov 2005

2016
2003
kA

66111
Deutschland
Array-Ringpuffer in While
' schrieb:NaN = Not A Number, wird bei Gleitkommazahlen benutzt um ungültige Ergebnisse darzustellen, z.B. dividieren durch 0. NaNs werden in Graphen und Charts nicht dargestellt.

VDB


Das wusste ich ja schon. Ich meine dein Vorschlag. Kannst du mal was kleineres basteln, damit ich sehe was du meinst? Danke.

Ich habe mich oben falsch ausgedrückt. Ich habe gemeint was meinst du mit NaNs auffüllen und wozu? Was bringt mir das, wenn ich mein Array bei der Initialisierung mit NaNs auffülle? Und warum soll ich Arraygröße hochzählen?

Vielleich meinst du ich muss immer mein komplettes Array anzeigen, wobei der Rest(der mit NaNs aufgefüllt ist) vom XY-Plot sowieso nicht dargestellt wird. Was soll ich dann mit der X-Achsenskalierung machen? Denkst du nicht es wird viel zu kompliziert für diese Kleinigkeit?

Eugen

Webseite des Benutzers besuchen Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
21.03.2007, 17:01
Beitrag #9

VDB Offline
LVF-Stammgast
***


Beiträge: 426
Registriert seit: Oct 2005

2010-2011
1997
kA

52134
Deutschland
Array-Ringpuffer in While
' schrieb:Das wusste ich ja schon. Ich meine dein Vorschlag. Kannst du mal was kleineres basteln, damit ich sehe was du meinst? Danke.

Ich habe mich oben falsch ausgedrückt. Ich habe gemeint was meinst du mit NaNs auffüllen und wozu? Was bringt mir das, wenn ich mein Array bei der Initialisierung mit NaNs auffülle? Und warum soll ich Arraygröße hochzählen?

Vielleich meinst du ich muss immer mein komplettes Array anzeigen, wobei der Rest(der mit NaNs aufgefüllt ist) vom XY-Plot sowieso nicht dargestellt wird. Was soll ich dann mit der X-Achsenskalierung machen? Denkst du nicht es wird viel zu kompliziert für diese Kleinigkeit?

Eugen


Sonstige .vi  NaN_Array.vi (Größe: 17,69 KB / Downloads: 392)


So in etwa... Die NaNs stören nicht bei der Darstellung im Graphen.

VDB
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
21.03.2007, 17:35
Beitrag #10

eg Offline
LVF-SeniorMod


Beiträge: 3.868
Registriert seit: Nov 2005

2016
2003
kA

66111
Deutschland
Array-Ringpuffer in While
' schrieb:[attachment=32284:NaN_Array.vi]

So in etwa... Die NaNs stören nicht bei der Darstellung im Graphen.

VDB


Hm, irgendwie passt es schon. Nur muss man sich gut überlegen wie man es laufend macht. Also halt die gleiche Funktionalität wie bei mir im ersten Post. Ich meine wie macht man daraus einen richtigen RING-Puffer mit variabler Tiefe?

Eugen

Webseite des Benutzers besuchen 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
  Ringpuffer - aber wie? dommae 17 19.210 19.05.2010 14:07
Letzter Beitrag: Ome
  Chart-History als Ringpuffer verwenden dimitri84 11 11.547 08.12.2009 22:33
Letzter Beitrag: dimitri84

Gehe zu: