Programm lässt sich nicht beenden / hängt sich auf - Druckversion +- LabVIEWForum.de (https://www.labviewforum.de) +-- Forum: LabVIEW (/Forum-LabVIEW) +--- Forum: LabVIEW Allgemein (/Forum-LabVIEW-Allgemein) +--- Thema: Programm lässt sich nicht beenden / hängt sich auf (/Thread-Programm-laesst-sich-nicht-beenden-haengt-sich-auf) Seiten: 1 2 |
Programm lässt sich nicht beenden / hängt sich auf - Labview-Beginner - 11.07.2008 14:09 Danke für die guten Tipps. Also das mit dem Metronom und der Globalen Variablen habe ich umgesetzt. Nur leider funktioniert der Programmabbruch mit der Globalen Variabeln noch nicht ganz. Wie unten zu sehen ist, habe ich in der großen While Schleife den Beenden Knopf mit einer Globalen Variabeln verbunden, die eben das "True" an die darüber liegende While Schleife schicken soll. Nur habe ich das Problem, dass diese While Schleife scheinbar noch gar nicht läuft, wenn aus der Queue noch keine Daten nach oben geschickt werden?!?! Und somit wird zwar die untere While Schleife beendet, aber die obere kann nicht beendet werden, weil sie noch gar nicht angelaufen ist? Oder suche ich an der falschen Stelle und die Ursache ist doch eine ganz andere? Cheers. Programm lässt sich nicht beenden / hängt sich auf - IchSelbst - 11.07.2008 15:11 ' schrieb:und der Globalen Variablen habe ich umgesetzt.Ich galube, dir reicht da eine ganz normale Lokale Variable. Also quasi eine "Lokale Variable" vom Abbruch-Button. Zitat:Nur habe ich das Problem, dass diese While Schleife scheinbar noch gar nicht läuft, wenn aus der Queue noch keine Daten nach oben geschickt werden?!?!Wie sollte die auch laufen? Die ist in einen Datenfluß eingebunden - und kommen deswegen erst zur Ausführung, wenn die große While-Schleife beendet ist. Warum hat du denn das Anfordern der Queue in die große While-Schleife hinein gemacht? Das Anfordern gehört so, wie du weiter oben gepostet hast. Programm lässt sich nicht beenden / hängt sich auf - Labview-Beginner - 14.07.2008 11:34 Zitat:Warum hat du denn das Anfordern der Queue in die große While-Schleife hinein gemacht? Das Anfordern gehört so, wie du weiter oben gepostet hast. Weil ich irgendwie dachte, dass das anfordern der Queue dann deaktiviert wird, wenn die While-Schleife abgebrochen wird. Aber jetzt habe ich es einmal so umgestellt, wie es vorher war und es funktioniert immer noch nicht (Bild 1). Wenn ich Highlight Execution mache, dann kann ich verfolgen, wie die einzelnen While - Schleifen über die globale Variable nach und nach ihre Abbruchbedingung erhalten. Doch der Datenfluss (wenn ich das so nennen kann) bleibt dann einfach beim Dequeue stehen und die Sub VIs bleiben noch ausgegraut. Natürlich macht das irgendwo Sinn, weil die Sub VIs auch nicht ausgeführt werden, solange kein Element aus der Queue herausfällt, dass sie ausführen können. Also mit Highlight Execution sieht es dann auch wie folgt aus (Bild 2). Edit: Um der ganzen Sache weiter auf den Grund zu gehen, habe ich bei den While - Schleifen mal einen Indicator an das i gekoppelt. Dabei musste ich zuerst feststellen, dass die obere While - Schleife keine Durchläufe macht. Soll das so sein? Ich dachte mir, dass sie keine Durchläufe macht, weil zu Beginn noch kein Element aus der Queue herausfällt. Aber "weiß" die While Schleife das? Und zweitens musste ich mit Erschrecken feststellen, dass die nebeliegende While Schleife manchmal ausgeführt wird (Counter läuft), manchmal aber auch nicht (Counter läuft nicht). Muss ich das ganze irgendwie in einen Datenfluss gießen? Ich habe ja schon verstanden, dass man bei so einer Konstruktion keinen Einfluss darauf hat, welche Schleife zuerst ausgeführt wird (deswegen sollte man dann eine Sequenz verwenden, wenn es eine Rolle spielt), aber dass es gänzlich *nicht* ausgeführt wird, überrascht mich jetzt doch. Cheers. Cheers. Programm lässt sich nicht beenden / hängt sich auf - jg - 14.07.2008 12:48 Schau dir doch mal die Beispiele im NI-Examplefinder zu Queues und Notifiers an! 1. Eine Queue bzw. Notifier würde ich am Ende des Programms über das ensprechende VI "zerstören". 2. Eine Schleife, die nur auf ein neues Ereignis in der Queue oder Melder wartet, kannst du darüber beenden, dass du den Error-Ausgang des Queue/Notifier-VI an die Abbruchbedingung der Schleife anschließt. Dann passiert folgendenes: -Beenden der Queue/Notifier über das entsprechende VI => -Die Dequeue,Wait on Notifier etc.-VI haben plötzlich keine Queue mehr und enden mit Error-Ausgang =True => -Die Schleife endet, da plötzlich Error 0 True ist. Und schon kannst du dir die eine oder andere globale/lokale Variable sparen. MfG, Jens Programm lässt sich nicht beenden / hängt sich auf - Labview-Beginner - 14.07.2008 12:56 Ääääääääh..... Jens G schrieb:Beenden der Queue/Notifier über das entsprechende VI Sehe ich das richtig, dass das dann gerade IchSelbst's Kommentar entgegenläuft, die Queue außerhalb der While Schleife zu plazieren? Denn wenn ich dich jetzt richtig verstehe, dann kommt es primär darauf an das "Obtain Queue" zu deaktivieren? Sprich ich nehme die beiden "Obtain Queue"s in die große While Schleife rein, dann werden sie durch beenden der While Schleife deaktiviert... ...und die andere While Schleife mit den "Dequeue Element" werden durch deine Vorgabe beendet...? Cheers. Programm lässt sich nicht beenden / hängt sich auf - Labview-Beginner - 14.07.2008 13:23 AAAAALLES KLAR!!! FUNKTIONIERT!!! HERVORTRABEND!!! DANKE SCHÖN!!!! IHR SEID DIE BESTEN!!!! JUHU!!! Programm lässt sich nicht beenden / hängt sich auf - Y-P - 14.07.2008 13:27 Krass.... Gruß Markus ' schrieb:AAAAALLES KLAR!!! Programm lässt sich nicht beenden / hängt sich auf - jg - 14.07.2008 13:42 ' schrieb:HERVORTRABEND!!!Bin ich jetzt ein Pferd?:hehe:WIEHER... Und das nächste Mal bitte gesamtes Posting lesen (1. Punkt war Beispiele anschauen, was du ja dann wohl gemacht hast) und ausführen, bevor du "wirre" und "falsche" Antworten schreibst. MfG, Jens P.S.: Ich hoffe, dieses Bsp. hast du dir reingezogen: [attachment=13434] Programm lässt sich nicht beenden / hängt sich auf - Labview-Beginner - 14.07.2008 14:27 Zitat:P.S.: Ich hoffe, dieses Bsp. hast du dir reingezogen: Jawohlja! ^_^ Ganz artig. |