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 

Echtzeitmessung wird langsam



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!

06.09.2007, 10:28 (Dieser Beitrag wurde zuletzt bearbeitet: 22.12.2007 21:33 von jg.)
Beitrag #1

Katagia
Unregistered


 







Echtzeitmessung wird langsam
Hallo


Ich habe ein kleines LabVIEWprogramm geschrieben, um Messdaten, die über Uart erfasst werden, darzustellen.
Das Programm funktioniert, allerdings ist die Anzeige nach ca. 30s derart langsam, dass die Darstellung ruckelig
wird und nicht mehr hinterher kommt.

Ich denke ein Grund ist, dass ich das Array transponieren muss, um die Messwerte in Grpahen darzustellen.

Hat einer von euch eine Idee, was ich noch optimieren kann, damit die Darstellung flüssig ist?
5-10min würden mehr als ausreichen.

Vielen Dank,

(VI LV 8.2)


Angehängte Datei(en)
Sonstige .vi  Signal_Lesen_2_8.vi (Größe: 132,17 KB / Downloads: 299)
Diese Nachricht in einer Antwort zitieren to top
06.09.2007, 10:40 (Dieser Beitrag wurde zuletzt bearbeitet: 06.09.2007 10:43 von oenk.)
Beitrag #2

oenk Offline
LVF-Stammgast
***


Beiträge: 361
Registriert seit: May 2005

>= 7.1
2004
EN

3018
Schweiz
Echtzeitmessung wird langsam
Schau dir mal hier http://www.LabVIEWforum.de/index.php?showtopic=6968 Beitrag 2 von Lucki an.
Nach schnellem drüberschauen über deinen Code wird das etwas helfen....

Dann würde ich mir noch unter Tools -> Profile -> Performance and Memory anschauen
Dort siehst du, ob sich der Speicher und die ProcessZeit über die Zeit verändert und grösser wird.
Sollte das der Fall sein hast du uU irgendwelche Referenzen geöffnet und nicht wieder geschlossen

In theory, there is no difference between theory and practice; In practice, there is.

Chuck Reid
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
06.09.2007, 10:57
Beitrag #3

Katagia
Unregistered


 







Echtzeitmessung wird langsam
Danke für den Tip.
Er spricht "lokale Variablen" und Eigenschaftsknoten an. Lokale Variablen verwende ich nicht.
Ich denke um die wenigen Eigenschaftknoten, die ich verwende, werde ich nicht drum rum kommen.
Ich wüsste nicht, wie ich sonst herausfinden soll, ob Daten im Empfangspuffer liegen.
Ich verwende für mein Speicherarray keine lokalen Variablen. Das Array ist als Schieberegister realisiert.

Lucki schrieb, dass in den NI Beispielen keine Schieberegister verwendet werden. Meinst du es ist besser,
das Speicherarray als globale Variable statt als Schieberegister zu realisieren?
Diese Nachricht in einer Antwort zitieren to top
06.09.2007, 11:04 (Dieser Beitrag wurde zuletzt bearbeitet: 06.09.2007 11:13 von Achim.)
Beitrag #4

Achim Offline
*****
*****


Beiträge: 4.222
Registriert seit: Nov 2005

20xx
2000
EN

978xx
Deutschland
Echtzeitmessung wird langsam
Evtl. hilft's was, wenn du "VISA Open" & "VISA Configure" nicht in die While-Schleife packst, sondern davor! Das ständige öffnen und schließen dürfte ziemlich viel Prozessorzeit fressen...dass sollte man generell nicht in ner Schleife machen!


EDIT: Sehe grade...du machst ja ständig ne neue Session auf, schließt die alte aber erst bei Stop...zieh die Session doch auch mal über ein Schieberegister, und schließ dann auch nur diese eine!

EDIT: Nochmal ich...Nur weil der PropertyNode mit XScale Maximum/Minimum links von der Schleife platziert ist, heißt das nicht zwangsläufig, dass er vor der Schleife abgearbeitet wird! Das wäre nur dann 100%ig sicher, wenn du den Fehlerausgang des Nodes am Schleifenrand anschließt! Ist aber OFF-TOPIC...


A.

"Is there some mightier sage, of whom we have yet to learn?"

"Opportunity is missed by most people because it is dressed in overalls and looks like work." (Thomas Edison)
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
06.09.2007, 11:14
Beitrag #5

oenk Offline
LVF-Stammgast
***


Beiträge: 361
Registriert seit: May 2005

>= 7.1
2004
EN

3018
Schweiz
Echtzeitmessung wird langsam
Der Punkt von Achim ist mal sehr gut...
So genau hab ich mir den Code nicht angeschaut...

Du hast aber doch einige Eigenschaftskonten enthalten (Pulswelle, Schnittstelle)...
Brauchst du die wirklich?
Desweiteren hast du irgendwelche Variablen genommen und nicht die, die "verlangt" werden.
Bei dir geschieht an ziemlich vielen Orten ein typecast (dort, wo die roten Punkte sind). Auch das frisst Ressource (sicher nicht soviel, dass das Programm langsamer wird, sollte man dennoch vermeiden)

Ausserdem machst du "insert into array" -> das frisst wahnsinnig viel Ressource. Besser ist "replace" zu verwenden, da so kein neuer Speicher alloziert werden muss. Da musst du aber die groesse des Arrays schon kennen

so das wars schon wieder auf die schnelle von mir, das Essen ruft und der Magen knurrt ;-)

Christian

In theory, there is no difference between theory and practice; In practice, there is.

Chuck Reid
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
06.09.2007, 11:27
Beitrag #6

Achim Offline
*****
*****


Beiträge: 4.222
Registriert seit: Nov 2005

20xx
2000
EN

978xx
Deutschland
Echtzeitmessung wird langsam
<!--quoteo(post=35975:date=06.09.2007 , 12:14:31:name=<<oenk>>)--><div class='quotetop'>ZITAT(<<oenk>> @ 06.09.2007 , 12:14:31) [url=index.php?act=findpost&pid=35975][/url]</div><div class='quotemain'><!--quotec-->Bei dir geschieht an ziemlich vielen Orten ein typecast (dort, wo die roten Punkte sind). Auch das frisst Ressource (sicher nicht soviel, dass das Programm langsamer wird, sollte man dennoch vermeiden)[/quote]

Genau...wie Lucki auch immer predigt: Warum nicht einfach nen Rechtsklick machen und "Create Constant/Control"...dass ist dann immer der richtige Datentyp!

Und noch ein Rat: Mach dein Blockdiagramm mal kleiner...nicht breiter und höher als meinetwegen 1280x1024...ich verlier regelmäßig die Lust den Code anzuschauen, wenn ich mich erst mal mit nem Kompass orientieren muss! Du kannst viel Platz sparen, in dem du SubVI's machst, nicht sooooo großzügig Platz zwischen den Funktionen lässt und (ganz wichtig!) die Controls/Indicators nicht als Icon's anzeigen lässt (rechstlick im BD auf das Control, deaktiviern von "show as Icon")

Gruss
Achim

"Is there some mightier sage, of whom we have yet to learn?"

"Opportunity is missed by most people because it is dressed in overalls and looks like work." (Thomas Edison)
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
06.09.2007, 11:44
Beitrag #7

Katagia
Unregistered


 







Echtzeitmessung wird langsam
' schrieb:Evtl. hilft's was, wenn du "VISA Open" & "VISA Configure" nicht in die While-Schleife packst, sondern davor! Das ständige öffnen und schließen dürfte ziemlich viel Prozessorzeit fressen...dass sollte man generell nicht in ner Schleife machen!

Die Schnittstelle wird doch gar nicht ständig geöffnet und geschlossen. Wenn der Start-Knopf gedrückt wird, wird Visa Open ausgeführt.
Sonst wird Visa Open nie ausgeführt. Zumindest ist es so gedacht.

Zitat:EDIT: Sehe grade...du machst ja ständig ne neue Session auf, schließt die alte aber erst bei Stop...zieh die Session doch auch mal über ein Schieberegister, und schließ dann auch nur diese eine!
Wieso mache ich ständig eine neue Session auf?

Der Code ist eigentlich so gedacht, dass bei "Start" die Schnittstelle geöffnet und bei "Stop" geschlossen wird. Den Zustand der Schnittstelle speichere ich in einem Schieberegister. Nur wenn die Schnittstelle geöffnet wurde, werden Messdaten in dem Array
gespeichert. Zumindest so ist es gedacht. Macht der Code etwas anderes?


Die roten Punkte werde ich wegmachen und den Code in Sub-VIs packen.


Mit den Eigenchaftsknoten "Schnittstelle" will ich das Bedienelement deaktivieren, damit während einer Übertragung die Schnittstelle nicht geändert werden kann. Die Eigenschaftsknoten werden aber nur beim Öffnen der Schnittstelle verwendet.
Reicht es schon aus, dass die Knoten da sind, obwohl sie in der if-Schleife gar nicht ausgeführt werden?
Gleiches gilt für die Eigenschaftsknoten "Pulswelle". Ich will damit nur den Anzeigebreich der X-Achse verschieben. Der Knoten
wird nur alle 5sek "beschrieben".
Diese Nachricht in einer Antwort zitieren to top
07.09.2007, 06:25
Beitrag #8

Achim Offline
*****
*****


Beiträge: 4.222
Registriert seit: Nov 2005

20xx
2000
EN

978xx
Deutschland
Echtzeitmessung wird langsam
' schrieb:Die Schnittstelle wird doch gar nicht ständig geöffnet und geschlossen. Wenn der Start-Knopf gedrückt wird, wird Visa Open ausgeführt.
Sonst wird Visa Open nie ausgeführt. Zumindest ist es so gedacht.
Wieso mache ich ständig eine neue Session auf?

Ok, vergiss (fast) alles, was ich gesagt habe...hab nicht vernünftig drauf geschaut...sorry! Du hast recht, ich habs grade mal probiert, es ist so wie du sagst...mir fällt dann allerdings auch nix mehr ein...

Evtl. bringts was, wenn du "Insert into Array" mit "Build Array" ersetzt...oder du kennst die Größe und arbeitest mit "Replace Array Subset"...kennst du sie? Du initialisierst das 2D-Array ja schon recht groß...

Zum Debuggen könntest du dir mal ein paar Timer-VI's reinbauen und den ganzen Code mal übergangsweiße in Sequenzen einteilen...dann kannst du mal sehen was Zeit frisst. Oder du guckst dir unter Tools >> Profile >> Performance & Memory mal deine Applikation an...ich glaube, das geht aber nur bei Full- und/oder Pro-Versionen!

Gruss
Achim

"Is there some mightier sage, of whom we have yet to learn?"

"Opportunity is missed by most people because it is dressed in overalls and looks like work." (Thomas Edison)
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
09.09.2007, 12:02
Beitrag #9

Katagia
Unregistered


 







Echtzeitmessung wird langsam
Danke für eure Hilfe, ich hab es hinbekommen!


Zum einen hab ich die roten Punkte alle entfernt. Danach habe ich den Code etwas überarbeitet und alles in
SubVIs gepackt. Das hat allerdings nicht so viel gebracht.

Hauptproblem war das dynamische Array. Die neuen Messwerte werden dynamisch an das Array angehängt.
Ich habe den Code geändert und erzeuge nun gleich zu Beginn ein Array für 10min Messwerte.

Jetzt habe ich nur noch ein Problem: LabVIEW lastet die CPU zu 100% aus. Da muss ich noch ein wenig suchen.
Danke für den Tip mit dem Debuggen Achim. Da kann ich mal schaun, wo die CPU Zeit verbraucht wird.


Bis dann, Tilo
Diese Nachricht in einer Antwort zitieren to top
10.09.2007, 05:35
Beitrag #10

Achim Offline
*****
*****


Beiträge: 4.222
Registriert seit: Nov 2005

20xx
2000
EN

978xx
Deutschland
Echtzeitmessung wird langsam
' schrieb:Danke für den Tip mit dem Debuggen Achim. Da kann ich mal schaun, wo die CPU Zeit verbraucht wird.

Der kam aber auch schon von <<oenk>>...

"Is there some mightier sage, of whom we have yet to learn?"

"Opportunity is missed by most people because it is dressed in overalls and looks like work." (Thomas Edison)
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
  Programm wird Langsam Kernphysik_Jürgen 11 7.324 29.11.2016 14:33
Letzter Beitrag: GerdW
  VI wird nicht beendet wenn Event case schleife benutzt wird frischling 15 11.327 03.05.2012 08:24
Letzter Beitrag: GerdW
  Labview wird langsam Krischan 1 4.577 15.07.2010 11:27
Letzter Beitrag: abrissbirne
  Anwendung wird nach ca. 130 Schleifenduchläufen langsam amin 8 5.814 16.03.2009 15:29
Letzter Beitrag: amin

Gehe zu: