波形データ(2チャンネル)とアナログ入力トリガ(プリトリガモードで設定 - 負の遅延値)を取得するとき、私はmatlabでDataMissedイベントを受信しています。ここで NIボードからデータを取得する際に、matlabのデータが欠落してしまうのを防ぐには?
コードです:トリガーイベントが(showdaqevents(AI)を使用して)受信された後にsampleRate = 500000;
pretrigger = 8;
trigger_value = 0.6;
ai = analoginput('nidaq','Dev1');
ch = addchannel(ai,0:channels);
set(ai,'SampleRate',sampleRate);
requiredSamples = floor(pretrigger*sampleRate);
set(ai,'SamplesPerTrigger',requiredSamples);
%triggering
set(ai,'TriggerChannel',ch(channels+1));
set(ai,'TriggerType','Software');
set(ai,'TriggerCondition','Rising');
set(ai,'TriggerConditionValue',trigger_value);
set(ai,'TriggerDelay',-pretrigger);
set(ai, 'TriggerRepeat', 0);
set(ai,'LoggingMode','Disk');
set(ai,'LogToDiskMode','Index');
set(ai,'LogFileName',[filename '_01']);
waitTime = pretrigger * 1.1 + 0.5;
for k = 1:100
start(ai);
CurrentFile = get(ai,'LogFileName');
disp(['Acquiring for ' CurrentFile]);
while strcmp((get(ai, 'Running')), 'On')
pause(1);
end
wait(ai,waitTime);
showdaqevents(ai)
disp(['Triggered ' CurrentFile]);
while strcmp((get(ai, 'Logging')), 'On'); end;
disp(['Saved ' CurrentFile]);
end
stop(ai);
delete(ai);
clear ai;
は、このコードを実行している、私はイベントをミスしたデータを取得します。しかし、データが欠落したイベントのサンプル番号はNAなので、トリガー後に来ることは完全にはわかりません。ここで
はshowdaqevents出力の例です:データを見ると
1 Start (14:55:35, 0)
2 Trigger#1 (14:56:02, 0) Channel: [3]
3 DataMissed ( N/A , 13959168)
4 DataMissed ( N/A , 13959168)
5 DataMissed ( N/A , 13959168)
6 DataMissed ( N/A , 13959168)
7 DataMissed ( N/A , 13959168)
8 DataMissed ( N/A , 13959168)
9 Stop (14:56:03, 5)
は、MATLAB documentationのイベントを逃した、与えられた2つの説明があります。
- は、エンジンがの速度に追いついていないこと取得。
- ドライバは、前に取得したデータが読み取られる前に、ハードウェアのFIFOバッファに新しいデータを書き込みました。 BufferingConfig プロパティを使用してメモリブロックのサイズを増やすことで、通常この問題を回避できます( )。
私はdaqmemコマンドで使用可能なメモリを増やそうとしましたが、動作することが見つかりませんでした。 500000サンプル/秒、3チャンネルはトリガーあたり約90MB、daqmemは360MB以上の空き容量を持っていることを報告します(ただしbuffermodeはAutoに設定されています)。メモリをクリアするためにwhileループでgetdata(ai)を定期的に呼び出す必要があるかどうかは疑問です。もう1つの可能性は、システムのサンプルレートが高すぎることです。
ハードウェア:
- デュアルコアCPU(アスロンX2 3200)、4GBのRAM、500ギガバイトのSATAハードディスク
- NI PCI-6122
は私が得ることの可能性ということに言及すべきですDataMissedイベントが長くなると(時間的に)、トリガーを押す前にシステムが取得されます。
データ取得コードに問題がありますか(取得中に一時停止が発生するのは最も不確かです)。ハードウェア?それは心配しないことですか? NIボードを扱うのにVisual Studioは優れていますか?
データが欠落したイベントは、低いサンプリングレートまたは短い記録時間で発生する頻度が少なくなります。ロギングを続行すると問題が解決し、DataMissedイベントが発生しなくなりました。 – Ben