LabVIEWForum.de - VI-Pfad innerhalb und von außerhalb eines Projektes öffnen

LabVIEWForum.de

Normale Version: VI-Pfad innerhalb und von außerhalb eines Projektes öffnen
Du siehst gerade eine vereinfachte Darstellung unserer Inhalte. Normale Ansicht mit richtiger Formatierung.
Hallo,


und zwar habe ich folgendes Problem: ich habe ein VI, was innerhalb eines Projektes läuft. Jetzt will ich von extern (2. PC) auf dieses VI zugreifen und Frontpanelelemente ändern lassen. Eigentlich soweit alles kein Problem bis auf folgendes: Wenn ich dieses externe VI aufrufe, dann benötigt das ja den Pfad des VI's. Den geb ich an, jedoch dann öffnet er das zu ändernde VI noch ein zweites mal, was dann nicht unter dem Projekt läuft. Das heißt, ich habe 2 gleiche VI's, wovon das eine zu dem Projekt gehört und das andere ohne das Projekt geöffnet wurde. Jedoch soll er kein 2. öffnen, sondern nur das Projekt-VI benutzen.

Ich habe noch ein Bild mit unglaublichen Paint-Skills erstellt um hoffentlich etwas klarer zu machen wo das Problem liegt.
[attachment=48576]

Ich habe schon einiges dazu gesucht, nur nichts gefunden, wie man ihm klar machen kann, dass er das VI in dem Projekt benutzen soll und nicht einfach "roh" öffnet, weil der eigentliche VI-Pfad ja jeweils derselbe ist.

Ich hoffe, es ist klar geworden was mein Problem ist. Es ist leider etwas schwierig zu beschreiben, da es auch ein leicht komisches Problem ist.
Was genau willst du erreichen? Was ist das endgültige Ziel?

Mglw. wäre der richtige Weg, das VI über den LabVIEW-Webserver zu "veröffentlichen" und so darauf zuzugreifen, aber ohne weitere Hintergrundinfos kann ich das nicht genau sagen...

Gruß, Jens
Hallo Lucius,

Zitat:Jetzt will ich von extern (2. PC) auf dieses VI zugreifen und Frontpanelelemente ändern lassen
Was verstehst du unter "FP-Elemente ändern"?
Wenn du darunter verstehst, Parameter durch externen Zugriff ändern zu können, solltest du Dinge ausprobieren wie:
- selbst eine UDP/TCP-Schnittstelle in dein Programm einbauen und über diese Befehle&Daten an dein Programm senden und verarbeiten
- evtl. mit SharedVariables arbeiten und darüber Daten versenden

Wie willst du von einem anderen PC aus auf ein Verzeichnis "D:\..." eines anderen PCs zugreifen?
Oder ist "D:\..." etwa schon auf den fremden PC gemappt?
Also das eigentliche Grundproblem liegt viel tiefer und zwar, dass man bei Shared I/O Variablen keine Eigenschaften mittels Eigenschaftsknoten von einem entferntem Rechner ändern kann. Es war vorgesehen bei den shared variables, die wir haben, den Slot "Beschriftung" für die physikalische Einheit zu verwenden.
Auf dem lokalen PC, wo die ganzen Variablen laufen, kann man dies problemlos ändern. Das große Problem ist jetzt, dass man genau diesselbe Methode nicht auf einem entferntem PC durchführen kann, da man eine tolle Fehlermeldung bekommt, dass die Variable nicht initialisiert wäre (was sie aber ist, da man ja auch einfach die Zahlenwerte in die Variable schreiben kann, d.h. sie von einem entferntem Rechner mit genau derselbem Pfad beschieben/ausgelesen werden kann).
Das Problem ist einfach, dass man an die Beschriftung der Variable nicht anders herankommt, als über den Eigenschaftsknoten und dieser funktioniert wohl nur lokal. Siehe Bild

[attachment=48578]

Ich habe schon einige Zeit damit verbracht dieses Problem zu lösen und hab auch schon bei NI selber angefragt, leider nur mit mäßigem Erfolg.

Also im folgenden Bild sehr ihr das Variablen Server VI, wo die Variablen verwaltet werden, etc. Man kann hier auch Problemlos die Einheit (=die Eigenschaft Beschriftung) ändern (roter Kasten).

[attachment=48579]

Die Sache ist jetzt, dass man diese Einheit auch von einem entferntem Rechner ändern soll.
Wie man Zugriff auf das VI erhält mit VI-Server man dort alles per Hand einstellen kann ist mir klar.
Die Idee war jetzt halt, dass ein VI auf dem entferntem PC die Verbindung mittels Referenz aufbaut (deswegen auch der Pfad) und dann dort sozusagen automatisch die richtige Variable auswählt, eine neue Einheit einträgt und den Button drückt. Wie das gehen könnte, hab ich eigentlich schon fast raus (eine ältere Version im folgendem Bild).

[attachment=48580]

Ich scheitere gerade nur an dem Problem, was ich im 1. Post beschrieben hab:
Er öffnet noch ein extra Server-VI außerhalb des Projektes, obowhl das normale VI innerhalb des Projektes eh dauerläuft. Da wird halt unterschieden zwischen VI innerhalb und außerhalb eines Projektes. Und mit der benötigten Pfadangabe zu dem VI wird halt immer nur das ohne Projekt berücksichtigt und weil davon noch keins geöffnet ist, öffnet er das.

Ich hoffe jetzt ist der Zusammenhang etwas klarer.
Hallo Lucius,

Zitat:Das Problem ist einfach, dass man an die Beschriftung der Variable nicht anders herankommt, als über den Eigenschaftsknoten und dieser funktioniert wohl nur lokal.
Dann stell doch diese Parameter auch weiterhin lokal ein!
Du musst nur geringfügig umdenken: statt von einem entfernten PC aus direkt auf die SV zuzugreifen (zu wollen), überlässt du das dem auf diesem entfernten PC laufenden Programm. Du sendest halt nur einen Befehl an das Programm auf dem entfernten PC (z.B. "neue Einheit für SV XYZ = m/s") und dieses führt diesen Befehl nach deinen Wünschen (und deiner Programmierung) aus!

Grundgedanke:
Du erstellst dir eine eigene API in deinem Programm, die z.B. über UDP/TCP oder eine eigene SV erreicht werden kann. Dann einfach nur Befehle an diese API schicken!
(20.02.2014 12:12 )GerdW schrieb: [ -> ]Hallo Lucius,

Zitat:Das Problem ist einfach, dass man an die Beschriftung der Variable nicht anders herankommt, als über den Eigenschaftsknoten und dieser funktioniert wohl nur lokal.
Dann stell doch diese Parameter auch weiterhin lokal ein!
Du musst nur geringfügig umdenken: statt von einem entfernten PC aus direkt auf die SV zuzugreifen (zu wollen), überlässt du das dem auf diesem entfernten PC laufenden Programm. Du sendest halt nur einen Befehl an das Programm auf dem entfernten PC (z.B. "neue Einheit für SV XYZ = m/s") und dieses führt diesen Befehl nach deinen Wünschen (und deiner Programmierung) aus!

Grundgedanke:
Du erstellst dir eine eigene API in deinem Programm, die z.B. über UDP/TCP oder eine eigene SV erreicht werden kann. Dann einfach nur Befehle an diese API schicken!

Danke für die Antwort, nur ich glaube wir reden noch etwas aneinander vorbei, wenn ich das richtig verstanden hab.

Also ich hab das Server VI, wo alle Variablen drauf laufen und der ganze Kram verwaltet wird mit neuer Variable hinzufügen, Prozessteuerung etc. Jetzt hab ich ganz viele Client VI's, die auf verschiedensten Rechnern laufen was meistens Messgeräte VI's sind, die irgendeinen Messwert ausspucken. Diesen Messwert kann ich einfach auf dem entferntem PC in die Variable schreiben, die schon vorher exisiert und konfiguriert wurde. Das ist sehr einfach und funktioniert problemlos.

[attachment=48582]

Nur ich kann halt nicht von LabView aus die Eigenschaft Beschriftung (oder auch jede andere Eigenschaft, wie Alarmgrenzen, etc., siehe das Fehlerbild oben) auf ähnliche Weise ändern, so dass nun diese neue Beschriftung/Einheit in der Variablenliste auf dem Server liegt und so alle Clients auch diese neue aktualisierte Einheit sehen können. Wie gesagt, auf dem Server sind alle aktuellen Zustände aller Variablen eingetragen und werden immer aktualisiert.

Das heißt, dieses Ändern der Eigenschaft muss auf dem Server geschehen, weil halt die Funktionalität nur da gegeben ist, auf entfernten PCs bekommt man diese tolle Fehlermeldung. Und der Plan war jetzt, dass die entfernten VI's Befehle an den Server senden um dort die Beschriftung/Einheit zu ändern.
Referenz-URLs