Ich baue eine MATLAB-GUI für die Datenerfassung von einem Tektronix DPO4104-Oszilloskop (MATLAB-Treiber hier ).
Ich spiele mit tmtool
und mit meinem GUI-Code herum und habe herausgefunden, dass der Treiber nur 10.000 Datenpunkte sammeln kann, unabhängig davon, ob das Oszilloskop mehr als 10k Punkte anzeigt. Ich fand diesen Beitrag im CCSM , aber es war nicht sehr hilfreich. (Ich bin der letzte Post dort, wenn Sie es lesen möchten.) Ich verwende den DPO4104-Treiber, während dieser Beitrag die Verwendung des DPO4100-Treibers diskutiert, glaube ich.
Soweit ich das beurteilen kann, sind die Schritte:
readwaveform
Funktion des Treibers, um die aktuelle recordLength
zu berücksichtigen - in meinem Fall 100.000 Punkte. MaxNumberPoint
des Treibers manuell von 10.000 bis 100.000. (In meinem Fall war die Standardnummer 0 .. Ich änderte dies auf 100.000). EndingPoint
manuell. Ich setze das auch auf 100.000. set(interfaceObj, 'InputBufferLength', 2.5*recordLength)
, stellen Sie sicher, dass der Eingabepuffer mehr als 100.000 Punkte umfassen kann. Es wird empfohlen, mindestens den doppelten erwarteten Puffer zu verwenden. Ich habe 2.5 nur deshalb benutzt. connect()
und readwaveform
. Profit. Ich kann immer noch nicht mehr als 10.000 Punkte sammeln, entweder über tmtool
oder über meine GUI. Jede Hilfe wäre willkommen.
Ich habe es herausgefunden! Ich denke. Ein paar Wochen, um zurückzutreten und zu erfrischen, hat mir sehr geholfen. Folgendes habe ich getan:
1) Bearbeiten Sie die Funktion init
des Treibers, um eine größere Puffergröße zu konfigurieren. Beende init
code:
Ich habe ursprünglich versucht, die Puffergrößen auf 22e6 zu setzen (ich wollte 10 Millionen Punkte bekommen), aber ich bekam Fehler wegen zu wenig Arbeitsspeicher. Angeblich sollte der Puffer ein wenig mehr als das Doppelte sein, was Sie erwarten, plus Platz für Header. Ich brauche wahrscheinlich nicht 2 Millionen Punkte "header", aber eh.
2) Bearbeiten Sie den readwaveform()
des Treibers, um zuerst die Anzahl der Punkte zu ermitteln, die vom Benutzer festgelegt werden können. Schreiben Sie dann SCPI-Befehle in den Bereich, um sicherzustellen, dass die Anzahl der zu übertragenden Datenpunkte der Anzahl der Punkte entspricht, die der Benutzer wünscht. Das folgende Snippet macht das in readwaveform
:
3) Setzen Sie im Benutzercode einen SCPI-Befehl, um die Datensatzgröße in das zugrunde liegende Schnittstellenobjekt zu ändern:
%Vor%Da hast du es. Hoffentlich hilft dies jedem anderen, der versucht, dieses Problem zu lösen.
Hier ist eine schlechte Idee. Fang an, 10.000 Punkte zu sammeln. Wenn Sie zu 5000 Punkten kommen, fangen Sie an, Daten erneut zu sammeln (möglicherweise müssen Sie das in einem neuen Thread ausführen). Gehen Sie so lange hin und her, bis alle Daten, die Sie benötigen, in 20 Datenstrukturen gespeichert sind. Kombinieren Sie dann die Strukturen zu einer Struktur, indem Sie die Datenpunkte aneinander reihen. Dies könnte mehr Arbeit bedeuten, als die SCPI-Befehle direkt aufzurufen, und könnte einige böse Vorbehalte haben, an die ich nicht gedacht habe. Aber wie gesagt, es ist eine schlechte Idee ...
Tags und Links matlab oscilloscope