LabVIEWForum.de
CPU-Auslastung bleibt bei 50% (Sub-Vi) - Druckversion

+- LabVIEWForum.de (https://www.labviewforum.de)
+-- Forum: LabVIEW (/Forum-LabVIEW)
+--- Forum: LabVIEW Allgemein (/Forum-LabVIEW-Allgemein)
+--- Thema: CPU-Auslastung bleibt bei 50% (Sub-Vi) (/Thread-CPU-Auslastung-bleibt-bei-50-Sub-Vi)



CPU-Auslastung bleibt bei 50% (Sub-Vi) - Niko1912 - 11.10.2018 13:41

Guten Tag,

mir ist ein Problem gerade aufgefallen welches ich mir nicht erklären kann.

Ich habe zwei Loops parallel am laufen, eine generiert Daten und die andere Loop verwaltet das Laufzeitmenü.

Der Fehler liegt anscheinend in der Menü-Loop. Hier wird ein Sub-Vi aufgerufen in dem Einstellungen dargestellt werden.

Dieses erfolgt in einer weiteren Schleife, die dann zur Laufzeit gestartet wird und wieder beendet werden soll wenn man alles gesehen hat.
Das beenden der Schleife mache ich über die Vi-Referenz -> Frontpanel-Status.
Beim schließen des Frontpanels soll die Loop beendet werden.

Dies scheint nicht ganz zu funktionieren, obwohl es bei anderen Sub-Vi´s super klappt.
Die CPU-Auslastung ist beim einstieg in die Loop bei 5%, nach dem schließen des FP ist sie auf 50% und bleibt da dann auch. Wenn ich das Programm beende bleibt die Auslastung bei 50%.

Öffne ich das Sub-Vi manuell, nach beenden des Programms, öffnet sich das Vi und schließt sich selber im gleichen moment. Dannach ist die Auslastung wieder bei 0%.

Ich habe die Funktion zum beenden als .jpg angehängt.

Hoffe mir kann geholfen werden. Blush
[attachment=59502]

Nachtrag: In dem Vi werden sonst nur globale Variablen ausgelesen.


RE: CPU-Auslastung bleibt bei 50% (Sub-Vi) - GerdW - 11.10.2018 14:15

Hallo Niko,

herzlich willkommen im Forum!

Zitat:Ich habe zwei Loops parallel am laufen, eine generiert Daten und die andere Loop verwaltet das Laufzeitmenü.
Der Fehler liegt anscheinend in der Menü-Loop. Hier wird ein Sub-Vi aufgerufen in dem Einstellungen dargestellt werden.
Und nichts davon zeigst du uns…

Zitat:Beim schließen des Frontpanels soll die Loop beendet werden.
Warum musst du dazu andauernd eine VI-Referenz öffnen?
Warum testet du auf "Invalid" - und nicht auf "Closed" oder "Hidden"?

Außerdem gibt es bessere Wege, eine Schleife zu beenden, als nur auf den Status des FP zu achten…

Zitat:Die CPU-Auslastung ist beim einstieg in die Loop bei 5%, nach dem schließen des FP ist sie auf 50% und bleibt da dann auch.
Du hast ein DualCore-System? Da ist dann eben ein CPU-Core voll beschäftigt!
Evtl. eine Schleife ohne Wartezeit?

Zitat:Ich habe die Funktion zum beenden als .jpg angehängt.
Mal ein Vergleich: du gehst zur Autowerkstatt und sagst: "Ich habe hier ein Foto von meinem Auto. Können Sie es reparieren?"
Wenn du Hilfe haben willst, solltest du VIs (oder Snippets) anhängen!


RE: CPU-Auslastung bleibt bei 50% (Sub-Vi) - Niko1912 - 11.10.2018 15:40

Guten Tag GerdW,

danke für die schnelle Antwort.

Zitat:Und nichts davon zeigst du uns…

Da dies meine Bachelor-Arbeit ist möchte ich die VIs nicht Öffentlich machen, ich hoffe Sie können das akzeptieren.
Im Grunde habe ich das Problem ja lokalisiert, in der Menü-Loop läuft eine Statemachine die im Zustand "Leerlauf" auf ein Ereignis wartet. Also in meinem Problemfall "aktuelle Einstellungen", darauf wechselt der Zustand in "aktuelle Einstellungen" und öffnet das Sub-Vi, indem die Schleife läuft und die Einstellungen anzeigt. Das Sub-VI hänge ich gerne an.



Zitat:Warum musst du dazu andauernd eine VI-Referenz öffnen?
Warum testet du auf "Invalid" - und nicht auf "Closed" oder "Hidden"?

Danke für den Tipp mit der Referenz, dies war mir nicht aufgefallen. Gerne frage ich auch auf "Closed" ab, ich hab es auf "Invalid" gelassen da es in einem anderen Sub-Vi funktionierte.


Zitat:Außerdem gibt es bessere Wege, eine Schleife zu beenden, als nur auf den Status des FP zu achten…

Könnten Sie mir diese Wege nennen ? Ich hab in dem Vi sonst keine Buttons, nur das Windows-Schießen und darüber wollte ich das Vi auch beenden.

Zitat:Du hast ein DualCore-System? Da ist dann eben ein CPU-Core voll beschäftigt!
Evtl. eine Schleife ohne Wartezeit?

ja, dual Core mit Win 7 glaube ich (Hochschulrechner). Ja ein Kern ist voll ausgelastet, die Schleife im Vi hat 50ms warten drin. Funktioniert bei Ausführung ja auch super, nur beim rausgehen passiert irgendwas. Es scheint mir so als würde eine Schleife im Hintergrund ausgeführt die keine Wartezeit hat, also kann ich Ihre Vermutung bestätigen.

Ich habe es gerade an meinem Rechner getestet, der Fehler tritt weiterhin auf. Habe mal einen "Stopp"-Button ins Sub-Vi einfügt und der Fehler ist weg.
Also muss es an der Art wie ich die Schleife beende liegen.

Gruß Niko

[attachment=59504]

Nachtrag: Eigentlich brauche ich auch keine Schleife, ich möchte ja nur die Werte in einem Fenster anzeigen lassen und bei Bedarf das Fenster wieder schließen. Wenn dies ohne Schleife möglich ist, nehme ich gerne Vorschläge an.


RE: CPU-Auslastung bleibt bei 50% (Sub-Vi) - GerdW - 11.10.2018 16:18

Hallo Niko,

Zitat:öffnet das Sub-Vi, indem die Schleife läuft und die Einstellungen anzeigt. Das Sub-VI hänge ich gerne an.
Wenigstens das…

Zitat:Da dies meine Bachelor-Arbeit ist möchte ich die VIs nicht Öffentlich machen, ich hoffe Sie können das akzeptieren.
Dazu folgendes:
1. Du kannst immer Test-VIs erstellen, mit denen du deinen Fehler/dein Problem nachvollziehbar demonstrieren kannst. Du musst nicht deine "hochgeheimen" VIs hier hochladen.
2. Beim Erstellen eines solchen Test-VIs stößt man manchmal selbst auf die Lösung des Problems… Wink

Zitat:Ich hab in dem Vi sonst keine Buttons, nur das Windows-Schießen und darüber wollte ich das Vi auch beenden.
Warum beutzt du keine Eventstruktur? Du wartest doch schließlich auf das Event "FP schließen"!?

So in etwa:
[attachment=59505]
Ich habe noch ein Timeout-Event hinzugefügt, damit deine 50ms Wartezeit weiterhin funktionieren. Allerdings ist das bei diesem VI sinnlos: es werden ja nur Werte aus zwei globalen Variablen angezeigt. (Oder ändern sich diese globalen während der Laufzeit dieses subVIs?)
Falls die globalen sich nicht ändern, kannst du auf die Wartezeit und auch die Schliefe komplett verzichten…
Edit: Ich habe im Bild das Filter-Event (erkennbar am Fragezeichen) verwendet, da ich überlicherweise das Schließen des FP programmatisch blockiere (per Discard?) und dann erst im subVI aufräume, bevor ich das VI beende und schließe. Du kannst aber auch das normale Event (ohne Fragezeichen) verwenden.

Zitat:Ja ein Kern ist voll ausgelastet, die Schleife im Vi hat 50ms warten drin. Funktioniert bei Ausführung ja auch super, nur beim rausgehen passiert irgendwas. … Also muss es an der Art wie ich die Schleife beende liegen.
Du hast ein VI, dessen FP geschlossen wurde und wo dann trotzdem auf Eigenschaften des FP zugegriffen wird. Evtl. war das bei älteren LV-Versionen ein Problem, was zu diesem "burn-in" für die CPU führt. Ist ja auch reichlich unsauber, sowas per Polling zu erledigen…

Noch ein Tipp:
In deinem subVI brauchst du den Cluster doch noch nicht einmal unbundlen! Einfach die Daten direkt im Cluster darstellen!
(Du kannst ja trotzdem die einzelnen Clusterelemente wie gewünscht anordnen und den Clusterrahmen transparent malen…)


RE: CPU-Auslastung bleibt bei 50% (Sub-Vi) - Niko1912 - 15.10.2018 11:02

Guten Tag GerdW,

das Schließen per Event-Struktur funktioniert so wie ich es haben wollte.
Ich weiß auch nicht warum ich da nicht selber drauf gekommen bin.
Die Werte ändern sich nicht also konnte ich auf die komplette Schleife verzichten.
Hab es nun so gelöst.

[attachment=59506]

Die CPU hat nun wieder luft, ich hoffe diese Lösung ist nun einwandfrei oder gibt es noch etwas zu bemängeln ?

Ich habs in den Clustern gelassen, die drei Variablen die rausgeführt sind will ich noch als String anzeigen lassen. Im Timeout wird nichts gemacht und das Transparent malen habe ich auch erst kürzlich entdeckt, werde ich dann auch so umsetzen.

Ich bedanke mich für die ausführliche Hilfe.

Grüße
Niko