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!
Hab gerade gesehen, dass wenn man das FP öffnet, das SubVI doch nicht startet.
Habe auch umgekehrt probiert mit RunVI, und bei Einstellungen Show FP when called angeklickt. Funktioniert aber auch nicht.
Also es bleibt nur noch beides über Nodes zu machen (FP Öffnen und das VI starten).
Es gibt hier aber keine Static VI Referenz auf das zu öffnende VI, eben weil es nicht mit dem gesamten Code geladen wird, sondern erst bei Bedarf (dynamisch), und auch wieder komplett aus dem Speicher entfernt wird, wenn es geschlossen wird! Da das VI nicht bei Programmstart geladen wird, geht das "Aufstarten" der Applikation schneller. Das kommt natürlich nur bei vielen solchen VI zum tragen! Und die VI's laufen nur dann, wenn sie wirklich gebraucht werden, was die CPU entlastet! Und sollte es ja auch sein: Nur notwendige Applikationen/Anzeigen sollten laut Anforderung laufen, insbesondere da das völlig eigenständige Programme sind, die nur über das Haupt-VI "verwaltet" werden!
Das mit dem Methodenknoten hab ich deswegen drin, um immer zu wissen, was ich eigentlich mache! Klar geht das auch über die VI Einstellugen. Aber: Das VI läuft dann nicht sofort, wenn ich's mal zum editieren will öffnen will, z.b. für ne Aktualisierung! Wenn man das öfters machen muss, ist das ständige Ausschalten ganz schön nervig! Sollte dann auch noch wie in nem Dialog die Leiste verborgen sein, und ein Stop-Button gar nicht vorhanden sein (weil's z.b. ne selbst-quittierende Meldung ist), müsste man schon mit STRG + . stoppen, wenn mans aus irgendwelchen Gründen (z.b. weil das schon jeder "Blindbenutzer" kennt) deaktiviert hat...tjaha, man hat so seine Gründe ;-)....ist alles schon vorgekommen!
EDIT: Hab grad eugens post gelesen: Das kriegt man aber hin mit dem starten über die VI einstellungen! EDIT end
Feierabend!
Gruss
Achim
"Is there some mightier sage, of whom we have yet to learn?"
"Opportunity is missed by most people because it is dressed in overalls and looks like work." (Thomas Edison)
Zuerst einmal Hallo an alle, die hier gepostet haben! Ich hatte anfangs auch das Problem, verschiedene VIs mit dem Wunsch, über Buttons aufzurufen. Nun klappt das auch, danke
Jedoch brauch ich noch eine kleine Hilfe hierzu: Ich steuere mit diesem VI kleinere VIs an, die auf einen HP Logikanalysator via VISA/GPIB zugreifen. Bei jedem dieser kleinen Unter-VIs muss ich jedoch immer wieder das Gerät auswählen, auf das ich zugreifen möchte (via Dropdownmenü). Nun hab ich mir gedacht, dass man das so machen könnte, dass ich im Haupt-VI das Gerät auswähle und es als Variable an die Unter-VIs weitergebe. Wie kann ich das jedoch anstellen?
Danke!
IWF
18.07.2006, 10:15 (Dieser Beitrag wurde zuletzt bearbeitet: 18.07.2006 10:17 von Achim.)
das sollte entweder über ne globale Variable oder über ne Umgebungsvariable (ab LV8) funktionieren. Im "HauptVI" schreibst du da den Namen z.b. in ne String-Variable und in den jeweiligen "UnterVI" liest du das wieder aus...schau dir die Hilfe in LV an, wie diese Variablentypen funktionieren!
Gruss
Achim
"Is there some mightier sage, of whom we have yet to learn?"
"Opportunity is missed by most people because it is dressed in overalls and looks like work." (Thomas Edison)
23.10.2006, 09:52 (Dieser Beitrag wurde zuletzt bearbeitet: 23.10.2006 09:53 von Lucki.)
' schrieb:kopiere dir die drei VI mal in einen gemeinsamen Ordner, und starte das "neu_Menu_Vi.vi"...
Hat mich auch interessiert, sehr gut. Mich würde interessieren, wie Deine Lösung aussehen würde, wenn die Anforderung folgendermaßen modifiziert würde:
a) Bei geöffnetem SUB-VI soll am Hauptprogramm nichts mehr bedient werden dürfen. (Das Ereignis ist solange nicht beendet, solange das Sub-VI geöffnet ist)
b) Bei Schließen des Sub-VIs sollen Werte aus dem Sub-Vi an des Hautprogramm übergeben werden.
Bei direkten Aufruf des SUB-VIs aus dem Ereignis heraus hat man diese Eigenshaften quasi kostenlos, aber Dir wird wohl auch so eine elegante Möglichkeit einfallen, wie man das in Deinem Beispiel macht.
um das HauptVI zu sperren kann man das SubVI "modal" definieren, d.h. kein anderes VI kann mehr bedient werden. Das geht dann natürlich nur, wenn man nur ein SubVI auf die von mir gezeigte Art öffnet. Ansonsten fällt mir so auf die schnelle auch nichts ein...aber: Wenn auf dem Haupt-Panel nichts mehr verändert werden darf: Wann soll diese Sperrung erfolgen? Nach dem öffnen von SubVI Nr.1? Dann kann ich weitere SubVIs ja eh nicht mehr öffnen und die "Öffnen"-Funktionalität für die anderen VIs wäre für die Katz! Und dies gilt ja grundsätzlich! Egal wie mans macht: Wenn ein VI eine Sperrung veranlasst, kann man mit den anderen nichts mehr anfangen. Alternativ könnte man aber einzelne Controls in "NachbarVIs" über ihre Referenz auf "Disabled" schalten, wenn das durch ein SubVI angefordert würde.
Die Sperrung könnte man auch noch dadurch erreichen, dass man das Haupt-Panel "hidden" schaltet, sobald das SubVI geöffnet ist...man darf dann halt beim Schließen des SubVIs nicht vergessen, das HauptVI wieder hervorzuholen!
Der Zweck dieses Beispiels war ja auch ein anderer: Es sollten unabhängige VIs gestartet werden, das HauptVI ist hier nur als "Verwaltungswerkzeug" gedacht. Die Datenübergabe nach VI-Ende könnte man über globale Variablen oder auch ne Queue machen.
Natürlich hast du recht: Wenn man direkt aus dem HauptVI aufruft, kriegt man die Sperrung und die Übergabe von Daten leichter hin. Aber dafür muss das Hauptprogramm halt auch auf das Beenden des SubVI warten.
Gruss
Achim
"Is there some mightier sage, of whom we have yet to learn?"
"Opportunity is missed by most people because it is dressed in overalls and looks like work." (Thomas Edison)
@Achim
Du hast vollkomen recht, der Zweck der Übung hier war ein ganz anderer: es war gerade beabichtigt, wmehrere unabhängige Vo zu offenen.
Aber in mindestens gleicher Häufigkeit steht die Forderung an, daß jeweils nur ein Sub-VI geöffnet werden soll und nichts anderes möglich sein soll, bevor nicht das betreffende Sub-VI bedient und beendet wurde.
Beispiel. Meßplatz für irgendwas, es werden nacheinander unterschiedliche Parameter am Objekt gemessen, wobei das Objekt jedesmal auch bedient werden muß. Alle Werte sollen protokolliert werden.
Lösung: Vom Hauptprogramm lassen sich die einzelnen (Sub)VIs aktivieren, gewissermaßen als eigene Tasks zur Messung eines Parameters. Bei der Rückkehr ins Hauptprogramm werden die jeweiligen Daten übergeben. Das Hauptprogramm erstellt dann, wenn alle Daten vollständig sind, das Protokoll; es dient auch hier nur gewissermaßen zur Verwaltung.
Anderes Beipiel: Grundeinstellungen vornehmen. Die Grundeinstellungen im Haupt-Vi vozunehmen, und sei es auf einer anderen Registerkartenseite, finde ich nicht ideal. Besser ist ein Schalter "Einstellungen", und der öffnet dann ein eigenes VI, wobei es auch keinen Sinn macht, wenn man während der Bedienung dieses VI noch alles mögliche andere machen kann.
das sollte entweder über ne globale Variable oder über ne Umgebungsvariable (ab LV8) funktionieren. Im "HauptVI" schreibst du da den Namen z.b. in ne String-Variable und in den jeweiligen "UnterVI" liest du das wieder aus...schau dir die Hilfe in LV an, wie diese Variablentypen funktionieren!
Gruss
Achim
Im Prinzip geht das aber auch über den Invoke-Node->Control Value->Set...für alle, die ungern mit globalen Variablen arbeiten:-)
Developer Suite Core -> LabVIEW 2015 Prof.
2006
EN
71083
Deutschland
Öffnen eines VIs aus einem anderen Frontpanel
Das hier ist auch eine Möglichkeit.
Man muss bei "Window Appearance" halt noch "Dialog" einstellen.
Gruß Markus
-------------------------------------------------------------------------- Bitte stellt mir keine Fragen über PM, dafür ist das Forum da - andere haben vielleicht auch Interesse an der Antwort !!
--------------------------------------------------------------------------
07.04.2009, 10:43 (Dieser Beitrag wurde zuletzt bearbeitet: 07.04.2009 10:49 von RJ1.)
ich habe ein ähnliches Problem.
Ich möchte aus einem Hauptprogramm heraus mehrere VIs starten.
Das klappt auch!
Nun sollen aber einige dieser VIs jeweils ein bzw. mehrere AI-Kanäle von einer Karte lesen. Ich habe es nun soweit gebracht (mit zeitgesteuerten Schleifen), dass wenn ich das Timing gut einstelle das Problem des gleichzeitigen Kartenzugriffs zu verdrängen.
Das soll aber keine Dauerlösung bleiben!
Gibt es eine Möglichkeit die DAQmx - Kanäle so abzufragen, dass gleichzeitig geprüft wird ob ein anderer Kartenzugriff vorliegt und somit der Kanal kurzzeitig ausgesetzt wird?