18.06.2012, 12:50
Hallo zusammen!
Ich habe hier ein USB-Oszilloskop, welches eine größere Anzahl Waveforms speichern kann.
Die beiliegenden DLLs enthalten eine Funkion, um den Buffer für jede einzelne Waveform festzulegen, sowie eine weitere Funktion, die die Daten anschließend aus dem Scope in die Buffer überträgt. In C sieht das etwa so aus:
Nun sind es nicht nur 3 Buffer, sondern eher sowas wie 1000-10000, die Anzahl soll dynamisch sein.
In C macht man sich dann ein 2D-Array buffer[a][b], und übergibt der Funktion dann die einzelnen Subarrays buffer[a].
In Labview 8.6 bekomme ich das so statisch wie in dem COde-Beispiel hin, aber nicht dynamisch, da ich Probleme mit den Subarrays habe.
Ein Versuch war, für jede Wafeform ein einzelnes 1D-Array anzulegen, in die DLL-Funktion zu stopfen, und hinten zu nem 2D-Array zusammen zu tackern:
[attachment=40693]
(Das ist grade auf die Schnelle hingemalt)
Problem: Beim Zusammentackern werden die Arrays intern an andere Speicherstellen verschoben, der nachfolgende AUfruf von GetValues führt dann lieber zum Crash von LV.
Ich könnte auch zuerst ein 2D-Array erzeugen, und dem SetBuffer Subarrays davon mitgeben. Funktioniert nicht, da bei den Subarrays offensichtlich immer Kopien der Daten erstellt werden.
Mäßigen Erfolg hatte ich mit Queues, in die ich die einzelnen Arrays stopfe. Crasht aber, wenn es zu viele Arrays werden.
Hat wer ne Idee, was ich da in LV 8.6 machen kann?
EDIT jg: Externer Bildlink gelöscht.
Ich habe hier ein USB-Oszilloskop, welches eine größere Anzahl Waveforms speichern kann.
Die beiliegenden DLLs enthalten eine Funkion, um den Buffer für jede einzelne Waveform festzulegen, sowie eine weitere Funktion, die die Daten anschließend aus dem Scope in die Buffer überträgt. In C sieht das etwa so aus:
Code:
int buffer1[1000];
int buffer2[1000];
int buffer3[1000];
Scope::SetBuffer(1, buffer1);
Scope::SetBuffer(2, buffer2);
Scope::SetBuffer(3, buffer3);
Scope::GetValues();
Nun sind es nicht nur 3 Buffer, sondern eher sowas wie 1000-10000, die Anzahl soll dynamisch sein.
In C macht man sich dann ein 2D-Array buffer[a][b], und übergibt der Funktion dann die einzelnen Subarrays buffer[a].
In Labview 8.6 bekomme ich das so statisch wie in dem COde-Beispiel hin, aber nicht dynamisch, da ich Probleme mit den Subarrays habe.
Ein Versuch war, für jede Wafeform ein einzelnes 1D-Array anzulegen, in die DLL-Funktion zu stopfen, und hinten zu nem 2D-Array zusammen zu tackern:
[attachment=40693]
(Das ist grade auf die Schnelle hingemalt)
Problem: Beim Zusammentackern werden die Arrays intern an andere Speicherstellen verschoben, der nachfolgende AUfruf von GetValues führt dann lieber zum Crash von LV.
Ich könnte auch zuerst ein 2D-Array erzeugen, und dem SetBuffer Subarrays davon mitgeben. Funktioniert nicht, da bei den Subarrays offensichtlich immer Kopien der Daten erstellt werden.
Mäßigen Erfolg hatte ich mit Queues, in die ich die einzelnen Arrays stopfe. Crasht aber, wenn es zu viele Arrays werden.
Hat wer ne Idee, was ich da in LV 8.6 machen kann?
EDIT jg: Externer Bildlink gelöscht.