100万サンプル以上の有限入力タスクで、DAQmx Wait Until Doneがうまく動作せずにタイムアウトしてしまいます。



使用ソフトウェア:
使用ソフトウェア・バージョン: N/A
使用ソフトウェア・バージョンに特化: N/A
二次のソフトウェア: N/A

問題: NI-DAQmxドライバを用いて有限アナログ入力のタスクを行っています。100万個以上のサンプルを取り込んで、いつ集録が終わるかを知りたいです。しかしNI-DAQmx Waite Until Doneを呼ぶときに何も返さない、またはエラー-200560でタイムアウトしてしまいます。

解決策: このような問題がNI-DAQmxドライバで行われることは既に知られています。この制限を回避する方法はいくつかあります。

1.集録したいサンプルの数分だけ、手動で入力バッファのサイズをセットします。この方法が最も簡単で、回避策として最も適しています。

入力バッファのサイズのセットの仕方は

1. LabVIEWでは、DAQmx設定入力バッファを使います。
2. CIでは、DAQmxCfgOutputBuffer関数を使います。
3. .NETでは、Task.Stream.Buffer.InputBufferSize プロパティをセットします。

2.割り込みをサポートするPCIデバイスでは、Data Transfer MechanismDMAからInterruptsへ変えます。データ転送の仕組みとして割り込みを使っている多くのアプリケーションでは、この変更がシステム遂行にマイナスになることもあります。
データ転送を変更するには、以下のリンクをご覧ください。
KnowledgeBase 34FGAFVM: How do I Configure the Data Transfer Mechanism (Interrupt or DMA) in DAQmx and Traditional DAQ?

3.もし集録したサンプルで最後の100万サンプルだけに注目したいのでしたら、OverWrite ModeOverwrite Unread Samplesに変えてください。

Overwrite modeプロパティをセットするには
1.LabVIEWでは、DAQmx Read プロパティノードでOverWrite Mode プロパティをOverwrite Unread Samplesにセットします。
2.Cでは、DAQmxSetReadOverWrite( taskHandle, DAQmx_Val_OverwriteUnreadSamps)を呼びます。
3.DAQmx .NET APIを使ってTask.Stream.ReadOverwriteMode = ReadOverwriteMode.OverwriteUnreadSamplesとセットします。

関連リンク:
KnowledgeBase 3SDGAORM: DAQmx Wait Until Done Requires an Additional Clock Cycle to Complete
KnowledgeBase 34FGAFVM: How do I Configure the Data Transfer Mechanism (Interrupt or DMA) in DAQmx and Traditional DAQ?



添付:





報告日時: 02/09/2007
最終更新日: 03/02/2007
ドキュメントID: 468DS6NO