' schrieb:Wenn Du die beiden VIs nicht separat kompilierst kannst Du auf die gleichen globalen variablen zugreifen.
Kai
Hallo,
mittlerweile habe ich 'ne Lösung gefunden.
Das Problem ist, daß ich ein Programm entwickle, was aus lizenzrechtlichen Gründen als Applikation auf 'nem anderen Rechner läuft. Zum Zeitpunkt der Erstellung des eigenständig laufenden Programm ist aber noch nicht klar, welche Funktionen es alles erfüllen soll. Daher werden dann im Einsatz dynamisch Sub-VIs aufgerufen, die dann die jeweilige Funktionalität erfüllen. Daher müssen sie separat kompiliert werden, wobei ja nur das Hauptprogramm kompiliert wird.
Nun entsteht aber bei der verwendung globaler Variablen das Problem, daß das globale-Variablen-VI zum einen in die Applikation (fest) eingebunden ist, wenn ich die dynamischen Sub-VIs aufrufe, ich dieses VI aber nochmal separat liefern muß, da die Sub-VIs sonst nicht ausführbar sind.
Das merkwürdige ist nur, daß ohne separates glob.-Var.-VI einige SubVIs laufen, einige nicht. Mit dem separaten laufen alle, aber nun ist es zweimal vorhanden. Die Applikation greift auf das in ihr eingebundene zu, und die SubVIs auf das gleichnamige ungebundene. Es sind also zwei verschiedene, und trotzdem klappt's
Da mir das ganze bißl schwammig ist, wollte ich versuchen, die globalen Variablen rauszuschmeißen.
Das ganze geht, indem ich von den SubVIs aus die Anzeige- und Bedienelemente des Hauptprogramms auslese und damit an die benötigten Größen zum Lesen und Schreiben herankomme:
- VI-Referenz auf aktuelles Sub-VI öffnen
- Eigenschaftsknoten "Aufrufende" liefert Namen des (aufrufenden) Hauptprogramms
-> VI-Referenz des Hauptprogramms öffnen
-> Eigenschaftsknoten auf VI-Referenz mit Eigenschaft "Alle Bedienelement-Werte ermitteln" in Verbindung mit Elemente = true bzw. false liefert dann Feld aus Bedien bzw. Anzeige-Element als Cluster aus Objektname und dem aktuellen Wert als "flattened Data String"
- dieses Feld nur noch nach gewünschtem Bedienelementname durchsuchen und Werte aus dem "flat Data"-String mittels "String in Daten konvertieren" lesbar machen, der ObjektTyp ist ja bekannt und ändert sich nicht
Das funktioniert ganz gut.