LabVIEWForum.de - Kommunikation 2er executables

LabVIEWForum.de

Normale Version: Kommunikation 2er executables
Du siehst gerade eine vereinfachte Darstellung unserer Inhalte. Normale Ansicht mit richtiger Formatierung.
Seiten: 1 2
Guten Morgen,

ich mal wieder ... ich bin gerad dabei mir zwei VIs zu bauen die später jeweils eine exe darstellen. Jetzt habe ich bisher immer über eine globale Variable den Datenaustausch zwischen diesen beiden VIs realisiert. Leider funktioniert dies ja bei zwei executables nicht mehr, wenn ich das so richtig verstanden habe. Wie löst man sowas am besten? Die beiden Programm liegen jeweils auf dem selbem PC und im selbem Ordner. Deshalb würde ich ungern über ein Protokoll gehen.

Gruß
Daniel
Du kannst auch "Shared Variables" nehmen (ab LabVIEW 8.0!), wenn Du nicht die TCP/IP-Funktionen willst. Oder Du schreibst die Daten in eine Textdatei.... Was sind denn das für Daten, die Du hin- und herverschieben willst?

Gruß Markus
Moin Daniel
Eine andere Möglichkeit ist Shared Memory.

Gruß Holger
Im Prinzip nichts wildes, also einmal eine Art Kommunikationsaufbau der mit Boolean läuft und dann Messdaten und 2 strings.

Nun habe ich ja leider nicht die Möglichkeit auf 8.0 zu kommen, mal wieder nicht. Wie is das mit den globalen, hab ich mich da vielleicht verlesen oder ist es wirklich so das diese nur dann verwendet werden können wenn es um eine exe und ein VI geht? So habe ich das ganze nämlich auch hinbekommen nur mit zwei exen geht das ganze halt nicht mehr.

// Edit: eine txt kommt für mich eigentlich nicht in Frage da ich möchte das die eine Seite Daten reinschreibt und die andere sie rausnimmt, also sie danach auch wirklich weg sind. Das wäre wohl ein bisschen viel Aufwand mit einer txt und string suchen und und und...
(24.10.2011 08:28 )M@rRy schrieb: [ -> ]Wie is das mit den globalen, hab ich mich da vielleicht verlesen oder ist es wirklich so das diese nur dann verwendet werden können wenn es um eine exe und ein VI geht? So habe ich das ganze nämlich auch hinbekommen nur mit zwei exen geht das ganze halt nicht mehr.
Da musst du dich verlesen haben. Eine globale LV-Variable ist natürlich nur innnerhalb einer "Instanz" bekannt, also nur innerhalb der LV-Umgebung oder bei einer Exe nur innerhalb der Exe.

Also schau den Link von BNT oder bau eine Kommunikation per TCP/IP auf. Oder per UDP. Oder, oder, oder.

Gruß, Jens
(24.10.2011 08:47 )jg schrieb: [ -> ]Da musst du dich verlesen haben. Eine globale LV-Variable ist natürlich nur innnerhalb einer "Instanz" bekannt, also nur innerhalb der LV-Umgebung oder bei einer Exe nur innerhalb der Exe.

Genau das meinte ich damit. Hab halt probeweise anstelle zweier exen eine exe mit bekanntem VI gebaut, da ging es aber oke dann muss ich jetzt schauen was ich da am besten nehme. Hatte halt auf den Speicher gebaut weil das eine Programm deutlich langsamer läuft als das andere, was gewollt ist und somit nicht jeden Wert mitbekommt. Das ist auch nicht schlimm und sogar gewollt aber bei einer festen Verbindung, wie sie durch TCP ja eigentlich vorhanden ist, wird es interessant. Andererseits weiß ich nicht ob ein UDP-Paket einfach "futsch" is wenn es von der Gegenseite ignoriert wird. Gibt es dazu vielleicht noch eine Rat mit auf den Weg zurück ins WWW?
(24.10.2011 08:54 )M@rRy schrieb: [ -> ]
(24.10.2011 08:47 )jg schrieb: [ -> ]Da musst du dich verlesen haben. Eine globale LV-Variable ist natürlich nur innnerhalb einer "Instanz" bekannt, also nur innerhalb der LV-Umgebung oder bei einer Exe nur innerhalb der Exe.

Genau das meinte ich damit. Hab halt probeweise anstelle zweier exen eine exe mit bekanntem VI gebaut, da ging es aber oke dann muss ich jetzt schauen was ich da am besten nehme. Hatte halt auf den Speicher gebaut weil das eine Programm deutlich langsamer läuft als das andere, was gewollt ist und somit nicht jeden Wert mitbekommt. Das ist auch nicht schlimm und sogar gewollt aber bei einer festen Verbindung, wie sie durch TCP ja eigentlich vorhanden ist, wird es interessant. Andererseits weiß ich nicht ob ein UDP-Paket einfach "futsch" is wenn es von der Gegenseite ignoriert wird. Gibt es dazu vielleicht noch eine Rat mit auf den Weg zurück ins WWW?

Wenn Du statt einer globalen Variable ein LabVIEW 2 Style Global (oder intelligente Global, oder Funktionsglobal) verwendest hast Du schon fast alles was nötig ist. Mittels VI Server kannst Du dann dieses VI in der anderen Applikationsinstanz aufrufen und ausführen. Geht alles zwar über TCP/IP aber LabVIEW macht das ganze Protokoll für Dich.

Grundsätzlich funktioniert das ganz genau gleich wie eine normale Call By Reference Operation mittels VI Server, nur machst man vor dem Open VI Reference auch noch eine explicite Open Application Reference, der man die Addresse und Portnumber der anderen Applikation übergibt. Dann in der anderen Applikation auch noch sicherstellen dass man den VI Server über TCP/IP enabled hat und eine Portnumber konfiguriert hat et voila!
Du hast dazu nicht zufällig ein auf 7.1 lauffähiges Beispiel parat? Ich muss gestehen das klingt sehr gut, ich bastel auch gerade schon an eine TCP-Verbindung, jedoch bin ich mir da noch überhaupt nicht so wirklich sicher. Erstes Problem ist schon, welche IP und wonach suche ich den Port aus? ...
(24.10.2011 09:43 )M@rRy schrieb: [ -> ]Du hast dazu nicht zufällig ein auf 7.1 lauffähiges Beispiel parat? Ich muss gestehen das klingt sehr gut, ich bastel auch gerade schon an eine TCP-Verbindung, jedoch bin ich mir da noch überhaupt nicht so wirklich sicher. Erstes Problem ist schon, welche IP und wonach suche ich den Port aus? ...
Laufen beide Exen auf demselben Rechner? Dann IP 127.0.0.1 = localhost. Portauswahl bleibt dir überlassen.

Und noch ein Nachtrag zu UDP: Da kannst du einfach Nachrichten senden. Wenn kein Empfänger da ist, der das Paket ausliest, dann geht es im Datennirvana verloren.

Gruß, Jens

Offtopic2
Was du Entwicklungs-Zeit einsparen könntest mit einer neueren LV-Version. Kriegst du das nicht an den entsprechenden Stellen durch?!
(24.10.2011 09:43 )M@rRy schrieb: [ -> ]Du hast dazu nicht zufällig ein auf 7.1 lauffähiges Beispiel parat? Ich muss gestehen das klingt sehr gut, ich bastel auch gerade schon an eine TCP-Verbindung, jedoch bin ich mir da noch überhaupt nicht so wirklich sicher. Erstes Problem ist schon, welche IP und wonach suche ich den Port aus? ...

So direkt hab ich nichts was sich schnell in ein einfaches Beispiel umsetzen liesse. Aber der Example Finder ist im Hinblick auf VI Server eine recht interessante Fundgrube (und ungefähr 200000 anderen Dingen Cool). Das einzige Problemchen ist die Konfiguration der endgültigen Exe. In LabVIEW konfigurierst Du das alles cool in den Preferences aber danach musst Du diese Einstellungen vom LabVIEW.ini file in Dein <MyExe>.Ini file kopieren.

Für den Rest gilt was jg schon sagte: localhost als Addresse solange alles auf dem selben Rechner bleibt und eine selbstausgewählte Portnumber, am besten zwischen 48000 und 65535.
Seiten: 1 2
Referenz-URLs