26.04.2012, 09:06
Beitrag #1
|
Tintin
LVF-Neueinsteiger
Beiträge: 5
Registriert seit: Mar 2012
6.1
2012
DE
|
Problem bei Langzeitmessung
Hallo Forum,
mein VI zur Datenerfassung via serieller Schnittstelle macht Probleme:
Die Datenerfassung an sich klappt. Erfasst werden gleichzeitig mehrere Kanäle mit einem Messintervall von 2 s. Für jeden Messkanal werden Arrays u.a. eines für die Messdauer und eines für den Messwert angelegt und in einer Schleife mit Schieberegister fortlaufend gefüllt. Die Arrays werden also fortlaufend größer. Gleichzeitig erfolgt für jeden Kanal die Darstellung der beiden Arrays in einem xy-Graphen. Nach ca. 9 Stunden Messdauer (d.h. pro Kanal ca. 16.000 Messwerte) passiert folgendes: Für Kanal Nr. 1 (immer Kanal 1, unabhängig davon, für welchen Kanal die Messung als erstes gestartet wurde) startet die Messung im Minutentakt neu ohne dass ich den entsprechenden Knopf gedrückt hätte, während die übrigen Kanäle normal weiterlaufen. Zu diesem Zeitpunkt sind noch 1 GB physikalischer Speicher verfügbar. Die CPU-Auslastung nimmt mit steigender Messdauer kontinuierlich zu (ich vermute aufgrund der immer größer werdenden Arrays, die bei jedem Schleifendurchlauf durchgereicht werden?) und erreicht zu diesem Zeitpunkt ca. 66 %.
Was passiert hier? Warum startet ein Kanal ab einer gewissen Messdauer ständig neu? Läuft Labview-intern evtl. irgendwas über? Gibt es da irgendwelche Begrenzungen bzgl. Speicher o.ä.? Wie kann man Abhilfe schaffen?
Das VI ist für die langfristige Datenerfassung gedacht, d.h. die Messung soll u.U. über Wochen laufen. Insofern ist Abhilfe dringend notwendig.
Danke und viele Grüße
Tim
|
|
|
26.04.2012, 09:28
(Dieser Beitrag wurde zuletzt bearbeitet: 26.04.2012 09:30 von GerdW.)
Beitrag #2
|
GerdW
______________
Beiträge: 17.467
Registriert seit: May 2009
LV2021
1995
DE_EN
10×××
Deutschland
|
RE: Problem bei Langzeitmessung
Hallo Tim,
erstens: VI anhängen.
zweitens: "Die Arrays werden also fortlaufend größer." klingt nach grob falscher Programmierweise für den geplanten Einsatzzweck "u.U. über Wochen laufen"...
drittens: Es gibt bei NI Tutorials zum Umgang mit großen Datenmengen. Die sind sehr lehrreich...
|
|
|
29.04.2012, 11:01
Beitrag #4
|
jg
CLA & CLED
Beiträge: 15.864
Registriert seit: Jun 2005
20xx / 8.x
1999
EN
Franken...
Deutschland
|
RE: Problem bei Langzeitmessung
Prinzipiell hast du die korrekte Problemstelle erkannt (Zitat: Diese Arrays werden immer größer ...).
Genau hier musst du ansetzen.
Es ist bei einer Langzeitmessung je nach Messrate einfach nicht machbar, alle Messwerte in einem Graphen anzuzeigen. Irgendwann ist der Speicher des Rechners voll.
Außerdem verbraucht die Anzeige von sehr vielen Messwerten in einem XY-Graphen viel Rechenzeit, das kann schon mal dazu führen, dass der UI-Thread mehr als 1 Sekunde ausgelastet ist, und entsprechend lange steht dann das gesamte Programm.
Die Standard-Lösung lautet "Ringpuffer" oder auch "Ringspeicher". Konkret: Du setzt dir eine Maximalanzahl an Messpunkten, die du im XY-Graphen anzeigen willst, und wenn du an dieser Maximalanzahl angekommen bist, werden zu alte Messwerte verworfen und die Neuesten hinzugenommen.
Alternativ, wenn du wirklich alles anzeigen willst, dann musst du von Anfang an die Anzahl der Messwerte im Speicher reduzieren, indem du z.B. nur jeden 10. oder 100. Messwert anzeigst.
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.
|
|
|
06.05.2012, 12:41
Beitrag #5
|
Tintin
LVF-Neueinsteiger
Beiträge: 5
Registriert seit: Mar 2012
6.1
2012
DE
|
RE: Problem bei Langzeitmessung
Hallo Jens,
vielen Dank für die Hinweise. Da stets der Verlauf der Messwerte seit Messbeginn von Interesse ist, hab ich's jetzt folgendermaßen gelöst:
In Schleife 2 habe ich die besagten Arrays, welche im Fortgang der Messung immer größer wurden, völlig weggelassen, d.h. diese Arrays und die zugehörigen Schieberegister entfernt. Sie dienten ja ohnehin nur der graphischen Anzeige der Messwerte. Stattdessen lade ich nun die Messwerte, welche ja kontinuierlich in eine .txt-Datei geschrieben werden, auf Knopfdruck in Arrays, um sie im xy-Graphen anzuzeigen. Außerdem habe ich eine Funktion integriert, die diese Arrays und damit den xy-Graphen auf Knopfdruck leert. Auf diese Weise kann ich den beanspruchten Speicherbedarf gering halten. Außerdem waren noch einige Queues vorhanden (s. Schleife 1 und 2), die ich nicht sauber konfiguriert bzw. geleert hatte und die deshalb immer größer wurden. Das hab ich jetzt auch noch geändert. Was darüber hinaus noch zu Peaks in der CPU-Auslastung geführt hat, war Microsoft Security Essentials. Nachdem ich LabView und die entsprechenden Dateien von der Prüfung ausgenommen habe, bleibt die CPU-Auslastung konstant gering.
Nochmal danke und viele Grüße
Tim
|
|
|
| |