Express VIはLabVIEWにまだ慣れていない人にとってはかなり便利な機能と言えると思います。
いくらグラフィカル言語と言えど、LabVIEWも結局はプログラミング言語、全然右も左も分からない!という方にとっては、手っ取り早くちょっとした機能を手に入れるには確かに役立つと言えます。
でも、私は極力Express VIはプログラムの中で使用しないようにしています。LabVIEWを習いたての頃はその便利さからよく使っていたのですが、今は意識して使わないようにしています。
この記事ではExpress VIのメリット、デメリットに触れながら、私がなぜExpress VIを使わないのか、どのように付き合っていくのがいいのか個人的な見解を交えて書いていこうと思います。
※ExpressVIを使用してプログラムを構築されている方を非難する意図は全くありません。あくまで私見です。
Express VIのメリット
とはいえ、まずはExpress VIのメリットを挙げていこうと思います。
Express VIのメリット
- ある程度の機能が既にまとまっている
- 対話式で構成することで、ちょっとしたアプリケーションを構築できる
- Express VIのみで完結する場合にはデータタイプの互換性を気にしなくても大丈夫
それぞれ簡単にお話ししようと思います。
ある程度の機能がまとまっている
メリットとしては、既にある程度の機能がまとまっているため、不慣れな場合に「この機能を持たせるにはこれとこれとこの関数が必要」という知識がなくてもプログラムが組めるという点が挙げられます。
特に機能がたくさんまとまっていると感じるのは、DAQアシスタントかなと思います。これだけで、
- どのデバイスを使うのか
- 扱うタスクは何なのか(入力、出力、アナログ、デジタル、・・・)
- サンプリングのパラメタは何なのか(サンプリングレートやサンプル数など)
を、個々の関数の使い方が分からなくてもプログラムに実装できてしまいます。なんならこれだけで一つのプログラムとして完成させられる場合もあると思います。
後述するパフォーマンスへの影響など気にしないのであれば、「プログラミングを学ぶための時間なんてないよ」という方がDAQアシスタントを使用して計測を行うということに何も反対はしません。
むしろ、プログラミングができないがために研究など先に進められないという学生の方々にとっては、手っ取り早く構築できることはメリット以外の何物でもないと思います。
対話式で構成することで、ちょっとしたアプリケーションを構築できる
また、基本的に構成は対話式で行えるため、どれとどれを設定したらいいということがあらかじめ決まっていてあまり迷わずに特定の機能を実装することができます。
パラメタを変更した際に例えば解析結果がどのように変わるのかも同じダイアログ上に表示されるので、パラメタ変更による処理の結果などがわかりやすい点は確かに便利です。
Express VIのみで完結する場合にはデータタイプの互換性を気にしなくても大丈夫
後述するデメリットに一部関わってきますが、Express VIで特に信号(測定データ)を扱う際にはダイナミックデータという特殊なデータタイプを使用します。
このデータタイプ、独自の定数がないなど他のデータタイプと異なっているため、「ダイナミックデータ以外」と組み合わせて使用する場合には注意が必要なのですが、Express VIばかりを使用している場合には入力も出力もダイナミックデータなのでこの点を気にする必要がなくなります。
Express VIでデータの測定から解析、ファイル保存までできてしまうので、アプリケーションによってはExpress VIのみを使い、データタイプの互換性など気にすることなく全て構成することもできてしまいます。
このように、Express VIはメリットと呼べる部分も当然あるわけです。
と言いつつ、中にはデメリットと考えられる点もいくつかあるので次にそれらの点について挙げていきます。
Express VIのデメリット
次にExpressVIのデメリットと感じている点を挙げていきます。
Express VIのデメリット
- ダイナミックデータという特殊なデータタイプを使用する
- カスタマイズ性に乏しい
- プログラムのパフォーマンス的に効率が良くない
- LabVIEWプログラムに慣れにくい
こちらも簡単にお話ししていきます。
ダイナミックデータという特殊なデータタイプを使用する
デメリットとしては、一部のExpress VIの出力あるいは入力がダイナミックデータという特殊なデータタイプになっていることです。メリットの部分でも少し紹介しました。これがかなり不便と感じています。
一応、ダイナミックデータタイプとそれ以外のデータタイプ(数値配列や波形データなど)とで相互に変換することは可能(この変換の機能もExpress VI)なのですが、そういった変換を施さないと使いづらいデータタイプです。
ダイナミックデータのまま入出力を受け取れる関数はほぼありません。そのためExpress VIで完結しない操作に対してはどうしても型変換を行う必要があり、パフォーマンスの低下につながります。
カスタマイズ性に乏しい
メリットのところで挙げた、決まった機能を対話式に構成できるというのは、裏を返せばカスタマイズ性に乏しいと言えます。LabVIEWはプログラミング言語なので究極的にはどんなカスタマイズにも耐えうるはずですが、その特性をかなり限定してしまっていると言えます。
決まった機能しか使わない、Express VIにある機能だけで十分、という場合にはそれでも構わないのかもしれませんが、だんだんとLabVIEWによるプログラミングに慣れてくると、ああいう機能も実装しよう、これを試そうというアイデアが出てきたりします。
Express VIは残念ながらそういった自由なプログラミングに対しては向かない機能になっています。
プログラムのパフォーマンス的に効率が良くない
さらにパフォーマンス的にもExpress VIの使用はあまり好ましくないと言えます。実はExpress VIはいわゆるサブVIのような実態を持っていて、この中にちゃんと(?)LabVIEWプログラムが入っています。
それを証拠に、右クリックして「フロントパネルを開く」を選択すると、そのExpress VIのフロントパネルおよびブロックダイアグラムを見ることができます。
例えば、DAQアシスタントのExpress VIの中身を見ると、なかなか複雑になっていることがわかります。DAQのプログラムを書ける人が見たらわかると思いますが、実際には必要のない処理や書き方がされています。
例えば、下の画像の二つのブロックダイアグラムはどちらもほぼ同じような操作を行うプログラムになっているのですが、上はExpress VIの中身をみたもの、下はExpress VIを最初から使わずに書いたプログラムになっています。
ただ、これはLabVIEWがExpress VIを作るという都合上汎用性を持たせるために仕方ないことかと思います。ダイアログで与えたパラメタによって、多少制限があるとはいえ、様々な処理を構成できるので、ある程度の余分な作りが残ってしまうのは防げません。
ただ仕方ないとはいえわざわざ余計な処理も加わってパフォーマンスを落とす理由もないと思います。
LabVIEWプログラムに慣れにくい
そして、LabVIEWプログラムに慣れにくい、実は個人的にはここが一番ネックかと思っています。
既に説明したように、Express VIはフロントパネルを開くことでブロックダイアグラムを見ることができます。すべてのExpress VIでブロックダイアグラムを見ることができるわけでもないですが、中身が見れるものを確認すると、結局下位関数が使用されていることがわかります。
Express VIもひとまとまりのプログラムになっているので、本来やろうと思えば自力でも組めるはずです。
自力で組めるというのは、それだけカスタマイズも柔軟にできることを意味しています。せっかくプログラムを自分で思い通りに作れるという環境があるのに、その一部の機能にしか慣れないのはもったいない気がします。
Express VIとの付き合い方
ここまでのお話で、メリットはありつつも、自分が個人的にExpress VIをあまり使用しない理由についてデメリットを例に書いてきました。
ただ、敢えてExpress VIを使うこともあります。最終的なプログラムでExpress VIのまま使用するというよりも、プログラム構築の時間短縮のため、いったんExpress VIで機能を実装してから、フロントパネルを開いてブロックダイアグラムを見て、必要なコードの部分だけを抜き出して自分のプログラムに組み込むことをします。
必要な部分だけ取り出して無駄を省けば効率のいいプログラムになると思いますし、Express VIでしか実装できなかった部分についてはこうやって書けばいいのかという知識もつけられるのでLabVIEWプログラムに慣れにくいという問題も解消されるかと思います。
特に良く使う場面としては、Vision AssistantのExpress VIです。Visionのプログラムを普段そんなに使用しているわけではないのですが、Visionの解析処理の関数はかなり種類も多く使い方に相当な慣れが必要です。
そんな時に、各画像処理単位ごとに欲しい部分だけピックアップしたり改造したりするのにVision AssistantのExpress VIは重宝しています。
Express VIと上手に付き合うには、頼りすぎず、頼ったとしてもその中身を探り必要な部分のみを自分のコードに組み込む、こういった操作のためであればExpress VIは誰にとっても便利に使えるものと思います。
個人的に良く使うExpress VI
さんざんExpress VIのデメリット等挙げてきましたが、そんな私でも使っているExpress VIはいくつかあります。
- Vision Assistant
- ファイルダイアログ
- MS Office Report
Vision AssistantのExpress VIは画像解析用のアドオンであるVision Development Moduleについてきます。画像解析の関数はとても多くまた扱い方にクセが多いので、それらの使い方を知るのに便利です。
このExpress VIを使用してある程度画像解析の流れを組んだら、このExpress VIのフロントパネルを開いてブロックダイアグラムのコードを引っ張り出してさらにカスタマイズするということをよくします。
ファイルダイアログのExpress VIはファイルIOの下位関数では実現が困難な、「どのファイルあるいはフォルダを選択しますか?」というダイアログの表示ができます。このExpress VIはフロントパネルを開いても下位関数っぽいところにいきつかないので、特に中身を取り出すということはしません。
そのまま使うしかない機能でかつ一から組むと(組めなくはないと思いますが)相当めんどくさいと思うので、実用的な機能として組み込みます。
MS Office Reportは別記事でも紹介していますが、下位関数で組むのが面倒な時に使用します。細かい組み方も知っているに越したことはないのですが項目があまりに増えて面倒ですし、速さにこだわらないため効率が多少悪くても気にならないためです。
結論、Express VIは面倒あるいはパッと実装方法が分からないあるまとまった機能をどうやって構成すればいいかを知るため、一度作ったらフロントパネルを開いてブロックダイアグラムの中身だけを取り出すという使い方、あるいはパフォーマンスを気にしない場合に適度に使うのが最適だと思います。
頼りすぎると柔軟性に欠けたり自分のLabVIEWスキルも上がりにくいのですが、それをわかっている前提で組むのが面倒な部分等は補助的に使うのが上手につきあうコツだと思います。
ここまで読んでいただきありがとうございました。
コメント