02-22-2012 04:09 AM
Delphiでのプログラミングですが、質問の本質はC++でも変わらないと思います。
USB-6218、USB-6210、PCI-6220などで動作する以下のプログラムが
// タスク作成
DAQmxErrChk(DAQmxCreateTask('',@taskHandle),'DAQmxCreateTask');
// チャンネル設定
DAQmxErrChk(DAQmxCreateAIVoltageChan(taskHandle, 'Dev1/ai0:7', '', DAQmx_Val_InputTermCfg_RSE, -10.0, 10.0, DAQmx_Val_VoltageUnits1_Volts, ''),'DAQmxCreateAIVoltageChan');
// 周波数、データ数、収録タイプ設定
DAQmxErrChk(DAQmxCfgSampClkTiming(taskHandle, 'OnboardClock', 100.0, DAQmx_Val_Rising, DAQmx_Val_AcquisitionType_FiniteSamps, 100),'DAQmxCfgSampClkTiming');
// データ収集
DAQmxErrChk(DAQmxReadAnalogF64(taskHandle, 10, 10.0, DAQmx_Val_GroupByScanNumber, @DAQWork[1], 1280, @sampsPerChanRead, 0),'DAQmxReadAnalogF64');
// タスク終了
DAQmxStopTask(taskHandle);
DAQmxClearTask(taskHandle);
14bit分解能のUSB-6009ではDAQmxReadAnalogF64( )で以下のエラーが出て動作しません。
Omboard device memory overflow. Because of system and/or bus-bandwidth
limitations. the driver could not read data from the device fast enough to keep up
with the device throughput.
Reduce the sample rate, or reduce the number of programs your computer is
executing concorrently;
USB-6009は性能が48kS/秒なので、データ数的に問題ないと思いますが、パラメーターを
いろいろ変えて試しても上手くいきませんでした。
原因、対処方法をご存知の方、ご教授いただければ幸いです。
02-22-2012 09:02 PM
YK1957 様
今回のエラーはエラーコード「-200361」で間違いありませんでしょうか。
上記エラーコードの場合、考えられる可能性は2つです。一つは、お客様もお試しいただいているとおり、文字通り「メモリのオーバーフロー」によるものです。以下の情報をご参考ください。
http://digital.ni.com/public.nsf/allkb/8BCAB6A9F2D6E6BC862570B300000D02?OpenDocument
http://digital.ni.com/public.nsf/allkb/611475F9BE62881E86256FDC0062B1BB
上記が原因でない場合は、Windows 7 EHCI ドライバの不具合の可能性が考えられます。もちろん、NI は Windows USB スタックに対してなにも出来ませんので、回避策として DAQmx のチャンネルプロパティーでトランスファーリクエストを制限することにより、上記エラーを避ける方法を提示しております。こちらの機能は、まず DAQmxドライバのバージョンを 9.4 にしていただいて、DAQmx チャンネルプロパティーで USB Transfer Requesnt Count を 1 にセットして頂く必要がございます。
以下が LabVIEW 上でのプロパティーの設定です。
上記では、AI.UsbXferReqCount として表記されるかと思います。
YK1957 様がお使いの言語は Delphi とのことですので、関数はint32 __CFUNC DAQmxSetAIUsbXferReqCount(TaskHandle taskHandle, const char channel[], uInt32 data) であるかと思われます。NI-DAQmx C Reference Help では「Get/Set/Reset AI_UsbXferReqCount」と検索頂ければ詳しい情報を確認でますので、ご参照下さい。
CS. Hara
02-23-2012 05:36 AM
CS. Hara様
質問への回答、ありがとうございます。
エラーコードは「-200361」で間違いありませんが、テストパネルやLabVIEWでは
USB-6009の動作確認ができ、同じパソコンにUSB-6218を接続した場合は、同じ
自作プログラムで32Ch同時計測もできますので、パソコン側の問題ではないと思
います。
またUSB-6009をUSB接続した直後、1回目だけは自作プログラムでも正常動作
することが分かりました。
DAQmxSetAIUsbXferReqCountを使えば問題が解決するのかもしれませんが、
(テストパネルは動作するので違う気がしていますが)製品付属のCDがVer9.3.5
のためか、NI-DAQmx C Reference HelpでDAQmxSetAIUsbXferReqCountの
情報は見つかりませんでした。
今回USB-6009を選んだのは、コストを低く抑えたかったという理由だけでした
ので、USB-6009対応のためだけに手間をかけすぎるのは本末転倒になります
ので、使用実績のあるUSB-6210を購入しなおして対処することに致しました。
製品を変えても、同じプログラムが動作するという点で、御社製品に魅力を
感じていますので、今回は少し残念でしたが、今後ともよろしくお願い致します。
YK1957