Sammeln Sie mehr als 10.000 Datenpunkte von einem Tektronix-Oszilloskop?

8

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:

  1. Bearbeiten Sie die readwaveform Funktion des Treibers, um die aktuelle recordLength zu berücksichtigen - in meinem Fall 100.000 Punkte.
  2. Bearbeiten Sie den MaxNumberPoint des Treibers manuell von 10.000 bis 100.000. (In meinem Fall war die Standardnummer 0 .. Ich änderte dies auf 100.000).
  3. Bearbeiten Sie EndingPoint manuell. Ich setze das auch auf 100.000.
  4. Vor dem Erstellen eines Geräteobjekts, 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.
  5. Erstellen Sie ein Geräteobjekt und ein Wellenformobjekt, 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.

    
Dang Khoa 17.12.2012, 20:26
quelle

4 Antworten

1

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:

%Vor%

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 :

%Vor%

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.

    
Dang Khoa 09.01.2013, 18:26
quelle
2

Ich habe einen Tektronix-Ingenieur gefunden; Er sagte mir im Grunde nur, dass ich die SCPI-Befehle direkt verwenden und den Treiber überspringen sollte. Obwohl dies lästig ist, könnte dies die einfachste Lösung sein.

    
Dang Khoa 21.12.2012 17:54
quelle
1

Ist es möglich, dass Sie die Datenpunkte 10.000 gleichzeitig sammeln, sie dann irgendwo speichern, die nächsten 10.000 sammeln, sie an die gespeicherten Punkte anhängen, wiederholen?

Es ist ein Workaround, sicher.

    
Kelli 21.12.2012 16:09
quelle
0

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 ...

    
chessofnerd 24.12.2012 01:24
quelle

Tags und Links