USB-6000/6008/6009におけるエラー200361、バッファオーバーフローエラーについて
ハードウェア: Multifunction DAQ (MIO)>>Portable>>USB-6009, Multifunction DAQ (MIO)>>Portable>>USB-6008
問題: USB-6000、6008、6009 でのサンプリングにおいてスペックを満たしているのにもかかわらずエラー-200361が発生するのはなぜでしょうか。
サンプリング中に他のウィンドウを開いたり閉じるとエラーが発生します。このエラーを発生させないようにするためにはどうしたらいいですか?
エラーコード-200361が発生
考えられる理由:
オンボードデバイスメモリのオーバーフロー。システムおよび/またはバス帯域幅の制約により、ドライバはデバイスのスループットに相当する速度でデバイスからデータを読み取ることができませんでした。
サンプルレートを下げてください。データ転送方法が割り込みの場合、DMAまたはUSBバルクを使用してみてください。より多くのオンボードメモリを搭載した製品を使用したり、コンピュータ上で同時に実行するプログラム数を減らしたりする方法もあります。
解決策: この動作には複数の要因が考えられます。
- USB-6000/6008/6009には比較的小さいオンボードFIFOがある
- このデバイスはUSBバスを介して通信をするため、別のDAQデバイスで使用されるPCIバスよりも通信が遅い
- DAQmx 9.6 以降のバージョンで修正された、USB-6000/6008/6009をWindows 7のPCで使用したときの既知の問題
USB-6000/6008/6009のオンボードFIFOメモリは比較的小さいので、高いサンプリングレートにてデータ集録を行うとすぐにオーバーフローしてしまいます。他のプログラムなどを実行したり、特にWindows OSにおいてウインドウの最大化、最小化といった操作はCPUに非常に負担がかかります。したがって、このような操作を実行するとドライバがデバイスからのデータを認識することができません。その結果FIFOがオーバーフローし、エラー200361が発生します。
PCで実行中のほかのプログラムを最小化することで、バッファオーバーフローの発生頻度を改善することができます。可能な場合ほかのプログラムを閉じてください。
稀に発生する問題:USB-6009において予期せぬ電源喪失が発生した場合、テストパネルで1ポイントを読み込む(オンデマンドモード)の場合でも、稀にこのエラーが発生することが確認されています。この際デバイスはMeasurement & Automation Explorerで認識され、セルフテストにも成功し、Windowsのデバイスマネージャーでも正しく構成されているようにみえます。
正常に動作させるためには、デバイスをWindowsデバイスマネージャーからアンインストールし、USBバスから抜き取ります。再度接続するときにはデバイスが正常に認識され、通常の動作をするようになります。
その他の原因:NIはエラーコード-200361が繰り返し発生する原因が、Windows 7 EHCIドライバが (USB-6000/6008/6009 などの USB Full Speed デバイスに複数の IRP をキューする)split transaction を行うときのバグである可能性が高いことを認識しました。NI は Windows USB スタックを修正することができないため、回避策を提供することしかできません。待機状態の転送要求の数を制限することで、split transactionの発生を抑え、エラーコード-200361が誤って発生することを防ぐことが可能です(他の要因でUSBバスを介したデータ転送が指定したサンプルレートに間に合わない場合、エラー-200361が発生する可能性があります)。
下記の設定は、DAQmx 9.6 以降のバージョンではデフォルトで設定されています。この情報は、NI-DAQmx 9.6 ReadMe に記載されています (CAR ID 331459)。NI-DAQmx 9.6より古いバージョンを使用する場合、下記の手順でプロパティを設定します。
問題を修正するためには、DAQmxチャンネルプロパティノードをDAQmxタスクを開始する前に配置し、
アナログ入力 » 一般プロパティ » 上級 » データ転送とメモリ » USB転送リクエストカウント を選択します。下記の画像でこのプロパティを設定している様子を示します。
このプロパティが存在しない場合、2つの解決法があります。
- (このプロパティが追加された)NI-DAQmx 9.4以降のバージョンにアップグレード
- プロパティノードを右クリックし、「フィルタを選択…」を選択
フィルタ設定を「
すべての属性を表示」に変更:
上記の変更を加えると、
USB転送リクエストカウントオプションをチャンネルプロパティノードから選択できるようになります。
プロパティノードをブロックダイアグラムに配置しましたら、プロパティノードを右クリックし、
すべてを書き込みに変更を選択します。プロパティノードに、値が1の符号なし32ビット整数を配線し、
DAQmxタスクを開始関数の前に配置します。
関連リンク:
添付:
報告日時: 04/07/2005
最終更新日: 08/09/2016
ドキュメントID: 3K6BT0UR