LabVIEWForum.de
C#-Daten in Labview empfangen - Druckversion

+- LabVIEWForum.de (https://www.labviewforum.de)
+-- Forum: LabVIEW (/Forum-LabVIEW)
+--- Forum: LabVIEW Allgemein (/Forum-LabVIEW-Allgemein)
+---- Forum: ActiveX & .Net (/Forum-ActiveX-Net)
+---- Thema: C#-Daten in Labview empfangen (/Thread-C-Daten-in-Labview-empfangen)



C#-Daten in Labview empfangen - Rauth - 15.08.2012 10:59

Hallo zusammen,
vielleicht kann mir jemand bei folgendem Problem weiterhelfen:

Ich habe eine C# .exe die regelmäßig in einer Void Positionsdaten (x/y) errechnet.
Normalerweise sind die Daten zur Maussteuerung, ich brauche sie aber in Labview.

Wie bekomme ich die Daten also herüber?
Erster Gedanke wäre eine .dll an die die Daten geschickt werden und die dann wiederum in bestimmten Zeitintervallen von LV abgerufen werden.
Die Zeitintervalle wären aber nicht das präziseste, gibt es da auch eine saubere Lösung?
Meine Labviewerfahrung diesbezüglich hält sich in Grenzen, bisher habe ich nur .dll-Funktionen mit LV aufgerufen.

Danke und Grüße,

Rauth


RE: C#-Daten in Labview empfangen - VDB - 15.08.2012 11:59

Am einfachsten per TCP Kommunikation über Lokalhost.

VDB


RE: C#-Daten in Labview empfangen - VDB - 15.08.2012 14:10

Diese Aufgabe hat mich dann doch gereizt... Big Grin

Unter .NET bietet das Windows Communication Framework eine gute Lösung für solche Aufgaben.
LabVIEW bietet die Möglichkeit auf relativ einfache Weise .NET-Assemblies einzubinden. Ich habe mal gebastelt und einen WCF Client programmiert der sich in LabVIEW einbinden lässt:

Lv10 & .NET Framework 3.0

[attachment=41101]
  • ZIP Datei auspacken
  • Im Verzeichnis "..\WCF_LabVIEW\ClientTest LabVIEW" gehen und das LabVIEW Projekt öffnen
  • Im Projektbaum die Consolen-Anwendung ServerTest.exe doppelklicken
  • Jetzt ClientTest.exe doppelklicken. Das Programm meldet "Data from server:0,436386971472011 0,762276596744674. Press any key to exit" zurück wenn alles geklappt hat
  • ClientTest.exe beenden durch Tastendruck. ServerTest weiter laufen lassen!
  • Jetzt TestClient.vi öffnen und ausführen. Dieses VI holt die Daten kontinuierlich vom Server ab.

[attachment=41098]

Den kompletten C# Sourcecode findet Ihr im Anhang. Als Protokoll wird hier Named Pipes (localhost) genutzt, natürlich können auch alle anderen WCF Addresses, Bindings und Contracts genutzt werden.

VDB


RE: C#-Daten in Labview empfangen - rolfk - 17.08.2012 09:59

(15.08.2012 10:59 )Rauth schrieb:  Hallo zusammen,
vielleicht kann mir jemand bei folgendem Problem weiterhelfen:

Ich habe eine C# .exe die regelmäßig in einer Void Positionsdaten (x/y) errechnet.
Normalerweise sind die Daten zur Maussteuerung, ich brauche sie aber in Labview.

Wie bekomme ich die Daten also herüber?
Erster Gedanke wäre eine .dll an die die Daten geschickt werden und die dann wiederum in bestimmten Zeitintervallen von LV abgerufen werden.
Die Zeitintervalle wären aber nicht das präziseste, gibt es da auch eine saubere Lösung?
Meine Labviewerfahrung diesbezüglich hält sich in Grenzen, bisher habe ich nur .dll-Funktionen mit LV aufgerufen.

Danke und Grüße,

Rauth

Das ruft nach Interprocesskommunikation. Die einfachsten Varianten dazu sind alle Arten von Netzwerkkommunikation wie TCP/IP, Pipes, sockets, etc, ein andere Möglichkeit ist Shared Memory.
VDB hat ja schon ein nettes Beispiel beieinander gebaut.

Die Idee mit der shared DLL ist eine Sackgasse. Windows lädt mit Ausnahme von einigen privilegierten Kernel Komponeneten jede DLL in den eigenen Speicher eines Prozesses. Die DLL XYZ.DLL in Prozess A hat keinerlei Zugang zu Daten in DLL XYZ.DLL im Prozess B und umgekehrt.


RE: C#-Daten in Labview empfangen - Rauth - 17.08.2012 21:25

Ah gut, Danke.
Habe mich schon gewundert wieso das nicht recht funktionieren wollte.

Werde das mit TCP bald mal ausprobieren, warte gerade noch auf Komponenten die zum ordentlichen Testen der Exe nötig sind.