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!
(13.06.2012 14:15 )GT123 schrieb: Hallo anbei besten Dank Euch beiden,
eigentlich denke ich das ich die Thematik verstehe, aber im splashscreen hängt die Fortschrittsleiste beim main.vi laden immer noch.
Anbei meine BD. Was ist denn da nicht i.O.???
Es ist äusserst unschön dass Du in Deinem Main VI eine Referenz zum Splashscreen Vi öffnest um dieses zu aborten. Der Umstand dass Du das Main VI Frontpanel öffnest signalisiert dem Splashscreen VI ja bereits, dass Du jetzt soweit bist um die eigentliche Arbeit selber weiterzuführen und damit kann sich das Splashscreen VI ganz einfach selber beenden. Und nein dazu braucht es kein Abort, einfach alles aufräumen was noch aufzuräumen ist und dann das eigene Frontpanel schliessen et voila!
Wie macmarvin ja schon erläuterte führt das Open VI Reference VI alle Arbeit im UI Thread aus. Das ist derselbe Thread der auch für das UI Update benützt wird. Solange eine Open VI Reference also beschäftigt ist, macht LabVIEW keine UI Updates. Das ist manchmal lästig aber eben einfach nicht anders. Alternativen um Open VI Reference nicht im UI Thread auszuführen wurden oft gefordert und die LabVIEW Entwickler haben sicher schon öfters nach Möglichkeiten dazu gesucht, aber das Laden einer VI Hierarchie ist eine delikate Angelegenheit die nicht einfach durch andere Operationen beliebig unterbrochen werden darf da LabVIEW während dem Laden unzählige globale Tabellen konstant updaten muss, und wenn es dass nicht in einem exclusiven Thread tut der durch jemanden anderen jederzeit unterbrochen werden kann, dann würdest Du kein einziges komplexes Programm mehr in den Speicher laden können ohne dass LabVIEW sich früher oder später mit einer Exception verabschiedet. Natürlich könnte LabVIEW dazu auch eine Critical Section bemühen aber das Problem ist dass diese globalen Tabellen and mehreren Stellen in LabVIEW angesprochen werden die teilweise wieder andere kritische Abhängikeiten haben, und die Kombination von mehreren Critical Sections hat eine grosse Gefahr eines sogenannten Priority Invresion Locks, wo zwei Teile sich gegenseitig blockieren weil jeder darauf wartet dass der andere die Resource wieder freigibt.
ja, FP schliesen müsste reichen, bin mir hierbei nur nicht sicher (gewesen) ob nur das FP sich schliesst und im Hintergrund das BD weiter läuft... sehe es wurde ja bereits erwähnt :-)
Zitat:In dem Moment wo kein Frontpanel mehr vorhanden ist, wird eine LabVIEW Applikation abgebrochen
ok, d.h. ich kann mit den Vi Server arbeiten wie ich will, das akualisieren des UI ist währendessen immer blockiert.
Dann denke ich doch wieder an die exe Lösung...
in Splashscreen.vi mit system exec.vi die main.exe starten (wait until done=F),
dann muss ich aber in einer Schleife abfragen ob die main.exe das FP geöffnet hat.
Nur, wie könnte ich das Abfragen "FP einer exe geöffnet" realisieren?
ja, FP schliesen müsste reichen, bin mir hierbei nur nicht sicher (gewesen) ob nur das FP sich schliesst und im Hintergrund das BD weiter läuft... sehe es wurde ja bereits erwähnt :-)
Zitat:In dem Moment wo kein Frontpanel mehr vorhanden ist, wird eine LabVIEW Applikation abgebrochen
ok, d.h. ich kann mit den Vi Server arbeiten wie ich will, das akualisieren des UI ist währendessen immer blockiert.
Dann denke ich doch wieder an die exe Lösung...
in Splashscreen.vi mit system exec.vi die main.exe starten (wait until done=F),
dann muss ich aber in einer Schleife abfragen ob die main.exe das FP geöffnet hat.
Nur, wie könnte ich das Abfragen "FP einer exe geöffnet" realisieren?
Nur über VI Server und dazu musst Du in Deiner Main den VI Server über TCP konfigurieren. Dazu muss man entsprechende Einträge in die <mymain>.ini Deiner Main app machen und dann muss man im Splashscreen zuerst eine Application Reference zu dem "Remote" aufbauen (ja remote auch wenn die Applikation auf dem gleichen Rechner läuft) und dann kann mandiese an Open VI Reference übergeben, dass das weiss welche Instanz kontakiert werden soll. Aber gib Windows etwas Zeit um die exe zu laden und zu starten. Wenn Du gleich nach dem System exe probierst um die Application Reference zu öffnen, hat Windows noch nicht mal das Executabel geladen, geschweige dann dass dieses Zeit hatte um sich zu initialisieren und den VI Server aufzustarten.
Aber ehrlich, so viel Liebesmühe wegen einer kleinen Fortschrittsanzeige!!! Pack Dir irgendwo ein GIF File das etwas Animiertes darstellt und importiere das ins Frontpanel. Animierte Gifs werden bei mir nicht blockiert während des Ladens des Main VIs. Allerdings muss ich auch sagen dass mein Main VI zwar eine Hierarchy von schnell mal 500 bis 1000 VIs enthält, aber das dauert nur Sekunden um das zu laden. Mehr Zeit geht verloren beim Initialisieren der Konfigurationsdaten und der Hardware, aber das geschieht ja nicht mehr in Open VI Reference und blockiert daher im Normalfall auch den UI Thread nicht.
Hallo rolfk,
interessant das mit TCP.... aber doch zu aufwendig
Das mit dem Gif wäre völlig ausreichend, mehr will ich gar nicht.
Wie kann ich ein gif ins FP einbinden?
(14.06.2012 13:36 )GT123 schrieb: Hallo rolfk,
interessant das mit TCP.... aber doch zu aufwendig
Das mit dem Gif wäre völlig ausreichend, mehr will ich gar nicht.
Wie kann ich ein gif ins FP einbinden?
Im Menu eines VIs: Edit->Import File to Clipboard. Danach Edit->Paste.
Habe ein anderes gif laden können, wieso mache gehen und einige nicht ist mir nicht klar.
Aber das Gif wird ebenfalls nicht aktualisiert während dem main.vi aufstarten?!?
(15.06.2012 06:14 )GT123 schrieb: Habe ein anderes gif laden können, wieso mache gehen und einige nicht ist mir nicht klar.
Aber das Gif wird ebenfalls nicht aktualisiert während dem main.vi aufstarten?!?
GIFs können sowohl statische Bilder sein (wie auch JPG und PNG sind) als auch eine Serie von Bildern mit entsprechender Framerate. Ein statisches Bild kann natürlich nur ein einziges Bild zeigen!
Also das gif bewegt sich auf dem FP in der Entw.umgebung.
In der exe beim starten der main.vi über vi Server bewegt es sich nicht mehr, nach dem das main.vi FP offen ist und ganz kurz bevor das splashscreen beendet wird sieht man das gif sich bewegen.