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!
08.02.2011, 11:12 (Dieser Beitrag wurde zuletzt bearbeitet: 08.02.2011 11:32 von jg.)
ich bastel zurzeit an meiner Bachelorthesis und benötige ein wenig Hilfe, da ich in LV nicht 100%ig fit bin.
Ziel ist es eine Anlage auf einem Notebook zu simulieren. Die Simulationsdaten werden per Ethernetverbindung an eine S7-SPS übermittelt, die daraufhin die "Anlage" steuert.
Kommunikation zwischen LV und S7 klappt wunderbar, jedoch hakt es sprichwörtlich in LV.
Da ich den Prozess mit einem Übersichtsbild visualisieren und dort auch Einstellungen über SubVIs - Dialogfenster - vernehmen möchte, stoppt das Hauptprogramm nun solange das neue Dialogfenster offen ist.
Wie kann man dieses beheben?
Habe eine Case-Schleife, die das entsprechende SubVI mit Dialogmaske aufruft, sobald auf ein Ventil oder ähnliches geklickt wird und es wird ein Cluster aus dieser Schleife zu meinem KommunikationsVI herausgeführt.
Des Weiteren wäre es wünschenswert, wenn mehr als eine Dialogmaske gleichzeitig aufgerufen werden könnte.
Benutze LV2009
Beste Grüße
Matthias
08.02.2011, 11:30 (Dieser Beitrag wurde zuletzt bearbeitet: 08.02.2011 11:32 von GerdW.)
als Bachelor sollte man wissen, dass PNG wesentlich kleinere Dateien erzeugt! (s. Anhang, 11kB statt 1,9MB )
- Beschäftige dich bitte mit parallel laufenden Schleifen. Dann kannst du Eingabe (Dialogfenster) und Ausgabe (SPS, Visualisierung) trennen und unabhängig laufen lassen.
- Wenn du Dialoge erstellst, die nicht blockieren sollen, dann setze deren Fenster-Einstellungen nicht auf "Modal"...
- Überlege dir einen zentralen Datenspeicher (z.B. in Form einer FunctionalGlobalVariable/FGV), um die diversen Einstellungen intern zu speichern!
Ich bin mittlerweile sehr gut vorangekommen und habe es auch mit den parallelen Schleifen hinbekommen, danke nochmal für den Hinweis :-)
Da ich nun in den Endzügen meiner Arbeit stecke, bin ich noch am Verfeinern. Dazu gehört nun noch das Öffnen mehrerer Frontpanels.
Die Suchfunktion habe ich schon bemüht, aber es leider nicht geschafft etwas passendes für mich zu finden :-(
Ich habe SubVIs als Menus erstellt, in denen ich Parameter für meine Simulation eingeben kann. An diese Übergebe ich zum Einen eine Referenz auf einen Cluster und zum Anderen einen String.Der String wird als Überschrift verwendet wird, damit man die einzelnen Menus (welche gleich aufgebaut sind) unterscheiden kann. Aufgerufen werden diese SubVIs durch eine Ereignisstruktur.
Zusammengefasst bräuchte ich also Hilfe dabei, weitere Menus über eine Ereignisstruktur zuöffnen und ihnen dabei diese beiden Eingänge zu übergeben. Bereits geöffnete VIs sollten auch offen bleiben.
Zitat:Aufgerufen werden diese SubVIs durch eine Ereignisstruktur.
Ich hoffe doch "nicht blockierend"...
Zitat:Hilfe dabei, weitere Menus über eine Ereignisstruktur zuöffnen und ihnen dabei diese beiden Eingänge zu übergeben.
???
Du rufst schon solche "Menus" auf (wohl doch eher "Dialogfenster") und willst jetzt wissen, wie du weitere solcher Fenster öffnest???
Ich würde mal sagen. Genau wie bisher auch...
Zitat:Habt Ihr eine Idee wie das funktionieren könnte?
Ja.
Bitte dein Problem genauer beschreiben. Oder ein (Beispiel-)VI anhängen...
Mein genaues Problem besteht darin, dass ich beispielsweise ein Objekt im Hauptfenster anklicke und sich dann ein Dialogfenster(1) (von mir als Menu bezeichnet :-) ) öffnet, in dem ich Parameter einstellen kann.
Soweit ist das auch gewollt, jedoch möchte ich im Hauptfenster ein weiteres Objekt anklicken, damit sich dann ein weiteres Dialogfenster(2) öffnet und ich hier ebenfalls Parameter einstellen kann. Dieses funktioniert allerdings nicht, sondern das angeforderte Fenster(2) öffnet sich erst, wenn ich das erste Dialogfenster(1) geschlossen habe.
Bei entsprechend mehreren Klicks öffnet sich das Fenster erst, wenn das vorherige geschlossen wird.
Es ist momentan nur möglich ein SubVI Frontpanel zurzeit geöffnet zu haben.
Der Aufruf dieser Dialogmasken geschieht in einer eigens dafür angelegten While-Schleife (im Blockdiagramm des MainVI) in welcher sich eine Ereignisstruktur befindet. Unterscheidung ist dann mit Mausklicks auf die verschiedenen Ojekte gegeben.
Unter Fenstererscheinungsbild habe ich:
Verhaltensweise des Fensters: Voreinstellung
ausgewählt.
Default-Einstellung für Events ist: "UI blockieren, bis abgearbeitet". Ist anscheinend der Fall bei dir...
Außerdem: Datenfluss beachten. Solange ein Event abgearbeitet wird ("Aufruf eines subVI"), kann kein zweites Event abgearbeitet werden. Hier böte sich eine Producer-Consumer-Struktur an, in der dann die subVIs nicht-blockierend (per VI-Server-Call) aufgerufen werden.
Danke für den Hinweis, kannte diese Option bei der Ereignisstruktur noch nicht. :-)
Habe mich mal in dem VI-Server-Call versucht, allerdings fehlt mir dazu einfach die Erfahrung.
Bekomme es hin, dass Werte übergeben werden und ich auch Werte lesen kann, allerdings hilft mir das ganze gerade nicht weiter.
Mein Problem, dass ich nur ein SubVI zurzeit öffnen kann besteht leider noch.
Habe mal ein MainVI und zwei Mini-Dialoge angehängt, die ich zum Testen erstellt habe. Könnte mir jemand mal zeigen, wie ich das in dem Fall grundsätzlich hinbekommen würde?
Du musst aus dem Datenfluss von LabVIEW rauskommen. Deshalb muss bei "Wait until Done" bei der InvokeNode "Run VI" ein False angeschlossen sein, kein True.
Gruß, Jens
Wer die erhabene Weisheit der Mathematik tadelt, nährt sich von Verwirrung. (Leonardo da Vinci)
!! BITTE !! stellt mir keine Fragen über PM, dafür ist das Forum da - andere haben vielleicht auch Interesse an der Antwort!