INFO: Dieses Forum nutzt Cookies...
Cookies sind für den Betrieb des Forums unverzichtbar. Mit der Nutzung des Forums erklärst Du dich damit einverstanden, dass wir Cookies verwenden.

Es wird in jedem Fall ein Cookie gesetzt um diesen Hinweis nicht mehr zu erhalten. Desweiteren setzen wir Google Adsense und Google Analytics ein.


Antwort schreiben 

Pointer auf Array mit Labview übertragen und darstellen



Wenn dein Problem oder deine Frage geklärt worden ist, markiere den Beitrag als "Lösung",
indem du auf den "Lösung" Button rechts unter dem entsprechenden Beitrag klickst. Vielen Dank!

09.07.2013, 09:01 (Dieser Beitrag wurde zuletzt bearbeitet: 09.07.2013 09:04 von rolfk.)
Beitrag #17

rolfk Offline
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 16:05 )lupus022 schrieb:  Wenn ich derartige Arrays mit dem LV Memory Manager erstelle, dann habe ich doch immer noch das Problem, dass sie sich auflösen, sobald die Funktion wieder beendet wird, oder nicht (Was damit an der Situation nichts ändern würde)?
Ach ja, noch eine Frage: Wie erstelle ich denn ein 2D-Long-Array in Labview als Datensenke? (Ähnlich wie der Ausgang in angehängtem Bild)
Vielen Dank!

Also was meinst Du hier wieder mit einer Datensenke? Das ist ein Ausgang oder Indicator und das Letzte was ich das nennen würde ist eine Datensenke, denn die Daten verschwinden ja nicht darin, sondern kommen ja eigentlich gerade damit aus dem VI heraus.

Wenn Du unbedingt auf C beharren willst statt alles einfach in LabVIEW zu machen solltest Du Dir ein paar Dinge überlegen. Erstens ist aus Deinem Code ersichtlich dass alle Reihen und Kolonnen jeweils die selbe Länge haben. Es ist deshalb viel sinnvoller die Daten in ein richtiges zweidimensionales Array (das als ein einziger Speicherbereich angelegt ist) abzuspeichern dann als ein Array von Pointern zu Arrays.

Das ergäbe dann so etwas in dieser Art:

Code:
int32 C_function(char *path, int32 *array, int32 rows, int32 cols)
{
     for (long c = 0; c < cols; c++)
     {
         for (long r = 0; r < rows; r++)
         {
               *array++ = something;
         }          
     }
     return noErr;
}

Und ja man muss zuvor wissen wieviele Kolonnen und Reihen das Array hat und man muss dieses auch in LabVIEW vor dem Aufruf in der entsprechenden Grösse initialisieren (Initialize Array). Der Array Parameter wird dann als Array, 2 Dimensional, C Array Data Pointer konfiguriert.

Wenn Du das anders machen willst ist die nächstbessere Weise um in Deinem C Code mit richtigen LabVIEW Arrays zu arbeiten.

Code:
#include "extcode.h"

typedef struct {
    int32 dimSize1;
    int32 dimSize2;
    int32 elms[];
} 2DIntArray, **2DIntArrayHdl;

int C_function(char *path, 2DIntArrayHdl *array)
{
     MgErr err;
     int32 rows, cols;

     // find the number of rows and columns
     rows = x
     cols = y;

     // Resize the LabVIEW array handle
     err = NumericArrayResize(iL, 2, (UHandle)array, rows * cols);
     if (!err)
     {
         int32 *ptr = (**array)->elms;
         for (long c = 0; c < cols; c++)
         {
              for (long r = 0; r < rows; r++)
              {
                  ptr++ = something;
              }          
          }
          (**array)->dimSize1 = rows;
          (**array)->dimSize2 = cols;
     }
     return err;
}

Eventuel musst Du dimSize1 und dimSize2 vertauschen, bin gerade zu faul um das zu testen. Big Grin
Hier müsste man den Array Parameter als Array, 2 Dimensional, Pointer to Handle konfigurieren.

Rolf Kalbermatter
Technische Universität Delft, Dienst Elektronik und Mechanik
https://blog.kalbermatter.nl
Webseite des Benutzers besuchen Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
Antwort schreiben 


Nachrichten in diesem Thema
RE: Pointer auf Array mit Labview übertragen und darstellen - rolfk - 09.07.2013 09:01

Möglicherweise verwandte Themen...
Themen Verfasser Antworten Views Letzter Beitrag
  Datenübergabe an DLL Pointer to Pointer Reiling 2 9.594 02.02.2018 10:59
Letzter Beitrag: Reiling
  Absturz durch unzulässige Pointer VS_03 3 10.311 28.10.2016 18:32
Letzter Beitrag: VS_03
  dll mit Pointer auf komplexe Struktur einbinden Wedgewood 11 17.009 27.04.2014 23:44
Letzter Beitrag: Wedgewood
  Pointer und MoveBlock OXO 4 8.206 03.06.2013 16:31
Letzter Beitrag: OXO
  Pointer auf Subarray übergeben Event Horizon 5 7.427 15.07.2012 10:21
Letzter Beitrag: rolfk
  DLL-Einbindung, Struct mit verschiedenen Datentypen als Pointer übergeben hawk72 4 11.080 11.05.2012 14:41
Letzter Beitrag: hawk72

Gehe zu: