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 

Bytestring aus DLL unvollständig, Binäre Null?



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!

20.08.2010, 15:34 (Dieser Beitrag wurde zuletzt bearbeitet: 20.08.2010 16:33 von Y-P.)
Beitrag #1

schaaff Offline
LVF-Grünschnabel
*


Beiträge: 14
Registriert seit: Sep 2007

6.1
2006
kA


Deutschland
Bytestring aus DLL unvollständig, Binäre Null?
Hallo liebes LV-forum,

ich benötige etwas Hilfe bei der Ansteuerung eines Spektrometers in einem Controller. Die dort befindliche CCD Zeile gilt es auszulesen. Man sendet einen Befehl Get_CCD an die DLL und kann im Anschluss mit einer Abfrage Get_ParameterString einen ByteString erhalten.

Laut Dokumentation lautet die C Funktionsdefinition:
ERR_CODE GetParameterString (DWORD instanceHandle, LPCTSTR paramName, LPTSTR paramValue, DWORD *maxLen)

Man erhält einen 4096 Byte langen String, der in 2048 Datenwerte, welche den 2048 pixeln entsprechen, umgerechnet werden.

Mit dem SubVI, welches ich LV8-kompatibel angehangen hab, kann ich alle Stringparameter, wie Version etc.pp, erfolgreich abfassen. Wenn ich jedoch Spektren als Bytestring erhalten möchte, ist der Bytestring immer unterschiedlich lang, d.h. nicht 4096 sondern er bricht ab. Dieses Verhalten habe ich im angehangenen Video auch dem Entwickler der DLL gesandt. Über die eingebaute Logfunktion der DLL ist ersichtlich, dass vom Controller 4096 Byte empfangen werden. Des Weiteren funktioniert ein C-Programm welches exakt selbe DLL und funktionen nutzt einwandfrei.
Der Entwickler meinte, dass sich vll. LV mit binären Nullen im String schwer tut und meinte den Datentyp als void * anzulegen. Das habe ich probiert, habe aber das problem, dass ich maxLen nicht als Stringlänge für den void parameter zur speicherallokation übergeben kann, weil es ja ein void ist. Auch ein 4096er 8Byte array, als String umgewandelt, in den Void reingeschickt, hat nicht funktioniert.

Meine Frage ist: Kennt jemand ähnliches Verhalten beim Auslesen von ByteStrings? Gibt es eine Lösung mit void alle 4096 Byte zu erhalten ?

Vielen Dank im Voraus

Martin

Sonstige .vi  NCDT2401_GetParameterString.vi (Größe: 25,55 KB / Downloads: 250)

Lv85_img

Sonstige .zip  LabVIEW_Problem.zip (Größe: 925,78 KB / Downloads: 239)
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
Anzeige
20.08.2010, 16:33 (Dieser Beitrag wurde zuletzt bearbeitet: 20.08.2010 16:34 von Y-P.)
Beitrag #2

Y-P Offline
☻ᴥᴥᴥ☻ᴥᴥᴥ☻
LVF-Team

Beiträge: 12.612
Registriert seit: Feb 2006

Developer Suite Core -> LabVIEW 2015 Prof.
2006
EN

71083
Deutschland
Bytestring aus DLL unvollständig, Binäre Null?
Bitte nächstes Mal LabVIEW-Version angeben. Rulez
Außerdem Profil_ergaenzen. Du hast ein VI für LabVIEW 8.5 hochgeladen und in Deinem Profil steht 6.1.

Gruß Markus

--------------------------------------------------------------------------
Bitte stellt mir keine Fragen über PM, dafür ist das Forum da - andere haben vielleicht auch Interesse an der Antwort !!
--------------------------------------------------------------------------
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
22.08.2010, 08:46
Beitrag #3

rolfk Offline
LVF-Guru
*****


Beiträge: 2.305
Registriert seit: Jun 2007

alle seit 6.0
1992
EN

2901GG
Niederlande
Bytestring aus DLL unvollständig, Binäre Null?
When Du in der Call Library Node einen Parameter als C String Pointer konfigurierst Gibt Dir LabVIEW immer nur den Teil zurück bis zum ersten NULL Byte in dem "String". Das ist auch korrect so denn ein C String ist ein NULL terminated Buffer.

Um binäre Buffers in LabVIEW zurückbekommen zu können, musst Du diesen Parameter als Byte Array konfigurieren und den C Array Pointer darauf an die DLL übergeben. Memorytechnisch ist ein C String ganz einfach ein Byte Array.

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
  Null-Variant passimatze 6 7.457 05.07.2012 06:31
Letzter Beitrag: passimatze

Gehe zu: