LabVIEWForum.de
Datenerfassung - Performance Probleme - Druckversion

+- LabVIEWForum.de (https://www.labviewforum.de)
+-- Forum: LabVIEW (/Forum-LabVIEW)
+--- Forum: LabVIEW Allgemein (/Forum-LabVIEW-Allgemein)
+---- Forum: Instrument IO & VISA (/Forum-Instrument-IO-VISA)
+---- Thema: Datenerfassung - Performance Probleme (/Thread-Datenerfassung-Performance-Probleme)

Seiten: 1 2


Datenerfassung - Performance Probleme - mmh87 - 24.04.2010 21:32

Hallo zusammen,

ich hab mal wieder ein ziemlich großes problem.
Mein programm erfasst daten über einen com port (bluetooth) von einem beschleunigungssensor. Die Sampling Frequenz sollte 50 Hz sein (20ms delay) - und genau da ist das problem!!
Ich komm nur auf durchschnittlich 35 Hz.
Ich bin überzeugt, dass dieses an meiner PC auslastung liegt. Beim starten des Vi's geht meine Computerauslastung immer in die höhe (ca. 90% auf einem von zwei cores (2x2.2Ghz)).

Im Forum hab ich schon einiges über Performance gelesen und auch ziemlich viel zusammen gekürzt. Desweiteren hab ich auch das Performance tool mal drüber laufen lassen. Hab für diesen zweck extra noch verschiedene SubVi's gebildet, um die zeiten zu bekommen - ohne erfolg.
Das einzige was mich verwundert hat, war dass die "Draw" zeit ziemlich hoch war (ist das die average oder alles zusammen?)
Ich hab keine ahnung mehr, was ich noch versuchen kann - wenn von euch niemand ne idee hat, muss es an der hardware liegen!

Ich hoffe jemand von euch kann mir weiterhelfen!
Vielen Dank im voraus.
magnus

Ps.: hab mal ein paar screenshots angehängt, dass ihr euch ein bild machen könnt.

<blockquote>[attachment=25976]
[attachment=25977]</blockquote>


Datenerfassung - Performance Probleme - IchSelbst - 25.04.2010 09:04

' schrieb:Beim starten des Vi's geht meine Computerauslastung immer in die höhe (ca. 90% auf einem von zwei cores (2x2.2Ghz)).
90% sind mindestens 70% zuviel.
Kommen die 90% sofort oder dauert es eine Weile, sagen wir mal 30 Sekunden, bis die 90% erreicht sind?

Zitat:muss es an der hardware liegen!
Nie und nimmer. Wink Naja, vielleicht 1% Wahrscheinlichkeit.

Was sich besonders in schnellen While-Schleifen immer negativ auswirkt, ist das Element "Erstelle Array". Dieses Verfahren, Daten in einem Array zu speichern, belastet den Speichermanager extrem. Mit diesem Element erreicht die Prozessorauslastung sehr schnell höchste Prozentzahlen. Besser ist es, das Array vor der While-Schleife mit einer maximalen Anzahl an Elementen vorzubesetzen und in der While-Schleife dann "Ersetze Teilarray" zu machen. Das würde auch hier funktionieren.

In dem einen SubVI machst du mehrere Berechnungen. Möglicherweise werden die Berechnungen schneller, wenn du sie von einem Formelknoten berechnen lässt. Ob hier ein relevanter Zeitgewinn entsteht, weiß ich allerdings nicht.

Weiterhin kannst du folgendes probieren: Mach zwei While-Schleifen. Eine, die nur alleine die Serielle Schnittstelle abfragt. Und eine weitere While-Schleife, die die Daten im Schieberegister speichert, die Anzeige in den Graphen macht und das Speichern im File übernimmt. Zwischen den beiden While-Schleifen überträgst du die Seriellen Daten mittels Queue. Die Schleife mit dem Seriellen Lesen wird dann schnell genug sein. Die Queue dient als Zwischenpuffer. Die andere Schleife darf langsamer laufen als Lese-Schleife. Voraussetzung ist, dass die langsamere Schleife die Queue immer ganz ausliest, nicht elementweise.


Datenerfassung - Performance Probleme - mmh87 - 25.04.2010 12:47

Hallo IchSelbst,

ich weiß was du meinst, aber ich hab keine gute lösung für die queue.

Was hast du dir da gedacht - ich muss ja quasi in der ersten schleife immer ein array bilden oder?
Hab dabei an eine definierte for-schleife in der while-schleife gedacht oder würdest du das queue - Vi bevorzugen?

Komm da aber nicht ganz klar - muss man dann in der zweiten schleife nur mit arrays arbeiten oder hab ich da was falsch verstanden ?

danke schon mal

gruß magnus


Datenerfassung - Performance Probleme - IchSelbst - 25.04.2010 13:29

' schrieb:ich muss ja quasi in der ersten schleife immer ein array bilden oder?
Nein, musst du nicht.
An der Stelle, an der sich jetzt der Konverter "String nach Bytearray" befindet, "schneidest" du das bisheriege Programm in zwei Teile. In der ersten Schleife befindet sich das VISA-Read, dessen Ausgang, also der String, per Queue an die zweite Schleife gesendet wird.
Die zweite Schleife "beginnt" mit dem Auslesen aller Strings aus der Queue. Die Strings werden als Array of String gelesen. Dieses Array wird nun in einer FOR-Schleife weiter verarbeitet. Die FOR-Schleife liefert dann ein 2D-Array, das an das Schieberegister angehängt (beachte: im Array ersetzt) wird.

Bau dein BD um, so wie du denkst, dass ich es meine, und poste Bild und VI.


Datenerfassung - Performance Probleme - mmh87 - 25.04.2010 13:31

kleine ergänzung:

hab grad mein programm auf das minimalste zusammen gekürzt. Das heißt nur noch lesen und dann gleich die daten auf einem chart darstellen. lese mit 20ms delay in einer for schleife, um nur alle 200ms das ergebnis darstellen zu müssen.

-> hab dann wieder die zeit gestoppt (2min um ein gutes ergebnis zu bekommen) und durch die erfassten werte geteilt -> ergebnis wieder um die 35 Hz (cpu auslastung ist auch noch zu hoch!)

bin mit meim latein am ende - an den build arrays kanns ja nicht mehr liegen und sonst ist ja nur noch das Visa da - hab ich da was falsch gemacht!?!?

hat vllt noch jemand ne gute idee - häng auch noch den aktuellen screenshot an

<blockquote>
[attachment=25978]</blockquote>


Datenerfassung - Performance Probleme - IchSelbst - 25.04.2010 13:35

Welche Baudrate hast du denn eingestellt? Sollte mindestens 38400 sein.


Datenerfassung - Performance Probleme - mmh87 - 25.04.2010 15:11

also hier wär mal meine erste lösung - ist aber noch ein wenig unlogisch, weil von der while schleife ja keine daten kommen.

ich hab noch nicht ganz verstanden, wie du das mit der queue meinst.

wär super wenns dir mal anschauen könntest.


[attachment=25979]

LabVIEW version 8.5

[attachment=25980]

[attachment=25981]



Nachtrag: die gekürzte version braucht fast keine ressourcen


Datenerfassung - Performance Probleme - jg - 25.04.2010 18:31

Offtopic
@mmh87: Bitte LVF-Regeln lesen (ganz bis zum Schluß) und beachten!

Eine Tastatur hat eine auch eine Shift-Taste, und die sollte man beim Schreiben von Beiträgen hier im LVF auch einsetzen. Dann sind die Beiträge nämlich besser lesbar.Smile

Gruß, Jens


Datenerfassung - Performance Probleme - IchSelbst - 25.04.2010 18:48

' schrieb:ich hab noch nicht ganz verstanden, wie du das mit der queue meinst.
Du musst dir nochmals die Konzepte "Datenfluss" und "Sequenzierung", zwei grundlegende Konzepte von LabVIEW, verinnerlichen.

Zitat:die gekürzte version braucht fast keine ressourcen
Warum wohl? Weil nur das VISA-Lesen gemacht wird. Die rechte While-Schleife wird praktisch nur ein einziges Mal ausgeführt. Die rechte Schleife wird erst dann ausgeführt, wenn die linke beendet wurde: Beide Schleifen sind nämlich durch einen Datenfluss sequenziert. Das, was du als Prozessorlast siehst, ist lediglich die linke While-Schleife.

Ich hab dir mal angehängt, wie ich das mit der Queue und dem "In Array ersetzen" gemeint habe. Was ich wieder nicht weis ist, ob der erste Indexeingang der richtige ist oder der zweite.

Lv85_img


Datenerfassung - Performance Probleme - mmh87 - 25.04.2010 19:22

@ IchSelbst: Herzlichen Dank für deinen super Support. Auf die Queue wäre ich nie von selbst drauf gekommen - hab noch nie damit gearbeitet.

Und das Beste ist: CPU Auslastung schaut nach den ersten Tests richtig gut aus Smile

Werd mich mit den zwei Konzepten auf jeden Fall noch auseinandersetzen. Ist glaub sehr wichtig für zukünftige Programme.


@ Jens: Danke für die Anmerkung. Werde ich in Zukunft auf jeden Fall beachten.