Hallo zusammen,
ich hab gerade schon die Beiträge zur "CPU-Auslastung" gelesen und schon einige Sachen gefunden an die man sich halten kann, die ich sowieso von vorn herein beachtet hatte.
Jetzt hab ich meine Programmierung fast fertig und es sind mittlerweile über 50 sub_VIs, die ich in mein "Haupt_VI" eingebunden habe.
Leider komm ich mit der CPU-Leistung nicht mehr runter. Gibts vielleicht weitere möglichkeiten die CPU-Auslastung runter zu schrauben?
Was mir schon geglückt ist, wenn man Ereignisstrukturen verwendet, dass die CPU-Auslastung nur noch auf 10% läuft und das ist super, aber stattdessen muss ich mehrere While-Schleifen bauen und diese laufen ständig und in jeder dieser While-Schleifen ist mindestens ein VI das über die serielle Schnittstelle kommuniziert und dadurch irgendwann zur Fehlkommunikation kommt.
Wenn jemand sich meine VIs ansehen möchte und mir vorschläge oder verbesserungen machen kann - hier ist es, aber nicht erschrecken.
Danke für eure Mühe
Gruß
thomas
ich kann mir deine VIs jetzt nicht anschauen, aber generell musst du darauf achten, dass die while schleifen nicht unendlich schnell laufen. ein einfaches "warten" oder "bis zum vielfachen warten" im millisekunden-bereich reicht oft schon aus.
was dein timing in bezug auf die kommunikation angeht kann ich dir so auch nicht weiterhelfen. reihenfolgen müssen halt eingehalten werden, warten bis sich puffer geleert oder gefüllt haben usw.
mal wieder nix genaues von mir, aber vielleicht bringt dich der denkanstoß auch schon weiter.
Hi,
ich habs mal das auch schon ausprobiert, dass meine "Haupt-While-Schleife" immer mit einer 500ms-Verzögerung läuft, aber das bringt meine CPU-Auslastung nicht runter :(und ich hab schon hier einen 2,5GHz rechner stehen. Leider hat dieser nur 512MB RAM. Vielleicht bringt eine Erhöhung des RAMs etwas.
Danke für die anregung
Gruß
thomas
Hallo Thomas,
kennst Du den VI Profiler? Der hat mir schon oft bei solchen Problemen geholfen. [MenüToolsAdvancedProfile VIs]
Ich würde gerne mal einen Blick auf Deine VIs werfen, aber leider habe ich nur LabVIEW 7.0
Wenn du das für meine Version konvertierst, schau ich mir das mal an.
[MenüFileSave with OptionsSave for Previous x.x]
Für mich darf allerdings x.x maximal 7.0 sein
Gruß, Gunther
Hi Gunter,
danke für den Typ mit dem Profiler - probier ich sofort aus - das ist sehr cool.
Hab mal Versucht in LabVIEW 7.0 zu speichern - weiß nicht ob es funzt - probier mal. Hab das noch nie vorher gemacht.
Das ist jetzt die AKTUELLSTE VERSION meines PROGRAMMS, also wenn ,dann bitte diese version anschauen, nicht die vorige.
Danke für die Mühe
Gruß
thomas
Moin Thomas,
das Konvertieren hat gut funktioniert, ich konnte das Programm laufen lassen. Ich habe jetzt auf die Schnelle natürlich nicht alles überprüfen können, das "Progrämmchen" ist ja nicht mehr ganz trivial,
aber durch Einfügen einer
Wait (ms) Funktion in der
Notaus/Alarm reset Schleife konnte ich die CPU last auf unter 5% drosseln.
Bedenke bitte, dass LabVIEW im Prinzip alle Schleifen, die nicht in einander verschachtelt sind, parallel bearbeitet, somit reicht eine Schleife ohne
Wait um die Prozessorlast auf 100% zu erhöhen. Also immer alle Schleifen "ausbremsen" wenn volle Geschwindigkeit nicht benötigt wird.
Was mir noch "by the way" aufgefallen ist:
- die VISA Kommunikation wird nicht wieder geschlossen, also
VISA close fehlt möglicherweise.
- die Schleife oben wird nicht beendet, sondern durch
close Panel abgewürgt, ist vielleicht etwas sauberer sie über eine lokale
Beenden Variable zu schließen.
Ich wünsche Dir noch viel Spaß und Erfolg beim Optimieren.
Gruß, Gunther
Hi Gunter,
:DDanke vielmals - ich bin hin und weg - an diese Schleife hab ich garnicht gedacht - Danke - jetzt ist die Leistung runter - JUHU
Das mit dem trivial tut mir leid - stand ziemlich unter Zeitdruck, aber ich verbessere das zuletzt noch, natürlich
.
Das mit VISA kommt auch zuletzt, wenn alles andere steht.
ähm sorry vielleicht für die dumme Frage, aber was meinst du mit "die Schleife oben wird nicht beendet, sondern durch close Panel abgewürgt, ist vielleicht etwas sauberer sie über eine lokale
Beenden Variable zu schließen." Meinst du die Schleife mit einem eigenschaftsknoten oder ähnlichem zu Beenden oder wie?
Gruß
thomas
Hallo Thomas,
nein, so war das natürlich nicht gemeint. Mit "nicht trivial" meinte ich, dass ich das komplette Programm nicht durch einmal kurz draufschauen verstanden habe.
Freut mich auf jeden Fall, dass ich Dir helfen konnte.
Die Schleife oben ist die
Notaus/Alarm reset While Loop, die immer läuft, da an ihre Abbruchbedingung eine Konstante angeschlossen ist. Wenn die Ausführung der Hauptschleife durch drücken von
Beenden verlassen wird, dann würde das Programm
Steuerungssoftware.vi weiterlaufen, da die
Notaus/Alarm reset Schleife weiterläuft. Ihre Abbruchbedingung wird nie true. Ich vermute: momentan wird das gesamte Programm durch den
Eigenschaftsknoten "Panel open"=false beendet, die Schleife läuft also rein theoretisch im Hintergrund weiter.
Nix für ungut, es läuft ja auch so, aber eine
lokale Variable ist ja nicht die Pest.
Gruß, Gunther