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 

Datenerfassung - Performance Probleme



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!

24.04.2010, 21:32
Beitrag #1

mmh87 Offline
LVF-Grünschnabel
*


Beiträge: 16
Registriert seit: Jun 2008

8.5.1
2008
en

87***
Deutschland
Datenerfassung - Performance Probleme
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>    
    </blockquote>

War der Tag nicht dein Freund, dann war er dein Lehrer!
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
Anzeige
25.04.2010, 09:04 (Dieser Beitrag wurde zuletzt bearbeitet: 25.04.2010 09:04 von IchSelbst.)
Beitrag #2

IchSelbst Offline
LVF-Guru
*****


Beiträge: 3.697
Registriert seit: Feb 2005

11, 14, 15, 17, 18
-
DE

97437
Deutschland
Datenerfassung - Performance Probleme
' 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.

Jeder, der zur wahren Erkenntnis hindurchdringen will, muss den Berg Schwierigkeit alleine erklimmen (Helen Keller).
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
25.04.2010, 12:47
Beitrag #3

mmh87 Offline
LVF-Grünschnabel
*


Beiträge: 16
Registriert seit: Jun 2008

8.5.1
2008
en

87***
Deutschland
Datenerfassung - Performance Probleme
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

War der Tag nicht dein Freund, dann war er dein Lehrer!
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
25.04.2010, 13:29
Beitrag #4

IchSelbst Offline
LVF-Guru
*****


Beiträge: 3.697
Registriert seit: Feb 2005

11, 14, 15, 17, 18
-
DE

97437
Deutschland
Datenerfassung - Performance Probleme
' 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.

Jeder, der zur wahren Erkenntnis hindurchdringen will, muss den Berg Schwierigkeit alleine erklimmen (Helen Keller).
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
25.04.2010, 13:31
Beitrag #5

mmh87 Offline
LVF-Grünschnabel
*


Beiträge: 16
Registriert seit: Jun 2008

8.5.1
2008
en

87***
Deutschland
Datenerfassung - Performance Probleme
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>
    </blockquote>

War der Tag nicht dein Freund, dann war er dein Lehrer!
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
25.04.2010, 13:35
Beitrag #6

IchSelbst Offline
LVF-Guru
*****


Beiträge: 3.697
Registriert seit: Feb 2005

11, 14, 15, 17, 18
-
DE

97437
Deutschland
Datenerfassung - Performance Probleme
Welche Baudrate hast du denn eingestellt? Sollte mindestens 38400 sein.

Jeder, der zur wahren Erkenntnis hindurchdringen will, muss den Berg Schwierigkeit alleine erklimmen (Helen Keller).
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
Anzeige
25.04.2010, 15:11
Beitrag #7

mmh87 Offline
LVF-Grünschnabel
*


Beiträge: 16
Registriert seit: Jun 2008

8.5.1
2008
en

87***
Deutschland
Datenerfassung - Performance Probleme
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.


   

LabVIEW version 8.5


Sonstige .vi  Operator_vi.vi (Größe: 64,6 KB / Downloads: 212)



Sonstige .vi  sub_vi_cases.vi (Größe: 26,5 KB / Downloads: 216)




Nachtrag: die gekürzte version braucht fast keine ressourcen

War der Tag nicht dein Freund, dann war er dein Lehrer!
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
25.04.2010, 18:31
Beitrag #8

jg Offline
CLA & CLED
LVF-Team

Beiträge: 15.864
Registriert seit: Jun 2005

20xx / 8.x
1999
EN

Franken...
Deutschland
Datenerfassung - Performance Probleme
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

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
25.04.2010, 18:48 (Dieser Beitrag wurde zuletzt bearbeitet: 25.04.2010 19:23 von jg.)
Beitrag #9

IchSelbst Offline
LVF-Guru
*****


Beiträge: 3.697
Registriert seit: Feb 2005

11, 14, 15, 17, 18
-
DE

97437
Deutschland
Datenerfassung - Performance Probleme
' 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


Angehängte Datei(en)
Sonstige .vi  Operator_vi.vi (Größe: 67,75 KB / Downloads: 174)

Jeder, der zur wahren Erkenntnis hindurchdringen will, muss den Berg Schwierigkeit alleine erklimmen (Helen Keller).
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
25.04.2010, 19:22
Beitrag #10

mmh87 Offline
LVF-Grünschnabel
*


Beiträge: 16
Registriert seit: Jun 2008

8.5.1
2008
en

87***
Deutschland
Datenerfassung - Performance Probleme
@ 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.

War der Tag nicht dein Freund, dann war er dein Lehrer!
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
  Probleme mit Datenerfassung über serielle Schnittstelle (RS232) Flo884 6 9.946 14.04.2009 09:42
Letzter Beitrag: IchSelbst
  performance problem aoul3000 1 3.519 01.02.2009 12:45
Letzter Beitrag: Y-P

Gehe zu: