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 

Dieses Thema hat akzeptierte Lösungen:

Problem bei Struct Einbindung wie in C/C++



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!

23.04.2013, 08:19 (Dieser Beitrag wurde zuletzt bearbeitet: 23.04.2013 08:21 von raverel.)
Beitrag #1

raverel Offline
LVF-Grünschnabel
*


Beiträge: 29
Registriert seit: Apr 2013

12
2012
EN



Problem bei Struct Einbindung wie in C/C++
Hallo zusammen.
Derzeit beschäftige ich mich mit Feldbuskarten der Firma Hilscher.
Über diese möchte ich einen Datenaustausch mit verschiedenen Geräten herstellen.
Eine zugehörige .dll Datei beseitze ich, die ich in LabView mit einen Call Library Function Node aufrufe.
Einige Methoden kann ich auch aufrufen, nur leider scheitert es an den structs.
Ich habe im Forum schonmal gelesen, dass dies mit Clustern realisierbar wäre.
In dem Funtion Node habe ich die Routine "xDriverGetInformation" aufgerufen und entsprechend parametrisiert. Das letzte Argument referenziert ja auf die DRIVER_INFORMATION structure. Da möchte ich nun die Daten "abDriverVersion" und "ulBoardCnt" rausziehen.
Nur leider bin ich bis jetzt zu keinem Erfolg gekommen.
Unten habe ich mal die oben erläuterte Methode die ich z.B aufrufen möchte aufgeführt.
Kann mir bei diesem Problem jemand auf die Sprünge helfen?
Vielen Dank



xDriverGetInformation
This function retrieves all driver specific information, like version number, build date, etc.

Function call:
int32_t xDriverGetInformation(CIFXHANDLE hDriver ,uint32_t ulSize, void* pvDriverInfo)

Arguments:
Argument | Data type | Description
hDriver | CIFXHANDLE | Handle returned by xDriverOpen
ulSize | uint32_t | Size of the passed structure
pvDriverInfo | void* | Pointer to a DRIVER_INFORMATION structure, to place returned values in.

Return Values:CIFX_NO_ERROR if the function succeeds.
If the function fails, a nonzero error code from chapter Error Codes from page 100 is returned. You
can use the function xDriverGetErrorDescription() to get a description of this error.

Example:
DRIVER_INFORMATION tDriverInfo = {0};
int32_t lRet = xDriverGetInformation(NULL, sizeof(tDriverInfo), &tDriverInfo);
if( lRet == CIFX_NO_ERROR)
{
}

DRIVER_INFORMATION
Argument | Data type | Description
abDriverVersion | uint8_t[32] | Human readable driver name and version
ulBoardCnt | uint32_t | Number of handled boards

lv12_img
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
Anzeige
23.04.2013, 12:49 (Dieser Beitrag wurde zuletzt bearbeitet: 23.04.2013 12:50 von rolfk.)
Beitrag #2

rolfk Offline
LVF-Guru
*****


Beiträge: 2.302
Registriert seit: Jun 2007

alle seit 6.0
1992
EN

2901GG
Niederlande
RE: Problem bei Struct Einbindung wie in C/C++

Akzeptierte Lösung

(23.04.2013 08:19 )raverel schrieb:  DRIVER_INFORMATION
Argument | Data type | Description
abDriverVersion | uint8_t[32] | Human readable driver name and version
ulBoardCnt | uint32_t | Number of handled boards

It's very simply. The abDriverVersion variable is a fixed size array. As such it is equivalent to a structure containing the fixed size (32) elements if uint8. So you can easily create that structure in LabVIEW by creating a cluster that contains another cluster with 32 unsigned integers of 8 bit size, followed by an unsigned integer of 32 bits. If these two parameters are all elements inside the structure you are done.

Now configure the parameter in the Call Library Node as Adapt to Type and connect a constant of this cluster to the left terminal. Now you have to convert the byte cluster inside the cluster that comes out of the right terminal into an array of bytes and then from there into a String. Do a Pattern Match on a \0 Character and display the String that is before the match and you are done.

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
23.04.2013, 15:37
Beitrag #3

raverel Offline
LVF-Grünschnabel
*


Beiträge: 29
Registriert seit: Apr 2013

12
2012
EN



RE: Problem bei Struct Einbindung wie in C/C++
Vielen Dank schonmal.
Ich habe es nun einmal probiert. Leider komme ich so zu keinem Erfolg.
Anbei befindet sich ein Screenshot meines Vi`s.
lv12_img


Angehängte Datei(en) Thumbnail(s)
   
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
23.04.2013, 16:22 (Dieser Beitrag wurde zuletzt bearbeitet: 23.04.2013 16:26 von rolfk.)
Beitrag #4

rolfk Offline
LVF-Guru
*****


Beiträge: 2.302
Registriert seit: Jun 2007

alle seit 6.0
1992
EN

2901GG
Niederlande
RE: Problem bei Struct Einbindung wie in C/C++
(23.04.2013 15:37 )raverel schrieb:  Vielen Dank schonmal.
Ich habe es nun einmal probiert. Leider komme ich so zu keinem Erfolg.
Anbei befindet sich ein Screenshot meines Vi`s.
lv12_img

Und was funktioniert nicht? Crash oder einfach kein String oder was? Im Falle einse Crashes bist Du sicher dass Du die richtige Calling Convention verwendest?

Übrigens hatte ich es über \0 als Parameter zu Match Pattern. Das ist ein Backslash vor der 0 und um das so wie es gemeint is einführen zu können muss die entsprechende Stringkonstant auf "Display \-Codes" umgestellt werden.

Ausserdem sprachen wir über 32 8bit Integers, nicht 33 und es müssen 8 Bit sein, nicht irgendwas anderes (Vielleicht hast Du das richtig aber im Pict kann man das nicht sehen). Darum ist es sowieso immer sinnvoller um das VI anzuhängen statt eines Pictures.

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
24.04.2013, 07:56
Beitrag #5

raverel Offline
LVF-Grünschnabel
*


Beiträge: 29
Registriert seit: Apr 2013

12
2012
EN



RE: Problem bei Struct Einbindung wie in C/C++
Ja stimmt. Hab mich wohl etwas verzählt in dem ClusterBlush
Habe nunmal beide VI`s gepostet.
Einmal das VI Driver Open. Was sozusagen mein Haupt VI vorläufig sein soll und das Sub VI xDriverGetInformation was die structure enthält.
Als Fehler Meldung bekomme ich "IOControl call failed" was vermutlich andere Gründe hat. Aber mir ging es generell erstmal darum, wie es möglich ist mittels LabView ein struct auszulesen.
lv12_img


Angehängte Datei(en)
12.0 .vi  x Driver Get Information.vi (Größe: 14,89 KB / Downloads: 330)

12.0 .vi  DriverOpen.vi (Größe: 12,74 KB / Downloads: 328)
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
24.04.2013, 14:22 (Dieser Beitrag wurde zuletzt bearbeitet: 24.04.2013 14:23 von raverel.)
Beitrag #6

raverel Offline
LVF-Grünschnabel
*


Beiträge: 29
Registriert seit: Apr 2013

12
2012
EN



Thumbs Up RE: Problem bei Struct Einbindung wie in C/C++
Hey.
Mit deiner Lösung hat es geklappt.
Der "IO" Fehler beruhte auf einen Fehler meinterseits bzgl. einer fehlerhaften übergabe eines Datenpointers.
Vielen Dank
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
Antwort schreiben 


Möglicherweise verwandte Themen...
Themen Verfasser Antworten Views Letzter Beitrag
  Einbindung DLL funktioniert nicht Schrankwand 1 3.070 10.03.2023 18:50
Letzter Beitrag: GerdW
  Einbindung DLL mit geschachtelten Structures lab-falballa 2 7.833 10.05.2017 08:28
Letzter Beitrag: lab-falballa
  ext. DLL - Einbindung Read Funktion TobSTAR 7 10.962 12.02.2017 18:40
Letzter Beitrag: rolfk
  DLL-Einbindung schlägt fehl lupus022 7 8.912 23.05.2013 11:16
Letzter Beitrag: lupus022
  C-Funktion benötigt Struct Forest 3 6.063 04.05.2013 23:38
Letzter Beitrag: rolfk
  Probleme mit Handler und Struct ElBartscho 3 4.475 16.11.2012 19:35
Letzter Beitrag: rolfk

Gehe zu: