08-23-2011 11:05 AM
WindowsXP(32bit)環境で動作していたサンプルプログラムが、
Windows7(64bit)環境では動作しません。
使用ボード:NI-PCI-6534
サンプルプログラム:Cont Acq-Int Clk-Every N Samples Event ※アナログ入力⇒デジタル入力に変更
/*********************************************/
// DAQmx Configure Code
/*********************************************/
DAQmxErrChk (DAQmxCreateTask("",&taskHandle));
DAQmxErrChk( DAQmxCreateDIChan(taskHandle, "/Dev1/port2_16", "", DAQmx_Val_ChanForAllLines) );
DAQmxErrChk (DAQmxCfgSampClkTiming(taskHandle,"",10000.0,DAQmx_Val_Rising,DAQmx_Val_ContSamps,1000));
DAQmxErrChk (DAQmxRegisterEveryNSamplesEvent(taskHandle,DAQmx_Val_Acquired_Into_Buffer,1000,0,EveryNSamplesCallback,NULL));
DAQmxRegisterEveryNSamplesEvent()関数の呼び出し時にエラーが発生します。
エラーコードを確認すると「-89000」となっていますが、このエラーコードに関する
ドキュメントがないため原因が分かりません。
以上、ご教示願います。
(補足1)
ヘッダー(NIDAQmx.h)およびライブラリ(NIDAQmx.lib)は、以下のフォルダにある64bit用のものを
使用しています。
C:\Program Files (x86)\National Instruments\Shared\ExternalCompilerSupport\C\include\NIDAQmx.h
C:\Program Files (x86)\National Instruments\Shared\ExternalCompilerSupport\C\lib64\msvc\NIDAQmx.lib
(補足2)
NI Spyのキャプチャ結果は以下の通りです。
1. DAQmxCreateTask ("", 0x00A2E460)
2. DAQmxCreateDIChan (0x0000000000A2E460, "/Dev1/port2_16", "", "DAQmx_Val_ChanForAllLines")
3. DAQmxCfgSampClkTiming (0x0000000000A2E460, "", 10000, DAQmx_Val_Rising, DAQmx_Val_ContSamps, 1000)
4. DAQmxRegisterEveryNSamplesEvent (0x0000000000A2E460, "DAQmx_Val_Acquired_Into_Buffer", 1000, 0, 0x000000014000100F, NULL)
5. DAQmxGetExtendedErrorInfo ("", 2048)
6. DAQmxStopTask (0x0000000000A2E460)
7. DAQmxClearTask (0x0000000000A2E460)
解決済! 解決策の投稿を見る。
08-24-2011 06:25 AM
seitaro 様
ご投稿頂きましてありがとうございます。
日本ナショナルインスツルメンツ技術部のワカスと申します。
seitaro 様のお使い中のDaqmxドライバはどのようなバージョンでしょうか。
Window7にNI-Daqmx9.0.2以降のバージョンが対応しております。
ご確認頂けますでしょうか。
08-24-2011 07:29 PM
NI-DAQmxのバージョンは 9.3 を使用しています。
開発環境は以下の通りです。
OS Windows7 Professional(64bit) SP1
IDE VisualStudio2008(ビルドプラットフォームは x64 を使用)
以上、よろしくお願いいたします。
08-25-2011 03:38 AM
seitaro 様
ご確認頂きましてありがとうございます。
弊社のデータベースを調べ致しましたが、エラーコード「-89000」は Windows 7(64bit)にて
Cont Acq-Int Clk-Every N Samples Eventのサンプルプログラムを実行する何人のお客様より報告されています。
一人のお客様は、Win7(64bit)にてDAQデバイスNI 6533/34を同じプログラムでご利用頂いたところ、エラー89000が発生されました。
この場合も、32bitシステムにてプログラムが正常に動作するとのことです。
こちらの現象は既に本社にCAR(Corrective Action Require)として登録されております。
今のところでは、上記エラーに対処するパッチがリリーズされておりません。
大変お手数をおかけ致しますが、Win7(64bit)にてこちらのサンプルプログラムは実行頂けないと思います。
以上、宜しくお願い致します。
08-28-2011 11:35 PM
サンプルが動作しないとのこと、了解しました。
32ビット版を使用するしかなさそうですね。
後学のため、以下の内容も教えていただけますでしょうか?
・NI 6533/34以外のDigitalI/Oボードを使用しても同様のエラーが発生しますか?(このエラーが回避可能なボードの有無)
・それとも現状のWindows 7(64bit)環境では、(DAQmxRegisterEveryNSamplesEvent含め)コールバック関数は使用できないということでしょうか?
・結局エラーコード「-89000」はどういった内容のエラーなのでしょうか?
・CAR(Corrective Action Require)として登録されているということは、いずれパッチがリリースされると考えてよろしいでしょうか?
以上、よろしくお願いいたします。
08-30-2011 04:26 AM
seitaro 様
ご連絡頂きましてありがとうございます。
今回のエラーについて可能性のある回避策をご連絡を申し上げます。
お手数ですが、64ビット環境にて下記をお試し頂けますでしょうか。
今回のエラーはWindows7 (64ビット)の環境で報告されております。
32ビットに使用されたAttributeのデータタイプ「u32」を(64ビット)にて「tSizeType」に変換するとのことです。
今回のエラーは、「Dynamic cast failed error」となり、Attribute のデータタイプが「tSizeType」にアップグレードされていないことを示していることが考えられます。
例えば、イベントにて「Sample Interval」は「uInt32」ですが、64ビット環境では、こちらは「tSizeType」にする必要があります。
お手数ですが、お使い中のプログラム中 DAQmxRegisterEveryNSamplesEvent のデータタイプを 「uInt32」 から 「tSizeType」 に変換して頂き、再度プログラムを実行していただければと思います。
以上、宜しくお願い致します。
08-31-2011 02:36 AM
「tSizeType」型はどのファイル(ヘッダー)に定義されていますでしょうか?
uInt32をtSizeTypeに変更しただけでは、コンパイルエラーとなります。
以上、よろしくお願いいたします。
08-31-2011
10:21 PM
- 最終編集日:
06-20-2024
10:24 AM
、編集者:
Content Cleaner
seitaro 様
ご報告頂きましてありがとうございます。
弊社のデータベースを調べ致しましたところ、弊社のNI-HSD 64bit Driverにおけるエラー「-89000」に対する回避策として「u32」型を有する全てのAttributeを「tSizeType」型に変換するような報告がありましたので、念のため、seitaro様にも試して頂きました。
現在、seitaro様はNI-Daqmx 9.3をご使用中ですが、お手数ですが、下記のリンクよりDaqmxの最新版をインストールして頂いてお試して頂けますでしょうか。
NI-Daqmx 9.4:
https://www.ni.com/ja/support/downloads/drivers/download.ni-daq-mx.html#288345
以上、宜しくお願い致します。
09-01-2011 11:12 PM
NI-Daqmx 9.4に更新したところ、無事サンプルプログラムが動作しました。
(「tSizeType」型への変換はしなくてすみました)
ちょうど良いタイミングで修正版が公開されて助かりました。
これまでの御対応、どうもありがとうございました。
09-01-2011 11:20 PM
seitaro 様
ご報告頂きましてありがとうございます。
仰る通り、本件のパッチがDAQmx 9.4 にてリリーズされました。
ご所望の動作が実現されましたことは何よりも嬉しいです。
今後とも宜しくお願い致します。