Hallo,
ich versuche Daten einer Thermokamera in ein LabVIEW VI zu importieren, da die Darstellung in LabVIEW einfacher ist. Dazu verwende ich eine Bibliothek für Industrielle Bildverarbeitung (Matrox Imaging Library). Da die Anbindung der Kamera durch diese Bibliothek stattfindet, wird die Schnittstelle in C++ geschrieben. Die Daten werden in einen Imagepuffer geschrieben. Jetzt meine Frage: Wie bekomme ich diese Daten in ein Format das LabVIEW versteht (Array z.B.). Da ich auch mit einem reinterpret_cast nicht in TD1* konvertieren kann. Übrigens wird die Einbindung in LabVIEW über eine CIN vorgenommen.
Danke :top:
' schrieb:Ein wenig , aber nach Möglichkeit: Vergiss CIN's. Dazu raten alle LV-Experten.
Siehe z.B. hier: http://www.LabVIEWforum.de/index.php?showtopic=6373
MfG, Jens
Naja, ich habe keine schlechte Erfahrung mit CIN's. Aber das sollte auch nicht mein Problem sein. Ich will einzig und allein die eingelesenen Daten in LabVIEW darstellen. Hab auch mal versucht ein C++ Array anzulegen und in ein LabVIEW Array zu schreiben; ohne Erfolg.
Nicht mehr und nicht weniger als sowas:
<div class='codetop'>CODE</div><div class='codemain' style='height:200px;white-space:pre;overflow:auto'>int32 cppArray[] = {1,2,3,4,5}</div>
Selbst das bekomme ich nicht ins richtige Format. Das kann doch eigentlich nicht so schwer sein, oder?
Danke :top:
' schrieb:Ich will einzig und allein die eingelesenen Daten in LabVIEW darstellen. Hab auch mal versucht ein C++ Array anzulegen und in ein LabVIEW Array zu schreiben; ohne Erfolg.
Nicht mehr und nicht weniger als sowas:
Code:
int32 cppArray[] = {1,2,3,4,5}
Selbst das bekomme ich nicht ins richtige Format. Das kann doch eigentlich nicht so schwer sein, oder?
Hast du es mal über einen DLL-Knoten probiert? Solange es sich nur um so ein einfaches Array handelt, kannst du das per DLL zwischen zwei Modulen austauschen.
' schrieb:Hast du es mal über einen DLL-Knoten probiert? Solange es sich nur um so ein einfaches Array handelt, kannst du das per DLL zwischen zwei Modulen austauschen.
Es wird natürlich kein so einfaches Array bleiben. Das war nur mal ein Test um herauszufinden wie ich das Array anpacken muss um es ins richtige Format zu bringen. Hab noch nie mit DLL-Knoten gearbeitet. Bei uns wird eigentlich ausschließlich mit CIN's gearbeitet. Das funtkioniert auch bestens. Mein Problem besteht eigentlich nur aus der Umwandlung (Typecast).
Ich könnte mal versuchen ein Array im Frontpanel anzulegen welches ich unsichtbar mache. Aber ob das die schönste Lösung ist?
' schrieb:Ich könnte mal versuchen ein Array im Frontpanel anzulegen welches ich unsichtbar mache. Aber ob das die schönste Lösung ist?
Also ich habe mal versucht ein unsichtbares Array auf dem Frontpanel an mein C-Code zu übergeben, es dort mit Werten zu Füllen und an ein Array in LabVIEW zurückzugeben. Leider auch das ohne Erfolt. Ich bekomme einfach nicht die Konvertierung von int bzw int32 ect. nach TD1. Hat noch niemand so ein Code geschrieben? Datenaufnahme mittels C-Code in ein Array und dann an LanView übergeben?
Danke
' schrieb:Hat noch niemand so ein Code geschrieben? Datenaufnahme mittels C-Code in ein Array und dann an LanView übergeben?
Ich will nochmals, so wie Jens G. schon am Anfang, darauf hinweisen, dass CIN-Komponenten veraltet sind. Eigentlich werden die in neueren LV-Versionen nicht mehr gepflegt - nur noch mitgeschleift.
Ich selbst verwende für sowas keine CIN-Knoten, wenn dann nur DLL.
Wie sieht denn dein TD1 aus? Kannst du das struct hierzu mal posten?
' schrieb:Wie sieht denn dein TD1 aus? Kannst du das struct hierzu mal posten?
Klar, die Struct sieht folgendermaßen aus:
<div class='codetop'>CODE</div><div class='codemain' style='height:200px;white-space:pre;overflow:auto'>typedef struct {
int32 dimSize;
float64 Numeric[1];
} TD1;
typedef TD1 **TD1Hdl;</div>
[quote=''][code]typedef struct {
' schrieb:Erstens:
"TD1 **TD1Hdl" - also ein Pointer auf eine Variable, die den Pointer auf den Struct enthält - das geht nicht mal mit DLL. Nicht, weil das mit dem Verfahren einer DLL nicht ginge, sondern weil LV als Datenflusssteuerung für diese Art des Variablenhandlings nicht ausgelegt ist (respektive hat meines Wissens noch niemand so ein Feature implementiert). Und was mit DLL nicht geht, geht garantiert auch nicht mit CIN.
Zweitens:
Laut Deklaration ist Numeric ein Double-Array mit nur einem Wert. Die vorstehende Variable dimSize lässt aber vermuten, dass @Numeric[0] lediglich der Anfang eines Double-Speicherbereiches der Länge dimSize ist. Dieses ist ein sehr interessantes Verfahren zum Datenaustauschen! - Allerdings nicht geeignet für LV. Zumindest mit Standard-Elementen kann man das - sollte es so sein - nicht machen. Hier müsste man was außen herum programmieren.
Nichtsdestoweniger hast du immer noch die Möglichkeit, zu warten ob sich vielleicht doch noch ein CIN-Experte hier im Forum findet.
Ok, danke schonmal für die Info. Ich wäre auch Dankbar für jeden anderen Vorschlag. Ich möchte lediglich Bilder die ich von einer Kamera grabbe in LabVIEW darstellen. Ich dachte es wäre das einfachste die Bilder in ein C-Puffer zu schreiben und dann einfach LabVIEW übergeben. Wenn das so nicht funktioniert, geht es dann irgendwie anders?