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.)
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.
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!
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ß.
' 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.
' 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.
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.
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!
' 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?
' 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?
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?