- リンクを取得
- ×
- メール
- 他のアプリ
- リンクを取得
- ×
- メール
- 他のアプリ
LabVIEWで怖いのは、実行形式にした途端動作しなくなること。
開発環境ではちゃんと動作していたのに、exe化して実行形式をランタイムライブラリ上で動かしたら・・・動作しない。
とっても怖いんです。
大体実行形式にするのは開発の終盤が多く、もう納品日程も目の前に迫っている。
とっても怖いですね。
で、USRP-RIOの実行形式で一番ありがちなエラーがこちら。
Bitfile not found.
USRP-RIOのIDLで開発をした場合、実行形式(exe)以外にFPGAビットファイル(USRP-RIOのFPGAのプログラムコード)が必要になりますが、このファイルが見つからないというエラーです。
このエラーがUSRP-RIOの実行形式にした場合に出現するエラーNo.1です。
で、一体何がエラーの原因かと、エラーダイアログの下の方を見るとFPGAビットファイルをロード使用としたパスが表示されています。
C:\Users\mikio\Desktop\work\build\NI-USRP Simple Streaming\マイアプリケーション\Application.exe\Bitfiles\niUsrpRio200_XcvrTime.lvbitx
というパスからロードしようとしています。
ロードパスの中に、実行形式のファイル名が入ってしまっており、これではロードできません。
これ良くあるんです。外部ファイルを読み込む際に相対パスの起点が間違っているというミス。
USRP-RIOのIDLサンプルは何年も前から存在していて「いつ改善されるのかなぁ~」と気長に思っていましたが、なかなか改善されてません。
開発環境上で実行した場合と、実行形式にした場合でビットファイルのロードパスが異なっているのが根本原因です。
この対策は簡単で、どちらの場合でも対応できるようにロードパスを固定しておけば良いです。
まずプロジェクトエクスプローラーでビットファイルをロードしているVIを開きます。
ブロックダイアグラムがこちらです。
中央の赤枠の中で、ロードするパスを生成しています。
これをごっそり変更します。
「アプリケーションディレクトリ定数」を関数パレットの「ファイルI/O→ファイル定数→アプリケーションディレクトリ」から持ってきて、以下のようにつなぎ替えます。
これでOK。
あとはプロジェクトフォルダの"FPGA Bitfiles"フォルダを、実行形式のexeと同じフォルダにコピーします。
これで完了。
で、実際に実行してみた場合を比較してみます。
開発環境上で実行した場合のビットファイルロードパス
ランタイム環境(exe)で実行した場合のビットファイルロードパス
これで大丈夫ですね。
今回はビットファイルでしたが、外部ファイルを読み込む際に相対パス指定をする場合などで同じミスは発生しやすいです。
予め避けるためにもアプリケーションディレクトリ定数なら、
・開発環境上→プロジェクトのフォルダ
・実行形式上→exeと同じフォルダ
に固定できますので、この定数を相対パスの起点にするといいですね。
私たちドルフィンシステムは、今回ご紹介したような試みも繰り返しながら、できるだけ生産性を高めてSDRシステムの開発を行っており、お客様の要望に応じた最適な無線システムを提案しています。
SDRを用いた無線システムのご要望はドルフィンシステムへ。
以上、ドルフィンシステム福島でした。
開発環境ではちゃんと動作していたのに、exe化して実行形式をランタイムライブラリ上で動かしたら・・・動作しない。
とっても怖いんです。
大体実行形式にするのは開発の終盤が多く、もう納品日程も目の前に迫っている。
とっても怖いですね。
で、USRP-RIOの実行形式で一番ありがちなエラーがこちら。
Bitfile not found.
USRP-RIOのIDLで開発をした場合、実行形式(exe)以外にFPGAビットファイル(USRP-RIOのFPGAのプログラムコード)が必要になりますが、このファイルが見つからないというエラーです。
このエラーがUSRP-RIOの実行形式にした場合に出現するエラーNo.1です。
で、一体何がエラーの原因かと、エラーダイアログの下の方を見るとFPGAビットファイルをロード使用としたパスが表示されています。
C:\Users\mikio\Desktop\work\build\NI-USRP Simple Streaming\マイアプリケーション\Application.exe\Bitfiles\niUsrpRio200_XcvrTime.lvbitx
というパスからロードしようとしています。
ロードパスの中に、実行形式のファイル名が入ってしまっており、これではロードできません。
これ良くあるんです。外部ファイルを読み込む際に相対パスの起点が間違っているというミス。
USRP-RIOのIDLサンプルは何年も前から存在していて「いつ改善されるのかなぁ~」と気長に思っていましたが、なかなか改善されてません。
対策
では対策を施します。開発環境上で実行した場合と、実行形式にした場合でビットファイルのロードパスが異なっているのが根本原因です。
この対策は簡単で、どちらの場合でも対応できるようにロードパスを固定しておけば良いです。
まずプロジェクトエクスプローラーでビットファイルをロードしているVIを開きます。
ブロックダイアグラムがこちらです。
中央の赤枠の中で、ロードするパスを生成しています。
これをごっそり変更します。
「アプリケーションディレクトリ定数」を関数パレットの「ファイルI/O→ファイル定数→アプリケーションディレクトリ」から持ってきて、以下のようにつなぎ替えます。
これでOK。
あとはプロジェクトフォルダの"FPGA Bitfiles"フォルダを、実行形式のexeと同じフォルダにコピーします。
これで完了。
で、実際に実行してみた場合を比較してみます。
開発環境上で実行した場合のビットファイルロードパス
ランタイム環境(exe)で実行した場合のビットファイルロードパス
これで大丈夫ですね。
まとめ
- USRP-RIO IDL "Configure Bitfile.vi"のパス指定周りをアプリケーションディレクトリ定数に置き換えると良い。
今回はビットファイルでしたが、外部ファイルを読み込む際に相対パス指定をする場合などで同じミスは発生しやすいです。
予め避けるためにもアプリケーションディレクトリ定数なら、
・開発環境上→プロジェクトのフォルダ
・実行形式上→exeと同じフォルダ
に固定できますので、この定数を相対パスの起点にするといいですね。
私たちドルフィンシステムは、今回ご紹介したような試みも繰り返しながら、できるだけ生産性を高めてSDRシステムの開発を行っており、お客様の要望に応じた最適な無線システムを提案しています。
SDRを用いた無線システムのご要望はドルフィンシステムへ。
以上、ドルフィンシステム福島でした。
コメント
コメントを投稿