8

Tektronix DPO4104オシロスコープ(ここではMATLABドライバー)からデータ収集を行うためのMATLABGUIを構築しています。

GUIコードをいじっtmtoolてみましたが、オシロスコープが10kポイントを超えるように設定されているかどうかに関係なく、ドライバーは10,000データポイントしか収集できないことがわかりました。私はこの投稿をCCSMで見つけましたが、それほど役に立ちませんでした。(読んでいただければ、私が最後の投稿です。)私はDPO4104ドライバーを使用していますが、この投稿ではDPO4100ドライバーの使用について説明していると思います。

私の知る限り、手順は次のとおりです。

  1. 現在のドライバーのreadwaveform機能を編集して、現在の値を考慮しますrecordLength。私の場合、100,000ポイントです。
  2. ドライバーMaxNumberPointを10,000から100,000まで手動で編集します。(私の場合、デフォルトの数は0でした。これを100,000に変更しました)。
  3. 手動で編集しますEndingPoint。これも100,000に設定しました。
  4. デバイスオブジェクトを作成する前にset(interfaceObj, 'InputBufferLength', 2.5*recordLength)、つまり、入力バッファが100,000ポイントを超えることができることを確認してください。予想されるバッファーの少なくとも2倍を使用することをお勧めします。理由だけで2.5を使用しました。
  5. デバイスオブジェクトと波形オブジェクトをビルドconnect()し、それにreadwaveform。利益。

GUIを介して、またはGUIを介して、まだ10,000ポイントを超えるポイントを収集できませんtmtool。どんな助けでもいただければ幸いです。

4

4 に答える 4

2

私はTektronixのエンジニアを見つけました。彼は基本的に、SCPIコマンドを直接使用してドライバーをスキップするように私に言いました。煩わしいですが、これが最も簡単な解決策かもしれません。

于 2012-12-21T17:54:37.767 に答える
1

一度に10,000個のデータポイントを収集し、それらをどこかに保存し、次の10,000個を収集し、保存したポイントに追加して、繰り返すことは可能ですか?

確かに、これは回避策です。

于 2012-12-21T16:09:07.867 に答える
1

私はそれを考え出した!おもう。一歩下がってリフレッシュするのに数週間かかることは本当に助けになりました。これが私がしたことです:

1)ドライバのinit機能を編集して、より大きなバッファサイズを設定します。完全なinitコード:

function init(obj)
% This method is called after the object is created.
% OBJ is the device object.
% End of function definition - DO NOT EDIT

% Extract the interface object.
interface = get(obj, 'Interface');

fclose(interface);

% Configure the buffer size to allow for waveform transfer.
set(interface, 'InputBufferSize', 12e6);
set(interface, 'OutputBufferSize', 12e6); % Originally is set to 50,000

もともとバッファサイズを22e6に設定しようとしましたが(1000万ポイントを取得したかったのですが)、メモリ不足エラーが発生しました。おそらく、バッファは、期待するものの2倍強に加えて、ヘッダー用のスペースである必要があります。おそらく200万ポイント相当の「ヘッダー」は必要ありませんが、ええと。

2)ドライバーを編集しreadwaveform()て、ユーザーが設定可能な収集ポイント数を最初に照会します。次に、SCPIコマンドをスコープに書き込んで、転送されるデータポイントの数がユーザーが希望するポイントの数と等しくなるようにします。次のスニペットは、次のトリックを実行しますreadwaveform

try 
    % Specify source
    fprintf(interface,['DATA:SOURCE ' trueSource]);

    %----------BEGIN CODE TO HANDLE MORE THAN 10k POINTS----------
    recordLength = query(interface, 'HORizontal:RECordlength?');
    fprintf(interface, 'DATA:START 1');
    fprintf(interface, 'DATA:STOP %d', str2num(recordLength));
    %----------END CODE TO HANDLE MORE THAN 10k POINTS----------

    % Issue the curve transfer command.
    fprintf(interface, 'CURVE?');

    raw = binblockread(interface, 'int16');

    % Tektronix scopes send and extra terminator after the binblock.
    fread(interface, 1);

3)ユーザーコードで、SCPIコマンドを設定して、レコードサイズを基になるインターフェイスオブジェクトに変更します。

% interfaceObj is a VISA object.
fprintf(interfaceObj, 'HORizontal:RECordlength 5000000');

そこにあります。うまくいけば、これはこの問題を理解しようとしている他の人を助けるでしょう。

于 2013-01-09T18:26:33.353 に答える
0

これは悪い考えです。10,000ポイントの収集を開始します。5000ポイントに達したら、データの収集を再開します(新しいスレッドで実行する必要がある場合があります)。必要なすべてのデータが20のデータ構造に格納されるまで、前後に移動し続けます。次に、データポイントを並べて、構造を1つの構造に結合します。これは、SCPIコマンドを直接呼び出すよりも手間がかかる可能性があり、私が考えていなかったいくつかの厄介な警告がある可能性があります。しかし、私が言ったように、それは悪い考えです...

于 2012-12-24T01:24:42.583 に答える