04.07.2013, 10:28
Hallo Ihr alle zusammen,
vielen Dank, dass Ihr Euch so viel Zeit genommen habt, um mir etwas weiterzuhelfen.
Ich habe mir noch nicht alles im Detail angeschaut, ich möchte aber zu diesem Punkt etwas beantworten:
"Geschrieben von Lucki - 02.07.2013 11:28
Der "Irrsinn" des Programms besteht ja darin, dass das gesamte Programm nicht nur von Haupt-VI aus, sondern auch von jedem SubVI beendet werden soll. Ich wüßte kein praktisches Beispiel, in dem so etwas sinnvoll sein könnte. ..."
1. Mein Beispiel war ein abstrahiertes Beispiel. Ich hatte ein Problem, aber ich kann mein reales Beispiel nicht versenden, so habe ich versucht, durch dieses Problem den bei mir auftretenden Fehler deutlich zu machen. Ausserdem steuerte ich in meinem Beispielprogramm von den SubVIs die Lampen im Haupt-VI, die subVIs konnten zwar einzeln beendet werden, nicht aber die gesamte Anwendung durch ein SubVI.
2. Bei mir gibt es diesen Fall, dass ich mit mehreren Events arbeiten muss - aber vielleicht gibt es ja für mein Problem auch noch eine andere Lösung.
Ich habe ein Haupt-VI, in dem ich ein Unterpanel habe, um dort verschiedene Programm-Module je nach Auswahl hineinzuladen (siehe Bild). Neben dem Unterpanel sind Schalter positioniert, die in der Eventstruktur des Haupt-VIs ausgewertet werden und je nach Schalter wird das entsprechende Unterprogramm in das SubPanel geladen.
Das Unterprogramm 1 besteht aus zwei Teilen, da es dort ein separates Fenster gibt, in dem Einstellungen vorgenommen werden können. Dieses Fenster kann als separates Fenster geladen werden, es soll aber der Übersichtlichkeit auch in das SubPanel geladen werden.
Das Problem ist also nun, dass ich aus dem Unterprogramm heraus das SubPanel des Hauptprogramms verändern möchte. Nun kann ich die Referenz des SubPanels übergeben und das Laden vom Unterprogramm 1 aus machen. Ich habe aber gedacht, dass es schöner ist, wenn ich das Laden des zweiten Moduls von Unterprogramm 1 auch vom Haupt-VI, in dem ich alle Anzeigen aus steuere, mit übernehme. Die Abarbeitung erfolgt aber über Eventstrukturen, also musste ich auch in das Haupt-VI eine Eventstruktur einbauen. Der Übersichtlichkeit halber hatte ich einfach an die bisherigen Benutzerevents ein weiteres Event drangehängt und so ist das "Chaos" entstanden.
Einige dieser Programmblöcke bleiben während der gesamten Laufzeit aktiv. In diesen subVIs arbeite ich sehr oft auch mit Eventstrukturen. In Eventstrukturen kann ich keine Melderereignisse verarbeiten. Darum habe ich in dem Haupt-VI ein Benutzerereignis "Beenden" gesetzt und registriert, dass von allen subVIs aus gelesen wird. Daher in meinem Beispiel die Möglichkeit, die beiden subVIs aus dem Haupt-VI heraus zu beenden.
Zu einer Sache hätte ich gerne nochmal eine Frage. Beim Experimentieren vor einiger Zeit hatte ich mehrere SubVIs aus einem Haupt-VI heraus beendet. Also im Haupt-VI habe ich das Event Stoppen ausgelöst, an alle SubVIs, die Referenz übertragen und es haben sich auch brav alle SubVIs beendet.
Jetzt schreibt ihr mir, dass die Eventstruktur wie eine Queue arbeitet. Das heisst doch, dass es hätte eigentlich garnicht funktionieren dürfen, dass sich beide SubVIs beenden, weil doch dann von einem der beiden VIs das Ereignis verarbeitet wurde. Das verstehe ich grad noch nicht. Oder war das dann "Zufall", dass es funktionierte?
vielen Dank, dass Ihr Euch so viel Zeit genommen habt, um mir etwas weiterzuhelfen.
Ich habe mir noch nicht alles im Detail angeschaut, ich möchte aber zu diesem Punkt etwas beantworten:
"Geschrieben von Lucki - 02.07.2013 11:28
Der "Irrsinn" des Programms besteht ja darin, dass das gesamte Programm nicht nur von Haupt-VI aus, sondern auch von jedem SubVI beendet werden soll. Ich wüßte kein praktisches Beispiel, in dem so etwas sinnvoll sein könnte. ..."
1. Mein Beispiel war ein abstrahiertes Beispiel. Ich hatte ein Problem, aber ich kann mein reales Beispiel nicht versenden, so habe ich versucht, durch dieses Problem den bei mir auftretenden Fehler deutlich zu machen. Ausserdem steuerte ich in meinem Beispielprogramm von den SubVIs die Lampen im Haupt-VI, die subVIs konnten zwar einzeln beendet werden, nicht aber die gesamte Anwendung durch ein SubVI.
2. Bei mir gibt es diesen Fall, dass ich mit mehreren Events arbeiten muss - aber vielleicht gibt es ja für mein Problem auch noch eine andere Lösung.
Ich habe ein Haupt-VI, in dem ich ein Unterpanel habe, um dort verschiedene Programm-Module je nach Auswahl hineinzuladen (siehe Bild). Neben dem Unterpanel sind Schalter positioniert, die in der Eventstruktur des Haupt-VIs ausgewertet werden und je nach Schalter wird das entsprechende Unterprogramm in das SubPanel geladen.
Das Unterprogramm 1 besteht aus zwei Teilen, da es dort ein separates Fenster gibt, in dem Einstellungen vorgenommen werden können. Dieses Fenster kann als separates Fenster geladen werden, es soll aber der Übersichtlichkeit auch in das SubPanel geladen werden.
Das Problem ist also nun, dass ich aus dem Unterprogramm heraus das SubPanel des Hauptprogramms verändern möchte. Nun kann ich die Referenz des SubPanels übergeben und das Laden vom Unterprogramm 1 aus machen. Ich habe aber gedacht, dass es schöner ist, wenn ich das Laden des zweiten Moduls von Unterprogramm 1 auch vom Haupt-VI, in dem ich alle Anzeigen aus steuere, mit übernehme. Die Abarbeitung erfolgt aber über Eventstrukturen, also musste ich auch in das Haupt-VI eine Eventstruktur einbauen. Der Übersichtlichkeit halber hatte ich einfach an die bisherigen Benutzerevents ein weiteres Event drangehängt und so ist das "Chaos" entstanden.
Einige dieser Programmblöcke bleiben während der gesamten Laufzeit aktiv. In diesen subVIs arbeite ich sehr oft auch mit Eventstrukturen. In Eventstrukturen kann ich keine Melderereignisse verarbeiten. Darum habe ich in dem Haupt-VI ein Benutzerereignis "Beenden" gesetzt und registriert, dass von allen subVIs aus gelesen wird. Daher in meinem Beispiel die Möglichkeit, die beiden subVIs aus dem Haupt-VI heraus zu beenden.
Zu einer Sache hätte ich gerne nochmal eine Frage. Beim Experimentieren vor einiger Zeit hatte ich mehrere SubVIs aus einem Haupt-VI heraus beendet. Also im Haupt-VI habe ich das Event Stoppen ausgelöst, an alle SubVIs, die Referenz übertragen und es haben sich auch brav alle SubVIs beendet.
Jetzt schreibt ihr mir, dass die Eventstruktur wie eine Queue arbeitet. Das heisst doch, dass es hätte eigentlich garnicht funktionieren dürfen, dass sich beide SubVIs beenden, weil doch dann von einem der beiden VIs das Ereignis verarbeitet wurde. Das verstehe ich grad noch nicht. Oder war das dann "Zufall", dass es funktionierte?