02.07.2013, 10:24
Beitrag #1
|
lupus022
LVF-Grünschnabel
Beiträge: 42
Registriert seit: May 2013
2012
-
DE
|
Pointer auf Array mit Labview übertragen und darstellen
Hallo,
ich habe folgende Problemstellung:
Ich habe eine cpp-DLL, aus der mir eine Funktion einen Pointer auf ein 2D-Array mit Werten übergibt. Dieses Array würde ich gerne in Labview graphisch darstellen (Übergabe der Breite und Länge des 2D-Arrays ist schon geregelt). Wie mache ich denn das am dümmsten? Kann LabView über den Pointer das Array auslesen? Falls nein, wie übergebe ich das Array sonst am besten?
Vielen Dank
|
|
|
02.07.2013, 10:44
Beitrag #2
|
jg
CLA & CLED
Beiträge: 15.864
Registriert seit: Jun 2005
20xx / 8.x
1999
EN
Franken...
Deutschland
|
RE: Pointer auf Array mit Labview übertragen und darstellen
Such mal nach dem Schlagwort "MoveBlock".
z.B. hier: https://decibel.ni.com/content/docs/DOC-9091
Gruß, Jens
Wer die erhabene Weisheit der Mathematik tadelt, nährt sich von Verwirrung. (Leonardo da Vinci)
!! BITTE !! stellt mir keine Fragen über PM, dafür ist das Forum da - andere haben vielleicht auch Interesse an der Antwort!
Einführende Links zu LabVIEW, s. GerdWs Signatur.
|
|
|
03.07.2013, 10:22
Beitrag #4
|
lupus022
LVF-Grünschnabel
Beiträge: 42
Registriert seit: May 2013
2012
-
DE
|
RE: Pointer auf Array mit Labview übertragen und darstellen
Ich habe ein 2D-Array mit Integer-Werten. Dieses besitzt keine feste Größe, die Anzahl der Reihen und Spalten werden erst zur Laufzeit an Labview übergeben.
Ich habe vor, dieses Array entweder mittels der Boost-Library zu erstellen, oder mittels malloc/new. Könnt ihr mir mit diesen Informationen weiterhelfen? Eindimensionale Arrays mittels malloc kann ich dank dem Link von jg übergeben.
Vielen Dank!
|
|
|
03.07.2013, 22:13
Beitrag #6
|
lupus022
LVF-Grünschnabel
Beiträge: 42
Registriert seit: May 2013
2012
-
DE
|
RE: Pointer auf Array mit Labview übertragen und darstellen
Aktuell sieht der Code bzw. die zuständige Funktion so aus:
Code:
__declspec(dllexport) int read_files(std::string CCD_Filename, int CCD_Filenumbers, std::string Daisy_Filename)
{
std::ifstream Daisy_in(Daisy_Filename, std::ifstream::in);
std::string inputline;
std::vector<std::string> tempstr;
int i = 1;
do
{
std::string CCD_Filename = boost::lexical_cast<string>(i);
CCD_Filename = CCD_Filename + ".txt";
std::ifstream CCD_in(CCD_Filename, std::ifstream::in);
while(!CCD_in.eof())
{
int j = 0;
std::getline(CCD_in, inputline);
boost::split(tempstr, inputline, boost::is_any_of("\t"));
std::vector<float> v;
for(unsigned int a = 0; a < tempstr.size(); a++)
{
std::istringstream iss(tempstr[a]);
std::copy(std::istream_iterator<float>(iss), std::istream_iterator<float>(), std::back_inserter(v));
};
std::get<0>(DATA[j]) = v[0];
std::get<1>(DATA[j]) = v[1];
j++;
};
CCD_in.close();
i++;
if(i > CCD_Filenumbers)
break;
}while(!Daisy_in.eof());
return 0;
};
Es fehlt noch die Verknüpfung mit zwei weiteren Werten, sodass ich am Ende ein Tupel-Array aus <int, int, std::tuple<float,float>> habe.
Dieses Tupel-Array soll dann umgeformt werden zu einem Tupel-Array mit <float, float, std::tuple<int, int>>. Aufgrund des Einlesevorgangs muss ich diesen Weg gehen, zumindest sehe ich keinen anderen. An LabView selbst soll nur ein Tupel mit den Informationen <float, std::tuple<int, int>> zurückgegeben werden. Daraus soll Labview eine graphische 2D-Matrix erstellen (das int-Tupel gibt den Ort an, der float-Wert die "Farbinformation").
|
|
|
03.07.2013, 23:00
Beitrag #7
|
lupus022
LVF-Grünschnabel
Beiträge: 42
Registriert seit: May 2013
2012
-
DE
|
RE: Pointer auf Array mit Labview übertragen und darstellen
Edit: Obiger Code und Ansatz kann als hinfällig betrachtet werden, ich habe eine Lösung gefunden, bei der ich deutlich weniger zu handeln habe (zwei 1d-Arrays, ein 2d-Array) und dieses auch noch einfach an Labview übergeben kann. Code kommt dazu morgen.
Vielen Dank!
|
|
|
03.07.2013, 23:19
Beitrag #8
|
|
|
04.07.2013, 07:04
Beitrag #9
|
lupus022
LVF-Grünschnabel
Beiträge: 42
Registriert seit: May 2013
2012
-
DE
|
RE: Pointer auf Array mit Labview übertragen und darstellen
Das übertragene Array enthält ja auch nur noch Integer-Werte, das sollte also nicht stören, oder?
|
|
|
04.07.2013, 08:18
(Dieser Beitrag wurde zuletzt bearbeitet: 04.07.2013 08:22 von rolfk.)
|
rolfk
LVF-Guru
Beiträge: 2.305
Registriert seit: Jun 2007
alle seit 6.0
1992
EN
2901GG
Niederlande
|
RE: Pointer auf Array mit Labview übertragen und darstellen
(04.07.2013 07:04 )lupus022 schrieb: Das übertragene Array enthält ja auch nur noch Integer-Werte, das sollte also nicht stören, oder?
Also
__declspec(dllexport) int read_files(std::string CCD_Filename, int CCD_Filenumbers, std::string Daisy_Filename)
hat keinerlei Arrays! Was meinst Du den genau?
So wie das aussieht liest Du in Deinem C code ein File ein dass Daten enthält. Wie Du die Daten so in LabVIEW kriegen willst ist mir ziemlich undeutlich und nur zu Deiner Information LabVIEW hat auch FileIO Funktionen die sowohl für String als auch binäre Daten funktionieren. Damit erübrigt sich wahrscheinlich jegliche C Programmierung und damit verbundene Interfaceprobleme komplet für den Code in Deinem Post.
|
|
|
| |