LabVIEWForum.de
Grundlegene Möglichkeiten - C -> Labview - Druckversion

+- LabVIEWForum.de (https://www.labviewforum.de)
+-- Forum: LabVIEW (/Forum-LabVIEW)
+--- Forum: LabVIEW Allgemein (/Forum-LabVIEW-Allgemein)
+--- Thema: Grundlegene Möglichkeiten - C -> Labview (/Thread-Grundlegene-Moeglichkeiten-C-Labview)

Seiten: 1 2


Grundlegene Möglichkeiten - C -> Labview - labview2013 - 20.02.2013 10:50

Hallo,

welche grundlegenden Möglichkeiten gibt es zwischen einem LabView und C Programm Daten auszutauschen?
Die Daten werden vom C Programm erzeugt und müssen zur Laufzeit in LabView eingebunden und weiterverarbeitet werden.

Gruß


RE: Grundlegene Möglichkeiten - C -> Labview - GerdW - 20.02.2013 11:07

Hallo labview2013,

die gleichen Möglichkeiten, die auch zwischen 2 C-Programmen (oder C- und C++ oder C- und Java oder beliebige andere Kombinationen...) bestehen.

- Dateien
- Netzwerkverbindungen ("localhost")
- Clipboard des Betriebssystems
- ...

Du musst immer im Hinterkopf haben, dass Programme in einem modernen Multitasking-OS wie Windows jeweils in ihrem eigenen abgeschirmten Addressbereich laufen und nicht einfach auf den Speicher eines anderen Programms zugreifen können!


RE: Grundlegene Möglichkeiten - C -> Labview - alieninvader - 20.02.2013 12:50

Servus,

alternativ besteht natürlich die Möglichkeit, den C- Code als dll zu kompilieren und anschließend in LabView einzubinden. Damit hätte man sich auch des Problems entledigt, dass man das C- Programm separat starten muss.

Gruß

Stefan


RE: Grundlegene Möglichkeiten - C -> Labview - labview2013 - 20.02.2013 13:01

Das mit der DLL geht leider nicht.

Ist es den nicht möglich einfach einen Adressbereich zu allokieren und diesen dann dafür zu nutzen?
Ich schätze mal wenn nicht, ist ein localhost die Laufzeit schnellste Verbindung ?

Gruß


RE: Grundlegene Möglichkeiten - C -> Labview - Wall-E - 20.02.2013 13:44

(20.02.2013 13:01 )labview2013 schrieb:  Ist es den nicht möglich einfach einen Adressbereich zu allokieren und diesen dann dafür zu nutzen?
Ich kann mir nicht vorstellen, dass das geht, solange der Speicherverwalter (also das OS) es nicht explizit unterstützt. Denn an sich soll es ja die Speicherbereiche von zwei Programmen auf jeden Fall getrennt halten. Ist aber nur so ein Bauchgefühl.

Hilfreicher vielleicht:
Laut diesem Whitepaper (http://www.ni.com/white-paper/4679/en) kann man "Shared Variables" auch aus C heraus beschreiben. Das sollte auf jeden Fall rattenschnell sein - habe ich aber auch noch nie gemacht und viel mehr als das es geht, steht in dem Whitepaper auch nicht drin. Die Shared Variables sind nicht ganz so trivial und haben einige Tücken, aber sie sind schnell, unterstützen FIFO-Buffering, Timestamps, ... vielleicht hilft es ja.

EDIT: Hier steht ein Bisschen mehr dazu wie das geht. http://stackoverflow.com/questions/4596676/share-a-variable-between-c-and-labview


RE: Grundlegene Möglichkeiten - C -> Labview - BNT - 20.02.2013 14:21

Hi
Sieh Dir doch mal diesen Beitrag an. Stichwort: Shared Memory.

Beitrag 14 im Thread Shared Memory

Gruß Holger


RE: Grundlegene Möglichkeiten - C -> Labview - GerdW - 20.02.2013 16:09

Hallo Holger,

so sehr ich diesen Ansatz mit der SharedMemory-DLL bewundere, aber: Es sieht schon sehr nach "Hack" aus...

Unterstützt diese DLL auch Win7-64bit und Win8?

@labview2013:
Zitat:Ist es den nicht möglich einfach einen Adressbereich zu allokieren und diesen dann dafür zu nutzen?
Eben, es ist nicht einfach möglich. Selbst wenn du in einer Applikation einen Speicherbereich reservierst, nutzt es dem anderen Prozess nichts, dessen Speicheradresse zu kennen. Warum? Weil alles virtuelle Adressen sind und jeder Prozess seinen eigenen Adressbereich bekommt - womöglich sogar identische (aber halt virtuelle) Adressen...

Der Umweg über die genannte DLL mag zwar gehen. Aber ich habe da so meine Zweifel, was die Sicherheitskonzepte aktueller Betriebssysteme angeht (zertifizierte DLLs etc.). Wir sind schon lange aus der MS-DOS/CP-M/C64/u.a-Ära entwachsen, wo man wild im Speicher rumfuhrwerken konnte...


RE: Grundlegene Möglichkeiten - C -> Labview - labview2013 - 20.02.2013 17:06

Vielen Dank für die Zahlreichen Antworten, ich werde das Problem als Localhost im Netzwerk lösen.

Danke!


RE: Grundlegene Möglichkeiten - C -> Labview - BNT - 20.02.2013 18:45

(20.02.2013 16:09 )GerdW schrieb:  so sehr ich diesen Ansatz mit der SharedMemory-DLL bewundere, aber: Es sieht schon sehr nach "Hack" aus...

Unterstützt diese DLL auch Win7-64bit und Win8?

Der Umweg über die genannte DLL mag zwar gehen. Aber ich habe da so meine Zweifel, was die Sicherheitskonzepte aktueller Betriebssysteme angeht (zertifizierte DLLs etc.). Wir sind schon lange aus der MS-DOS/CP-M/C64/u.a-Ära entwachsen, wo man wild im Speicher rumfuhrwerken konnte...

Hi Gerd

Ich stimme Dir vollständig zu.

Das SharedMemory war auch nur als Hack von uns gedacht (und nur unter Windows XP 32Bit getestet) und wird von mir nicht als dauerhafte Lösung angepriesen. Ich weise nur darauf hin, dass es unter bestimmten Umständen möglich ist. Jeder Entwickler muss schon auf Grund seiner Anforderungen für sich selbst entscheiden, ob es eine Lösung sein kann.

Erschwerend kommt ja oft noch das Zeitverhalten von verschiedenen Applikationen dazu. Ich favorisiere den Austausch von Daten über das Netzwerk. Dann können verschiedene Programme auch zwanglos auf verschiedenen Rechner laufen. Das erhöht die Skalierbarkeit. Über den localhost kann man ja auch ziemlich gute Transferraten erreichen, das ist fast so gut, wie das SharedMemory.

Man sollte auch unterscheiden, ob die Daten unbedingt synchron ausgetauscht werden müssen, oder ob nicht auch ein asynchroner Austausch genügt. Für die synchrone Peer-2-Peer Kommunikation bieten sich einfache TCP/IP-Sockets an. Benötigt man eine Art Netzwerk-Transaktion könnte DIM (http://www.cern.ch/dim) in Frage kommen. DIM bietet zudem die Möglichkeit, verteilte heterogene Systeme miteinander zu verheiraten. Für die asynchrone Kommunikation kommen einfacherweise SharedVariablen oder Networkstreams in Frage. Es bieten sich aber auch andere Möglichkeiten an DataSocket, OPC oder andere echtzeitfähige Prozessdatenbanken an.

Gruß Holger


RE: Grundlegene Möglichkeiten - C -> Labview - labview2013 - 21.02.2013 13:09

Danke für die Antworten,

eine abschließende Frage beschäftigt mich aber noch. In welchr Form soll das C Programm die Daten verschicken. Habe das unter LabView ausprobiert mit TCP Client und Server und es funktioniert. Jedoch ist mir nicht ganz klar in welcher aufbereiteten Form in C die Daten an den Port geschickt werden sollen.

Vielen Dank