10-17-2011 09:03 PM
NI-FBUS APIを使用してFOUNDATION fieldbus機器のファームウェアを書き込むツールを作成しています。NI-FBUS Communications Manager(以下、NI-FBUSと略します)の特定のバージョンでAPIが必ずエラーを返す現象に遭遇しました。現象に遭遇した環境は次の通りです。
ファームウェアの書き込みにはNI-FBUS APIのnifDownloadDomain()を使用しています。この環境でこのAPIを呼び出すと必ずエラーE_RESOURCESが返されます。このツールはNI-FBUSのバージョン3.2.1のときにVisual C++で開発しており、これまでこのエラーが返されたことはありませんでした。
NI-FBUSのバージョンとOSの組み合わせを変えて現象を調べた結果、次のことがわかりました。
調べたNI-FBUSのバージョンは3.2.1, 3.2.3, 4.0, 4.0.1。
OSはWindows XP, Windows Vista 32ビット, Windows7 32ビット, Windows7 64ビットのそれぞれ日本語版と英語版。ただしWindows7ではNI-FBUSの対応バージョンの関係から4.0.1のみ。
英語のディスカッションフォーラムではバージョン3.2.3で同様の現象が報告されていますが、こちらではバージョン4.0.1でのみ起きています。
An application that ran correctly on 3.1.1 gives runtime errors on 3.2.3.
nifDownloadDomain()を使用したアプリケーションを開発している方で、この現象が起きる方はいらっしゃいますか?
解決済! 解決策の投稿を見る。
10-20-2011 03:24 AM
kuromelody 様
平素より弊社製品をご使用いただき誠に有難うございます。
日本ナショナルインスツルメンツ技術部の星と申します。
こちらで過去の事例をお調べしたのですが特に有用な情報が確認できませんでした。
nifDownloadDomain()関数を呼び出す際にE_RESOURCESエラーが発生する原因はいくつか考えられます。
- ダウンロードされるファイルを作成・読み取る際に発生するエラー。その場合GetLastError()関数でファイル操作のエラーの詳細を確認できます。GetLastError()関数については下記のMSDNページをご参照ください。
GetLastError function
http://msdn.microsoft.com/en-us/library/ms679360(VS.85).aspx
- ODの内容が正しくない。ダウンロードにおいてOD内容が破損した可能性がありますので、再度ダウンロードをお試しください。
- PCMCIA-FBUS Series 2インターフェースカードがデバイス側で正常にリソース(メモリ、タイムスライス等)の割り当て・アクセスができなかった。こちらの問題の原因は複雑でして、機器とインターフェース間のデータ量が多い場合、機器ファームウェアで問題が発生した場合などが考えられます。
上記も踏まえた上で、ダウンロードしているファイルサイズを教えていただけますでしょうか。
宜しくお願いします。
日本ナショナルインスツルメンツ株式会社
星 大輝
10-20-2011 04:15 AM
星様、返信ありがとうございます。
すでに調査で数十回ダウンロードしていますが、NI-FBUS 4.0.1では100%の頻度でE_RESOURCESが返されます。NI-FBUS 4.0以下ではE_RESOURCESが返されることはありません。例えば次のようなことをやってもこれは変わりません。
- NI-FBUSをアンインストールしてWindowsを再起動する。
- NI-FBUS 4.0.1をインストールしてWindowsを再起動する。
- ファームウェアのダウンロードを行う。
→ nifDownloadDomain()がE_RESOURCESを返して失敗する。- もう一度ファームウェアのダウンロードを行う。
→ nifDownloadDomain()がE_RESOURCESを返して失敗する。- NI-FBUSをアンインストールしてWindowsを再起動する。
- NI-FBUS 4.0をインストールしてWindowsを再起動する。
- ファームウェアのダウンロードを行う。
→ nifDownloadDomain()がE_OKを返して成功する。- NI-FBUSをアンインストールしてWindowsを再起動する。
NI-FBUS 4.0.1をインストールしてWindowsを再起動する。
- ファームウェアのダウンロードを行う。
→ nifDownloadDomain()がE_RESOURCESを返して失敗する。
ダウンロードしているファイルのサイズは347,511バイトです。ちなみにnifDownloadDomain()の実行時間はE_RESOURCESが返される場合でもE_OKが返される場合でも8分50秒ほどで変わりません。
nifDownloadDomain()がE_RESOURCESを返したときにGetLastError()が何を返すかは調べてみます。
10-21-2011 01:23 AM
kuromelody 様
平素より弊社製品をご使用いただき誠に有難うございます。
日本ナショナルインスツルメンツ技術部の星と申します。
こちらのパッチは32ビットOS用にですので予めご了承ください。
宜しくお願いします。
日本ナショナルインスツルメンツ株式会社
星 大輝
10-21-2011 02:02 AM
添付のパッチを試そうとしたのですが、パスワードがかかったZIPファイルとなっていて解凍できません。
公開前のものをここに貼るためにパスワードをかけたのだと思います。フォーラムの機能のプライベートメッセージを使って私にパスワードを送っていただけますか? すぐに試してみます。
10-21-2011 02:30 AM
nifDownloadDomain()の実行直後にGetLastError()を呼んでどんな値が返ってくるか調べてみました。
今回問題になっているNI-FBUS 4.0.1で調べたところ、nifDownloadDomain()がE_RESOURCESを返してきた直後にGetLastError()を呼ぶと0、すなわちERROR_SUCCESSが返ってきました。
比較のために、nifDownloadDomain()に存在しないファイルのパスを与えてみたところ、
nifDownloadDomain()の戻り値: E_RESOURCES
GetLastError()の戻り値: ERROR_SUCCESS
となりました。
残念ながらnifDownloadDomain()の処理が終わるまでに、Win32のエラー情報は失われてしまうようです。OSはWindows XPとWindows 7、NI-FBUSのバージョンは3.2.3, 4.0, 4.0.1でこれらすべての組み合わせで調べてみましたが、どの組み合わせでも同じ結果でした。
10-24-2011 12:25 AM
kuromelody 様
平素より弊社製品をご使用いただき誠に有難うございます。
日本ナショナルインスツルメンツ技術部の星と申します。
宜しくお願いします。
日本ナショナルインスツルメンツ株式会社
星 大輝
10-24-2011 03:56 AM
頂いたNI-Communications Manager Patch (4.0.1)を既存のnifb.exeと置き換えて試してみたところ、nifDownloadDomain()がE_RESOURCESを返すことがなくなりました。機器へのファームウェアの書き込みも正常に完了します。
念のため次のOSで試してみたところすべてのOSで正常に動作することが確認できました。
パッチは32ビット版とのことでしたが、64ビットOSでもnifb.exeは32ビット版がインストールされているので試してみました。
今回の件を整理すると、
ということでよろしいでしょうか。
このパッチが正式に公開されたときにはこのトピックに連絡をいただければ幸いです。そのときをもってこのトピックは解決とさせていただきたいと思います。
10-25-2011 12:04 AM - 最終編集日: 06-18-2024 02:09 PM 、編集者: Content Cleaner
kuromelody 様
平素より弊社製品をご使用いただき誠に有難うございます。
日本ナショナルインスツルメンツ技術部の星と申します。
お忙しい中、解決のご連絡を頂きまして誠にありがとうございます。
エラーが解消されまして大変嬉しく思っております。
こちらの都合で大変恐縮なのですがFBUSのパッチに関しては情報公開をしておらず、
最新のドライバにて対応させていただいております。
本不具合についてはパッチで修正できたとのことですので、
つい最近公開されましたNI-FBUS Configurator 4.1でも問題ないはずですので、
下記リンクよりダウンロードしてお試しいただければと思います。
NI-FBUS Configurator 4.1 - Windows 7 x86/Vista x86/Server 2008 R2 (64-bit)/XP x86/Vista x64/Server 2003 R2 (32-bit)/7 64 bit
本件については大変ご迷惑をおかけしました。
宜しくお願いします。
日本ナショナルインスツルメンツ株式会社
星 大輝
10-25-2011 01:21 AM
NI-FBUS Configurator 4.1をインストールして動作させてみたところ、正常に動作することが確認できました。
丁寧に対応していただきありがとうございました。