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 

Dieses Thema hat akzeptierte Lösungen:

Globale Variable, maximale Größe, Daten anhängen.



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!

16.04.2014, 15:17
Beitrag #1

dieseldunst Offline
LVF-Neueinsteiger


Beiträge: 9
Registriert seit: Apr 2014

12.0.1
2007
DE



Globale Variable, maximale Größe, Daten anhängen.
Hallo Leute,

gerade verwende ich Labview um große Datenmengen zu speichern. Hierfür habe ich eine globale Variable definiert. Diese Variable besitzt ein Array, in das ich bei jeder Messwertaufnahme 4 Datenstrings in einer Zeile anhänge. Das funktioniert soweit gut.
Insgesamt möchte ich über 200000 dieser Zeilen in das Array einfügen.

Das Problem ist, das ab ungefähr 30000 Werten das Array irgendwie zu groß wird und der PC zu langsam wird beim Hinzufügen der Daten. Hierfür muss ich dann das Array in eine Datei speichern und es leeren. Dann funktioniert es wieder gut.

Im Bild sieht man ja, dass ich die globaleVariable immer erst auslese und dann wieder neu beschreibe, was wohl bei der Werteanzahl nicht sinnvoll ist. Wie hänge ich aber etwas an eine Variable an ohne diese zu lesen?

Freundliche Grüße
Bernhard


Angehängte Datei(en) Thumbnail(s)
   
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
Anzeige
16.04.2014, 15:25 (Dieser Beitrag wurde zuletzt bearbeitet: 16.04.2014 15:26 von GerdW.)
Beitrag #2

GerdW Offline
______________
LVF-Team

Beiträge: 17.426
Registriert seit: May 2009

LV2021
1995
DE_EN

10×××
Deutschland
RE: Globale Variable, maximale Größe, Daten anhängen.
Hallo dunst,

1.) Globale Variablen sind eher ungeeignet, um große Datenmengen zu speichern: sie führen aufgrund der nötigen Datenkopien noch eher zu "Out of memory"-Problemen als andere Methoden.
2.) Deine Methode, ArraySize und InsertIntoArray zu kombinieren, ist ebenfalls ungünstig. Einfacher wäre hier ein simples BuildArray…
Tipps:
- Lese dich ins Thema "FGVs" ein.
- Lese die LabVIEW-Hilfe zum Thema "Handling großer Datenmengen".
- Überlege dir ein besseres Datenmanagment…

3.) Die Sequenzstruktur ist im gezeigten Kontext unnötig.
4.) Es gibt ein AutoCleanup-Tool…

Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
16.04.2014, 18:37 (Dieser Beitrag wurde zuletzt bearbeitet: 16.04.2014 18:43 von Lucki.)
Beitrag #3

Lucki Offline
Tech.Exp.2.Klasse
LVF-Team

Beiträge: 7.699
Registriert seit: Mar 2006

LV 2016-18 prof.
1995
DE

01108
Deutschland
RE: Globale Variable, maximale Größe, Daten anhängen.
Der Zaubertrick bei großen Datenmengen ist auf jeden Fall: Neue Daten mit "ersetzen" einfügen statt anzuhängen. Also: (i) Das Array auf maximale Datengröße vorinitialisieren, (ii) Die neuen Werte mit "ersetzen" in die vorinitialisierten Werte einfügen. (iii) zum Schluss das Array auf den tatsächlich mit Daten angefüllten Teil kürzen. (Der logistische Aufwand ist etwas größer, aber es lohnt sich)
Damit bist Du auf Anhieb mindestens 100 mal schneller. Ob Du globale Variable, FGV, oder etwas anderes nimmst, hat auch einen gewissen Einfluss auf die Schnelligkeit. Im Vergleich zu obiger Änderung ist das aber eher marginal bis vernachlässigbar. Das Schnellste wäre die Speicherung in einem Schieberegister. Globale Variablen werden gewöhnlich verwendet, um von mehreren VIs auf die Daten zugreifen zu können. Brauchst Du das hier überhaupt?
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
16.04.2014, 21:05
Beitrag #4

dieseldunst Offline
LVF-Neueinsteiger


Beiträge: 9
Registriert seit: Apr 2014

12.0.1
2007
DE



RE: Globale Variable, maximale Größe, Daten anhängen.
Hi,

danke für eure Antworten. Ja die globale Variable verwende ich in unterschiedlichen VIs. Insgesamt ist das Projekt sehr groß geworden.

Klar ist die Sequenzstruktur nötig, ich habe nur einen kleinen Teil ausgeschnitten wegen der globalen Variable.

Naja, ich weiß es gibt ein AutoCleanup-Tool. Ich programmiere aber lieber so wie ich denke, bzw. nach meinen Überlegungen. Wenn das danach durch den Häcksler gedrückt wird wenn es funktioniert ist mir egal. So unansehnlich finde ich die drei Blöcke nun auch nicht...

Ich habe nach FGVs gegoogelt. Kp was das ist Big Grin Datenmanagment? Pfff
Nein, Spaß bei Seite, ich bekomme dafür kein Geld und die Motivation ist bei Null mich tiefer in Labview einzuarbeiten. Aber deine Schritte sind wohl richtig.

Der Zaubertrick hört sich gut an! Werde ich testen. Lässt sich umsetzen und vielleicht funktionierts. Danke
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
17.04.2014, 06:18 (Dieser Beitrag wurde zuletzt bearbeitet: 17.04.2014 06:20 von cb.)
Beitrag #5

cb Offline
LVF-SeniorMod


Beiträge: 1.731
Registriert seit: Feb 2006

2018SP1
2001
EN

40xxx
Deutschland
RE: Globale Variable, maximale Größe, Daten anhängen.
(16.04.2014 21:05 )dieseldunst schrieb:  Ich habe nach FGVs gegoogelt. Kp was das ist Big Grin Datenmanagment? Pfff
Nein, Spaß bei Seite, ich bekomme dafür kein Geld und die Motivation ist bei Null mich tiefer in Labview einzuarbeiten. Aber deine Schritte sind wohl richtig.

hmm ... klingt nach den besten Voraussetzungen für eine gut funktionierende, performante und zuverlässige LabVIEW-Anwendung Big Grin Big Grin Big Grin

in deinem Fall kann ich dir nur den Tip geben dich an den ehernen Grundsatz der Software-Entwicklung zu halten: "real programmers don't document!" Big Grin Big Grin - dann ist der Erfolg - wie auch immer man den nun definieren will - garantiert Wink

viele Grüße
cb

http://www.rotabench.com - rotierende Prüfstände nach dem Baukasten-Prinzip
Webseite des Benutzers besuchen Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
17.04.2014, 07:13 (Dieser Beitrag wurde zuletzt bearbeitet: 17.04.2014 07:30 von Lucki.)
Beitrag #6

Lucki Offline
Tech.Exp.2.Klasse
LVF-Team

Beiträge: 7.699
Registriert seit: Mar 2006

LV 2016-18 prof.
1995
DE

01108
Deutschland
RE: Globale Variable, maximale Größe, Daten anhängen.
(17.04.2014 06:18 )cb schrieb:  
(16.04.2014 21:05 )dieseldunst schrieb:  Ich habe nach FGVs gegoogelt. Kp was das ist Big Grin Datenmanagment? Pfff
Nein, Spaß bei Seite, ich bekomme dafür kein Geld und die Motivation ist bei Null mich tiefer in Labview einzuarbeiten. Aber deine Schritte sind wohl richtig.
hmm ... klingt nach den besten Voraussetzungen für eine gut funktionierende, performante und zuverlässige LabVIEW-Anwendung Big Grin Big Grin Big Grin
viele Grüße
cb

..und was lernt man daraus: wir haben unsere Bemühungen an einen Unwürdigen verschwendet Big Grin
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
Anzeige
17.04.2014, 10:38
Beitrag #7

dieseldunst Offline
LVF-Neueinsteiger


Beiträge: 9
Registriert seit: Apr 2014

12.0.1
2007
DE



RE: Globale Variable, maximale Größe, Daten anhängen.
Naja was soll ich sagen, es funktioniert alles super. In meinem Fall die Hauptsache. (Bis auf das Ding mit den großen Datenmengen.)

Es gibt halt noch eine Stufe zwischen Profi und "Ich weiß wie man mit einem Schalter eine LED anschaltet" Big Grin
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
17.04.2014, 10:49 (Dieser Beitrag wurde zuletzt bearbeitet: 17.04.2014 10:51 von jg.)
Beitrag #8

jg Offline
CLA & CLED
LVF-Team

Beiträge: 15.864
Registriert seit: Jun 2005

20xx / 8.x
1999
EN

Franken...
Deutschland
RE: Globale Variable, maximale Größe, Daten anhängen.
Das Problem mit dem großen Array hättest du in vielen Programmiersprachen, das ist jetzt nicht LabVIEW spezifisch:

Aktuell hängst du bei jedem Durchlauf eine neue Zeile an das schon bestehende 2D Array an. Jetzt muss jedesmal der LabVIEW Memory-Manager neuen Speicher Platz suchen und allozieren, das dauert bei großen Datenmengen. Zusätzlich arbeitest du mit Strings, somit ist jedes Element unterschiedlich lang.

LabVIEW spezifisch ist, dass du durch die globale Variable zusätzliche Kopien im Speicher erzeugst, bei jedem "Lesevorgang" wird eine Kopie erstellt, diese wird dann verarbeitet und dann in deinem Screenshot wieder zurückgeschrieben.

Gruß, Jens

P.S.: Das Hinzufügen einer Zeile am Ende eine 2D-Array geht übrigens viel einfacher so:
   

Zwecks FGV (oder Functional Global Variable), such das mal auf ni.com...

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
17.04.2014, 14:45
Beitrag #9

dieseldunst Offline
LVF-Neueinsteiger


Beiträge: 9
Registriert seit: Apr 2014

12.0.1
2007
DE



RE: Globale Variable, maximale Größe, Daten anhängen.
Hallo Jens,

okay das ist ja fast so wie ich es mir gedacht habe. Das Labview Kopien bei jedem Lesevorgang erzeugt habe ich auch gerade beim Lesen im Handbuch gesehen.

Das das Hinzufügen auch ohne das Ermitteln der Arraygröße habe ich auch bei der Funktion in Array einfügen entdeckt. Danke. Wenn man das nicht direkt weiß kommt man zuerst auf andere Ideen.

So aktuell bin ich nun dazu übergegangen:

-> Keine String Daten zu speichern im Array, lieber Fließkommazahlen speichern und später umwandeln

-> Werte während Messung in Schieberegister sammeln, anschließend in globale Variable (wenn Schreibvorgang unkritisch)

So müsste es nun funktionieren Big Grin
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
17.04.2014, 14:55
Beitrag #10

jg Offline
CLA & CLED
LVF-Team

Beiträge: 15.864
Registriert seit: Jun 2005

20xx / 8.x
1999
EN

Franken...
Deutschland
RE: Globale Variable, maximale Größe, Daten anhängen.
(17.04.2014 14:45 )dieseldunst schrieb:  -> Werte während Messung in Schieberegister sammeln, anschließend in globale Variable (wenn Schreibvorgang unkritisch)
Kommt darauf an. Wenn du hier weiterhin mit "Build Array" oder "Insert Into Array" arbeitest, hast du weiterhin das Speicher-Allozier-Problem. Wenn du vorab die max. Größe der "Messung" kennst, dann lieber das Array mit "Initialize Array" vorinitialisieren und dann mit "Replace Array Subset" arbeiten.

Gruß, 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
Antwort schreiben 


Möglicherweise verwandte Themen...
Themen Verfasser Antworten Views Letzter Beitrag
  Globale Variablen Edi70 7 3.186 08.10.2021 17:01
Letzter Beitrag: GerdW
  Boolean als globale Variable ares2013 12 9.777 06.09.2019 13:57
Letzter Beitrag: GerdW
  Numerisches Bedienelement maximale Signalsteigung begrenzen antwort 2 3.481 06.03.2017 13:46
Letzter Beitrag: antwort
  Übergabe Anzeigeelement zwischen VIs (Referenz/globale Variable?) lipster 1 3.824 03.02.2017 14:27
Letzter Beitrag: GerdW
  Variable Größe eines Arrays mit VISA-Adressen jusaca 4 4.042 10.02.2016 10:13
Letzter Beitrag: jusaca
  Arry statischer Größe mit Elementen dynamischer Größe Si0815 2 3.142 08.03.2015 18:09
Letzter Beitrag: Si0815

Gehe zu: