LabVIEWForum.de - Datenerfassung über C++ in LabVIEW exportieren

LabVIEWForum.de

Normale Version: Datenerfassung über C++ in LabVIEW exportieren
Du siehst gerade eine vereinfachte Darstellung unserer Inhalte. Normale Ansicht mit richtiger Formatierung.
Seiten: 1 2 3
Mglw. leichtOfftopic, aber ich wollte noch mal auf den folgenden Thread mit dem LabVIEW-MoveBlock Befehl hinweisen. Vielleicht nützt euch das?

http://www.LabVIEWforum.de/index.php?showtopic=5281

MfG, Jens
' schrieb:Ich möchte lediglich Bilder die ich von einer Kamera grabbe in LabVIEW darstellen.
Ein Bild schüttelst du doch bestimmt nicht aus dem Ärmel und fängst es mit einer Tüte auf. ;)Ich gehe mal davon aus, der Kamera-Hersteller liefert eine DLL (!) die man ansprechen kann, um ein Bild aufnehmen zu lassen und um es dannach abzuholen. Möglicherweise kannst du diese DLL direkt in LV einbinden - was schon vor dir mancher gemacht hat. Möglicherweise hast du aber auch ein C-Programm geschrieben, das selbst die Kamera bedienen kann. Auch das wäre kein Problem. Dieses Programm kannst du - auch wenn es eine eigene Oberfläche hat - als DLL auslegen. Dann kannst du in dieses Programm eine LV-Kompatible Schnittstelle implementieren.

Zitat: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?
"In einen C-Puffer schreiben" klingt für mich jetzt so, als ob du genau hierfür ein eigenen Programm geschrieben hast. Das würdest du dann aber auch als DLL hinbekommen.

[*grübel* *grübel*]Jetzt muss ich mir doch tatsächlich mal das mit dem CIN ankucken.[*grübel* *grübel*]


Noch ein Versuch:
Schon mal an ActiveX gedacht? Ich mach zwar sowas nicht, aber vielleicht geht das bei dir ja besser als DLL.
' schrieb:"In einen C-Puffer schreiben" klingt für mich jetzt so, als ob du genau hierfür ein eigenen Programm geschrieben hast. Das würdest du dann aber auch als DLL hinbekommen.
Richtig. Dafür existiert ein Programm. Hierfür verwende ich eine Bibliothek von Matrox (MIL) die mir sowas erleichtert. Darin sind Funktionen integriert die mir Bilder grabben und die Daten in einen Puffer schreiben. Ich kanns mir auch anzeigen lassen, aber ich finde hierfür LabVIEW besser geeignet da die Graphen mehr möglichkeiten der weiterverarbeitung haben. Also das C-Skript tut das was es soll. Bilder grabben und in einen Puffer schreiben. Diesen Puffer brauche ich jetzt in LabVIEW genauer, ich muss es einem Graphen in LabVIEW übergeben.
Dann war mein letzter Beitrag doch nicht so Offtopic.

Nochmal, guckst du hier:

http://www.LabVIEWforum.de/index.php?s=&am...ost&p=24665

MfG, Jens
' schrieb:Hierfür verwende ich eine Bibliothek von Matrox (MIL) die mir sowas erleichtert. Darin sind Funktionen integriert die mir Bilder grabben und die Daten in einen Puffer schreiben.
Bestimmt kann man diese Bibliothek auch in LV benutzen. (Wie das geht, weis ich aber nicht. Ich kenne ja die Bibliothek nicht.)

Nachtrag:
Hast du dir wenigstens mal die Linsks angekuckt und mal nachgelesen, wie das mit DLL's gehen würde?
' schrieb:Jetzt! Lach!

Der steckt in LabVIEW seit Version 2.5 damals aber nur für CINs erreichbar. Aber seit minimal 5.0 kann man den per DLL Aufrufknoten direkt erreichen. Habe ich auf den LabVIEW Foren und Info-LabVIEW wiederholt in den letzten 6 oder 7 Jahren oder so haarfein erklärt, bevor jemand bei NI scheinbar dachte, dass man das auch mal in einem Beispiel dokumentieren könnte.

Rolf Kalbermatter

Zitat stammt von dem Link den Jens G gepostet hat. Danke dafür schonmal.

Ich versuche dieses VI nachzubilden aber ohne Erfolg. rolfk schrieb, dass es das auch für CIN's gibt. Wie heisst dieser Block? Vieleicht komme ich damit hin?!
' schrieb:Ich versuche dieses VI nachzubilden
Welches VI willst du nachbilden? Das mit dem Move-Befehl? Das kannst du nicht nachbilden. Den Move-Befehl musst du herunterladen (siehe Link weiter oben in jenem Link), entsprechend beschalten und ausführen.

Im übrigen:
Der Move-Befehl ist dazu da, Unzulänglichkeiten einer Programmiersprache - ob LV, Delphi oder C++ - zu umgehen. Eigenlich soll man sowas gar nicht benutzen.
' schrieb:Welches VI willst du nachbilden? Das mit dem Move-Befehl? Das kannst du nicht nachbilden. Den Move-Befehl musst du herunterladen (siehe Link weiter oben in jenem Link), entsprechend beschalten und ausführen.

Im übrigen:
Der Move-Befehl ist dazu da, Unzulänglichkeiten einer Programmiersprache - ob LV, Delphi oder C++ - zu umgehen. Eigenlich soll man sowas gar nicht benutzen.

Ok, hab was schönes für CIN's gefunden gefunden. Using a CIN to Create an Array of Strings in LabVIEW

Ich möchte aber keine Strings in ein Array laden. Wo finde ich denn die makros für Zahlen? Hier mal mein Code:
<div class='codetop'>CODE</div><div class='codemain' style='height:200px;white-space:pre;overflow:auto'>
/* CIN source file */

#include "extcode.h"

/* stubs for advanced CIN functions */

/* Typedefs */

/* TD1 is an array of handles to LV strings */

typedef struct {
int32 dimSize;
int32 Numeric[1];
} TD1;
typedef TD1 **TD1Hdl;

MgErr CINRun(TD1Hdl Array);

MgErr CINRun(TD1Hdl Array)
{
#define ARRAYSIZE 6

MgErr err;
int32 i;

int *values[ARRAYSIZE] = {3,0,0,7,8,1};

err = SetCINArraySize((UHandle)Array, 0, ARRAYSIZE);
if (err) goto out;

(*Array)->dimSize=ARRAYSIZE;

for(i=0; i<ARRAYSIZE; i++)
{
MoveBlock(values[i], (*Array)->Numeric[1], 6);
}
return noErr;

out:
return err;
}</div>

Bekomme folgende Warnungen:
<div class='codetop'>CODE</div><div class='codemain' style='height:200px;white-space:pre;overflow:auto'>
Array.c(22): warning C4047: 'initializing' : 'int *' differs in levels of indirection from 'int'
Array.c(32): warning C4022: 'MoveBlock' : pointer mismatch for actual parameter 2</div>
Ok Leute, ich habs dann doch hinbekommen. Wollte nur noch das Ergebnis posten, falls jemand ähnliches machen möchte.

<div class='codetop'>CODE</div><div class='codemain' style='height:200px;white-space:pre;overflow:auto'>
/* CIN source file */

#include "extcode.h"
#include <windows.h>

UseDefaultCINInit
UseDefaultCINDispose
UseDefaultCINAbort
UseDefaultCINLoad
UseDefaultCINUnload
UseDefaultCINSave

/* Typedefs */

typedef struct {
int32 dimSize;
float64 Numeric[1];
} TD1;
typedef TD1 **TD1Hdl;

MgErr CINRun(TD1Hdl Array);

MgErr CINRun(TD1Hdl Array)
{
int32 i;
float64 *ArrayElementp;
MgErr err = noErr;
int32 AnzahlElemente;

int32 Zahlen[] = {1,2,3,4,5};

AnzahlElemente = 5;

(*Array)->dimSize = 5;
ArrayElementp = (*Array)->Numeric;
*ArrayElementp = 0;

for(i = 0; i < AnzahlElemente; i++)
{
*ArrayElementp = Zahlen[i];
ArrayElementp++;
}

return err;
}
</div>
' schrieb: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?

Ein Typecast wird nicht genügen. Dazu sind die Formate zu unterschiedlich respektive weiss C++ zu wenig über LabVIEW Datentypen. Du musst das C++ Array wohl schon eigenhändig ins LabVIEW Array kopieren. Ist aber ja keine so grosse Sache. In C müsstest Du das ohnehin tun.

Rolf Kalbermatter
Seiten: 1 2 3
Referenz-URLs