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
NCDT2401_GetParameterString.vi (Größe: 25,55 KB / Downloads: 250)
LabVIEW_Problem.zip (Größe: 925,78 KB / Downloads: 239)