LabVIEWForum.de - Programm lässt sich nicht beenden / hängt sich auf

LabVIEWForum.de

Normale Version: Programm lässt sich nicht beenden / hängt sich auf
Du siehst gerade eine vereinfachte Darstellung unserer Inhalte. Normale Ansicht mit richtiger Formatierung.
Seiten: 1 2
Hi folks,

nachdem mein Programm nun (für meine Verhältnisse) ziemlich komplex geworden ist und aus vielen Unterprogrammen besteht habe ich das Problem, dass es nicht mehr sofort auf den STOP Knop reagiert.
Mehrmaliges Drücken hat zur Folge, dass ich eine "Das Programm reagiert nicht..."-Fehlermeldung von Windows erhalte. Dry

Kann das den einfach Grund haben, dass mein Rechner von der Hardware nicht hinterher kommt? Was ich irgendwie ausschließe...

...oder kann man LabVIEW auch so ungeschickt programmieren, dass das Programm irgendwo unnötig viele Prozesse ausführt (ich denke da an meine ganzen For-Schleifen), dass es einfach vom reagieren her träge ist. Huh

Cheers.
Hallo,

ohne dein Programm zu sehen ist es natürlich schwer einen Fehler auszumachen.
Aber deine Schleifen sind schonmal nen guter Ansatz.

Gruß Christian
Meinst du mit Stopp-Knopf den in der Task-Leiste der IDE:

Dazu ist zu sagen:
NoNo
Das ist nicht der richtige Weg, den du da einschlägst. Das ist der brutale Abbruch der laufenden VIs und sollte nur der absolute Notfall sein, aber sicher nicht der Standard-Weg, um ein (komplexes) Programm zu beenden! Dazu gehört auf das Stop-Event programmtechnisch reagieren, schön brav alles (vor allem Hardware) abschließen und abmelden, und erst dann wird das letzte laufende VI geschlossen.

Es wundert mich somit nicht, dass irgendwann deine IDE komplett abstürzt. Ich kann dir nur dringend raten, dein Konzept und deine Benutzerführung zu überdenken/modifizieren.

MfG, Jens
Zitat:Das ist nicht der richtige Weg, den du da einschlägst. Das ist der brutale Abbruch der laufenden VIs und sollte nur der absolute Notfall sein, aber sicher nicht der Standard-Weg, um ein (komplexes) Programm zu beenden! Dazu gehört auf das Stop-Event programmtechnisch reagieren, schön brav alles (vor allem Hardware) abschließen und abmelden, und erst dann wird das letzte laufende VI geschlossen.

Huh??

Mein Programm besteht leider nicht aus einer Sequenz, sondern aus parallel geschaltenen For-Schleifen, die eben beständig laufen. Wie soll ich das Programm denn sonst beenden?

Gehört zum guten Programmieren im Programm ein STOP Knopf, der eben gerade jene For-Schleifen beendet?

Cheers.
Eine Möglichkeit wäre z.B. eine Local oder wenn es VI übergreifend sein sollte eine Global Stop Variable. Damit kannst du den laufenden Vorgang stoppen und dann gezielt das Programm beenden.
Lad' doch, wie ChrisR schon empfohlen hat, Dein VI einfach mal hoch.
Sonst gibt es hier nur wilde Spekulationen.

Gruß Markus
Also das Programm an sich habe ich jetzt mal nich hochgeladen, da es Unterprogramme mit Unterprogrammen enthält...

Aber hier mal ein Screenshot von der Programmstruktur des FrontPanels:

Cheers.
' schrieb:Aber hier mal ein Screenshot von der Programmstruktur des FrontPanels:
Ich sach' mal so: Ich würde mich auch nicht beenden lassen und aufhängen.

Sowas macht man nicht, auch wenn's funktionieren sollte. Bevor das Programm mit FP.Close beendet wird, sollten alle While-Schleifen beendet werden und alle Tasks (DaqMX, Queues etc. etc.) beendet sein - und zwar mit den entsprechenden Methoden.

Außerdem fehlt zumindest in der einen While-Schleife eine Metronom.
IchSelbst schrieb:Außerdem fehlt zumindest in der einen While-Schleife eine Metronom.

Warum?
Ich hab in der Hilfe gelesen, dass es die Programmabläufe synchronisiert. Hört sich ja intuitiv ganz praktisch (oder wichtig?) an.

Cheers.
' schrieb:Warum?
Wenn kein einziger True-Case der vier Case-Sequenzen abgearbeitet wird, sondern nur alle leeren False-Cases (dass die leer sind nehm ich jetzt einfach mal an), läuft die While-Schleife so schnell durch, dass theoretisch für was anderes keine Zeit bleibt. Sehen tut man das z.B. an der Reaktionsgeschwindigkeit des Frontpanels (vergleiche auch Prozessorauslastung). In solche Schleifen gehört eine Wartezeit hinein. 10 Millisekunden (ich nehm immer 250ms) sind da bereits ausreichend. Ob Metronom oder Wartezeit ist gleich. Auch wenn es ohne Wartezeit funktioniert, heißt das noch lange nicht, dass es auch in den Fällen, die gerade nicht auftreten, zur Zufriedenheit des Anwenders funktionieren wird.

Zitat:Ich hab in der Hilfe gelesen, dass es die Programmabläufe synchronisiert.
In welcher Hilfe steht denn das? Ich halte das für falsch. Zum Synchronisieren im engeren Sinne gibt es spezifische Mittel. Metronom und Wartezeit warten eben nur. Aus der Tatsache, dass ein Metronom in einem festen Raster abläuft, kann man meines Erachtens nicht schleißen, dass ein Metronom synchronisierende Eigenschaften hat (wenn dann nur im aller weitesten Sinne).

Zitat:Hört sich ja intuitiv ganz praktisch (oder wichtig?) an.
Eher wichtig.
Seiten: 1 2
Referenz-URLs