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!
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.
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.
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.
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
Wer nicht nur an der Oberfläche kratzt, bohrt hin und wieder eine Bauschaumdose an!
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
Wer nicht nur an der Oberfläche kratzt, bohrt hin und wieder eine Bauschaumdose an!
: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?
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
Wer nicht nur an der Oberfläche kratzt, bohrt hin und wieder eine Bauschaumdose an!