LabVIEWForum.de - Performance in LabVIEW!?

LabVIEWForum.de

Normale Version: Performance in LabVIEW!?
Du siehst gerade eine vereinfachte Darstellung unserer Inhalte. Normale Ansicht mit richtiger Formatierung.
Ich habe ein Problem:

und zwar habe ich 3sequentielle Szenen Parallel laufen.

1) bekommt mit 500khz Daten rein
2) schickt daten über SPI (zeitunkritisch)
3) polt User Buttons

Mein Problem ist Punkt 2... LabVIEW kommt mit der Datenauswertung nicht hinterher!

Das pollen der User Buttons habe ich schon mit Wait etwas gebremst.
Jetzt möchte ich Szene 1 Optimieren (denn ist diese weg funktioniert auch 2).

Im Moment sende ich immer Daten in Szene1 obwohl ich eigentlich nur Daten haben will wenn der Send Button gedrückt wurde!

Wie könnte ich es anstellen, dass in der anderen Zeit nix gemacht wird???

Verbrät LabVIEW in einer Statmachine genauso Zeit wenn in Ihr gar nix gemacht wird oder wie läuft das?
sonst versuche ich das über den Sendbutton so zu machen, dass nur was geschickt wird wenn auch gedrückt wird!


Komplettes Porjekt im Anhang!

Danke!
Hi,

du sagst die SPI loop sei zeitunkritisch, hast aber nur eine Wartezeit von 1ms verbaut?
grob gesagt eine While schleife ohne Wartezeit frisst schonmal sämtliche resourcen, auch wenn sie nur Buttons abfragt. Besser:Event Struktur, hier wird nichts gepollt.

Zudem ist mir aufgefallen dass du sehr viele globale Variablen, auch in 1 verwendest, die sind auch vergleichsweise langsam. Ich hab aber nur einen kurzen blick auf die Sache geworfen, mir scheint als arbeitest du mit einem beamerWink

Gruss
Uli
ja du hast recht, habe in die SPI Szene noch ein Wait eingebaut und nun läuft es!

Allerdings nur nach einem Neustart des Rechners... ich hab schon öffter festgestellt, dass wenn der Rechner Länger läuft und man andere Programme gestartet hat wird alles extrem langsam und mit Echtzeit wird das dann nix mehr!

Ich habe einen PIII Compaq
<div align="left">Hallo, Christian,

stimme Uli zu, du verwendest wirklich sehr viele globale Variablen. Schau doch mal, ob du das reduzieren kannst. Globale Variablen (vor allem wenn sie schreibend und lesend wie bei dir) bergen immer die Gefahr von "Race Conditions". Auch auf eine ganze Reihe deiner lokalen Variablen kannst du bei entsprechneder "Verdrahtung" verzichten. Lesen aus lokalen Variablen erzeugt immer Duplikate im Speicher.

Jetzt noch ein Analyse-Tip zu deinem Problem, dass das Programm immer langsamer wird: Das hängt häufig mit dem Hauptspeicher des Computers zusammen. Beobachte doch mal die Speicherauslastung im Task-Manager von Windows.

LabVIEW selbst ist ja schon ein ziemlicher Speicherfresser, und man neigt gerne dazu, irgendwo im Programm dynamisch Daten in Arrays o.ä. anzusammeln und schon steigt der Speicherbedarf exorbitant.


MfG, Jens</div>
Hallo zusammen,

habe auch das Problem dass mein LV-Programm (Version 8.0) mit der Zeit immer langsamer wird.

Frage zu den lokalen Variablen, von denen ich bis jetzt auch recht viele verwende (...der Übersichtlichkeit halber und weil's so praktisch ist...Blush)
Werden bei jedem Aufruf neue Duplikate erzeugt? Wenn ja: Lässt sich das irgendwie verhindern?

Zu Arrays: Wie kann ich sicherstellen, dass sich Daten in einem Array nicht "anhäufen", sprich, dass der Speicherplatz nach Beendigung eines VIs sofort wieder freigegeben wird?

Was gibt es sonst noch für Ursachen, dass sich Daten ungewollt "anhäufen" und den Speicher belegen?

Besten Dank schon mal.

Gruß Patrick.
Hallo, mein Problem hat sich folgendermaßen gelöst:

Wollte aus Versehen in einem VI zur Datenerfassung die Tasks mit "Wait until done" löschen.

Hab erst jetzt gecheckt, dass dies die Tasks nicht löscht, sondern nur anhält.

Deshalb wurden bei jedem Aufruf neue Tasks erzeugt, was schließlich zum Speicherüberlauf geführt hat.

Mit "DAQmx Clear Task" läuft alles glatt. Lol

Mit dem Tool "Profile Performance and Memory" ließ sich der Speicherüberlauf übrigens nicht lokalisieren.


Gruß Patrick.
Referenz-URLs