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:

ext. DLL - Einbindung Read Funktion



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!

25.01.2017, 12:33
Beitrag #1

TobSTAR Offline
LVF-Grünschnabel
*


Beiträge: 26
Registriert seit: Jun 2014

14.0.0f1
2014
DE

47829
Deutschland
ext. DLL - Einbindung Read Funktion
Hallo Forum,

dafür das ich noch keine Erfahrungen mit der Einbindung von externen DLLs in LV habe, bin ich dank dem Tutorial https://www.labviewforum.de/Thread-DLL-einbindung schon weit gekommen.

Anwendung: Es geht um ein RFID Lesegerät welches einen RFID-Transponder (Q5 - ASCII) ausliest.
   

Status: Eine Verbindung zu dem RFID Lesegerät via USB konnte ich bereits erfolgreich aufbauen.
   

Problem: Ich bekomme nicht den Inhalt (Block1: ABCD) vom RFID-Transponder ausgelesen.

Denke es liegt an der falschen Verwendung der Read Funktion? Da ich aufgrund fehlender C++ Erfahrung überhaupt nicht im Stande bin die Beschreibung der Funktion zu verstehen.
   

Letztlich liegt mir alles (siehe Link zur SDK: dll, Beschreibung, C++ Beispiele) vor, leider bin ich aber aktuell nicht in der Lage das fachlich umzusetzen. Huh

Support: Kann mir jemand anhand der vorhandenen Daten ggf. unter die Arme greifen? Und mir einen Tipp geben warum ich nicht den Inhalt "ABCD" ausgelesen bekomme?
   

Link zur SDK: http://www.gis-net.de/rfid/deutsch/softw...ickler.htm


Angehängte Datei(en)
14.0 .vi  TS-RW34.vi (Größe: 20,53 KB / Downloads: 350)
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
Anzeige
25.01.2017, 22:35
Beitrag #2

IchSelbst Offline
LVF-Guru
*****


Beiträge: 3.689
Registriert seit: Feb 2005

11, 14, 15, 17, 18
-
DE

97437
Deutschland
RE: ext. DLL - Einbindung Read Funktion
(25.01.2017 12:33 )TobSTAR schrieb:  Kann mir jemand anhand der vorhandenen Daten ggf. unter die Arme greifen? Und mir einen Tipp geben warum ich nicht den Inhalt "ABCD" ausgelesen bekomme?

Funktioniert das Lesen des Strings "Serial" (aus GetUSBDeviceNames) und der Strings "pDevVer out" und "pDevName out" (aus DeviceVersion) richtig?

Was sagt denn der Error-Cluster nach jedem DLL-Knoten?

Welchen Wert haben denn die Werte "Buflen" und "result" des Knotens "RawRead"?

Jeder, der zur wahren Erkenntnis hindurchdringen will, muss den Berg Schwierigkeit alleine erklimmen (Helen Keller).
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
27.01.2017, 08:15
Beitrag #3

TobSTAR Offline
LVF-Grünschnabel
*


Beiträge: 26
Registriert seit: Jun 2014

14.0.0f1
2014
DE

47829
Deutschland
RE: ext. DLL - Einbindung Read Funktion
(25.01.2017 22:35 )IchSelbst schrieb:  Funktioniert das Lesen des Strings "Serial" (aus GetUSBDeviceNames) und der Strings "pDevVer out" und "pDevName out" (aus DeviceVersion) richtig?
Jepp (siehe auch ScreenShot Status aus Nachricht 1), da steht 11362367 drin.

(25.01.2017 22:35 )IchSelbst schrieb:  Was sagt denn der Error-Cluster nach jedem DLL-Knoten?
Alles i.O. keine Fehler/ Warnungen oder der Gleichen.

(25.01.2017 22:35 )IchSelbst schrieb:  Welchen Wert haben denn die Werte "Buflen" und "result" des Knotens "RawRead"?
BufLen (Buffer-Länge): steht das drin was ich vorne rein gebe
rtRawRead (return): 16
   
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
28.01.2017, 11:21 (Dieser Beitrag wurde zuletzt bearbeitet: 28.01.2017 11:24 von IchSelbst.)
Beitrag #4

IchSelbst Offline
LVF-Guru
*****


Beiträge: 3.689
Registriert seit: Feb 2005

11, 14, 15, 17, 18
-
DE

97437
Deutschland
RE: ext. DLL - Einbindung Read Funktion
(27.01.2017 08:15 )TobSTAR schrieb:  rtRawRead (return): 16
Hast du in der Dokumentation nachgelesen, was der Rückgabewert 16 bedeutet? Wenn ja, was bedeutet er?

Bekommst du eine AV beim beenden des VIs oder der IDE?

Du solltest anstelle eines leeren Strings mal einen String der Mindestlänge BufLen probieren.

Jeder, der zur wahren Erkenntnis hindurchdringen will, muss den Berg Schwierigkeit alleine erklimmen (Helen Keller).
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
31.01.2017, 00:38 (Dieser Beitrag wurde zuletzt bearbeitet: 12.02.2017 18:37 von rolfk.)
Beitrag #5

rolfk Offline
LVF-Guru
*****


Beiträge: 2.305
Registriert seit: Jun 2007

alle seit 6.0
1992
EN

2901GG
Niederlande
RE: ext. DLL - Einbindung Read Funktion

Akzeptierte Lösung

Ein paar Hinweise:

1) Du spezifizierst überall ein Bufferlänge von 8194 Bytes für die Stringbuffer obwohl du daneben auch noch jeweils einen Parameter übergibts wieviele Bytes der jeweilige Buffer maximal empfangen kann. Ändere diese Zahl in den Variablennamen der entsprechenden Längenvariablen. Zwar ist 8194 immer grösser dann die Zahl die Du dann effektiv als Länge angibst, also passiert so kein Crash, ABER!!!! wenn Du das immer so machst gehst Du irgendwann mal bei einer Funktion mit der Länge spielen und vergisst den Buffer auch länger zu machen und Kabumm, krachts. Zudem ist das schwerwiegende Speicherverschwendung wenn Du überall einen Buffer von 8194 Bytes übergibst aber die Funktion nur 16 davon verwenden darf!

2) Der Rückgabewert der ReadRaw Funktion liefert gemäss Dokumentation -1 zurück im Fehlerfall und 0 oder eine positivie Zahl die angibt wieviele Bytes effektiv in den Buffer geschrieben wurden.

3) Da diese Funktion Rawdaten zurückgibt kann auch ein Nullwert im Buffer vorkommen. Da Du diesen Wert als Stringtyp definiert hast, der als C Stringpointer übergeben wird, kontrolliert LabVIEW nach der Rückkehr der Funktion ob der Buffer ein Nullbyte enthält und kürzt den String bis vor dieses Nullbyte. Das ist korrekt den Du hast angegeben, dass es ein C Stringpointer ist und bei C Strings wird halt einfach der Characterwert hinter dem letzten gültigen Character auf NULL gesetzt. Um das zu verhindern machst Du daraus ein Bytearray und übergibst das als C Array Pointer an die Funktion. Da Arrays durchaus 0 als Wert enthalten dürfen macht LabVIEW hier keinen Scan nach der Zürückkehr und lässt Dir den Buffer in der Länge die Du am Eingang angegeben hast.

4) Last but not least kann der Buffer natürlich weniger Bytes enthalten dann die Büfferlänge die Du angegeben hast, Hier verwendet man dann ein Array Subset mit der Länge die die Funktion als Rückgabewert zurückgegeben hat, aber nur wenn dieser Wert grösser ist dann -1, ansonsten hat die Funktion einen Fehler gehabt und solltest Du saubere Fehlerbehandlung durchführen. Nach dem Array Subset verwendest Du noch ein Byte Array zu String wenn Du unbedingt willst und dann kannst Du Dir den RawBytebuffer doch noch als String betrachten, aber eigentlich ist das wahrscheinlich irreführend, raw Bytes sind normalerweise keine Strings.

Und nein gemäss C Syntax besteht absolut kein Unterschied zwischen einem ANSI C Stringpointer und einem Byte Arraypointer. Aber gemäss uralter C Konvention benützen halt alle Stringfunktionen dieses Nullbyte, währenddem Arrayfunktionen typischerweise immer einen expliziten Längenparameter notwendig machen.

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
06.02.2017, 08:27
Beitrag #6

TobSTAR Offline
LVF-Grünschnabel
*


Beiträge: 26
Registriert seit: Jun 2014

14.0.0f1
2014
DE

47829
Deutschland
RE: ext. DLL - Einbindung Read Funktion
Besten Dank an IchSelbst und rolfk für den Support. Ich muss die gegebenen Hinweise erstmal sacken lassen Dry

Sobald ich das verstanden und durchgearbeitet habe melde ich mich wieder.
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
Anzeige
07.02.2017, 13:59
Beitrag #7

TobSTAR Offline
LVF-Grünschnabel
*


Beiträge: 26
Registriert seit: Jun 2014

14.0.0f1
2014
DE

47829
Deutschland
RE: ext. DLL - Einbindung Read Funktion
Mal wieder besten Danke für die ganzen Hinweise, ich bin einen riesen Schritt weiter gekommen. Ich schaffe es jetzt in der Tat den RFID-Transponder auszulesen. Dance2
   


(31.01.2017 00:38 )rolfk schrieb:  1) Du spezifizierst überall ein Bufferlänge von 8194 Bytes für die Stringbuffer obwohl du daneben auch noch jeweils einen Parameter übergibts wieviele Bytes der jeweilige Buffer maximal empfangen kann.
Die Spezifikation wurde wohl über den Import der DLL automatisch vorgenommen? Kann mich nicht erinnern da etwas spezifiziert zu haben???

(31.01.2017 00:38 )rolfk schrieb:  Ändere diese Zahl in den Variablennamen der entsprechenden Längenvariablen.
Wahrscheinlich So oder:
   

(31.01.2017 00:38 )rolfk schrieb:  Um das zu verhindern machst Du daraus ein Bytearray und übergibst das als C Array Pointer an die Funktion. Da Arrays durchaus 0 als Wert enthalten dürfen macht LabVIEW hier keinen Scan nach der Zürückkehr und lässt Dir den Buffer in der Länge die Du am Eingang angegeben hast.
Wahrscheinlich So oder:
   

Gerne nochmal kurzes Feedback sollte ich einen der Hinweise falsch verstanden/ umgesetzt haben.

Im Anhang das korrigierte VI (noch ohne Fehlerbehandlung), sollte jemand mal vor dem selben Problem stehen.


Angehängte Datei(en)
14.0 .vi  TS-RW34_Korrektur.vi (Größe: 22,29 KB / Downloads: 367)
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
12.02.2017, 18:40
Beitrag #8

rolfk Offline
LVF-Guru
*****


Beiträge: 2.305
Registriert seit: Jun 2007

alle seit 6.0
1992
EN

2901GG
Niederlande
RE: ext. DLL - Einbindung Read Funktion
(07.02.2017 13:59 )TobSTAR schrieb:  Gerne nochmal kurzes Feedback sollte ich einen der Hinweise falsch verstanden/ umgesetzt haben.

Ich habe das VI selber jetzt nicht nochmals heruntergeladen um im Detail anzuschauen, aber die Bildausschnitte die Du im Post hast sehen soweit korrekt aus.

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 


Möglicherweise verwandte Themen...
Themen Verfasser Antworten Views Letzter Beitrag
  Einbindung DLL funktioniert nicht Schrankwand 1 4.096 10.03.2023 18:50
Letzter Beitrag: GerdW
  Einbindung DLL mit geschachtelten Structures lab-falballa 2 9.013 10.05.2017 08:28
Letzter Beitrag: lab-falballa
  DLL-Einbindung schlägt fehl lupus022 7 10.215 23.05.2013 11:16
Letzter Beitrag: lupus022
  Problem bei Struct Einbindung wie in C/C++ raverel 5 8.759 24.04.2013 14:22
Letzter Beitrag: raverel
  DLL-Einbindung, Struct mit verschiedenen Datentypen als Pointer übergeben hawk72 4 11.059 11.05.2012 14:41
Letzter Beitrag: hawk72
  Einbindung der Vector XL Driver Library 5.3 in LabVIEW ... nmoerchen 15 26.624 17.10.2011 07:32
Letzter Beitrag: Mik

Gehe zu: