TS工房 -技術者と研究者とモノづくり-

音楽や芸術のスタジオやアトリエの様な雰囲気の工房で、研究者として・技術者として”ものづくり”をしたい

MENU

【LabVIEW】複数のファイルを選択して、うまい具合に表示する【サンプルプログラム】

これまで自分で作ったLabVIEWプログラムは自分しか使わないので、フロントパネルの操作性といったUIについてあまり関心を払ってきませんでした。ところが、最近は他人がプログラムを使う機会が増えてきました。自分の作った物が世の中に役立つということはありがたい反面、他人が使いやすいような操作性といったGUIを意識しなければならなくなってきました。これが意外と大変。

そのような背景のなかで悩んでいたのが、LabVIEW上でどうやったら複数のファイル選択できるような操作になるかということ。いろいろ悩んだ結果、ファイルダイアログとリストボックスを組み合わせることで目的の機能を達成することができた。 悩みの過程とともにサンプルプログラムも載せておきます。

 

1.「フォルダをリスト」関数・・・不採用

真っ先に思いついた方法が既存の「フォルダをリスト」関数を使用する方法です。パスで検出されたファイル名やフォルダ名をリスト化できます。リストボックスを組み合わせることでファイルのリスト表示はできるが、ファイルの複数選択ということができなかった。不採用。

 

2.フォルダ・ファイルのツリー表示・・・不採用

Google検索の過程で発見したが、 「フォルダ内のフォルダ、ファイルをツリー表示させる - NI Community」で特定のフォルダに入った全てのフォルダやファイルをツリー構造で表示させる方法が紹介されている。個人的にツリー表示が好きじゃない、サンプルプログラムがぱっと見で複雑、ファイルを複数選択できるか不明だったという理由から不採用。


3.ファイルダイアログとリストボックスを組み合わせる・・・採用

私が今回作成したサンプルプログラムを下に張ります。VIスニペットなのでそのままコピーできます。よければ参考にしてください。

f:id:wannavi:20210302211353p:plain

LabVIEWで複数のファイルを選択してうまい具合に表示するサンプルプログラム

f:id:wannavi:20210302211735j:plain

フロントパネル

「ファイルを複数選択する」という動作については、ファイルダイアログを利用しました。デフォルトで単一項目選択に制限されている状態のため、プロパティなどからチェックを外して同時に選択できるようにします。こうすることで、Windowsライクなファイル選択をすることができます。

「選択されたファイルをリスト化して表示する」という動作については、リストボックスを利用しました。ただし、表示器としてリストボックスを配置すると数字タイプの変数となり、ファイルダイアログの出力を直接配線することができません。そこでプロパティノードを活用しました。「リストボックスを右クリック>作成>プロパティノード>項目名」の順で項目名のプロパティノードを作成して、これをForループと組み合わせて配線します。これでフロントパネルに表示したようなリストができあがります。

また、この後の動作として、選択されたファイルのリスト群からさらに一つを選択して、さらに追加の処理をさせたい場合があるかと思います。フロントパネル上でリストボックスを選択すると選択行に応じて数字を取得できるため、これを活用すれば簡単にファイル処理を追加することができます。

 

年明けからLabVIEWとの闘いが続いていましたが一段落しましたので、少しLabVIEWから離れますが、LabVIEWプログラムは作っていて楽しいので意外と相性が良いのかもしれない。ではまた。

【LabVIEW】LabVIEWからMATLABを呼び出す

私はLabVIEWユーザーでありMATLABユーザーです。私の中では、ざっくりと二つの言語の使い分けは以下のようにしていました。

  • LabVIEW ⇒ 測定器の自動化、制御、GUI込で作りたいとき
  • MATLAB ⇒ スペクトル解析、MATLIX計算、画像再構成

やはり解析メインの場合にはどうしてもMATLABで一択です。MATLABと同じ水準のことをさせようと頑張れってプログラムを組めばLabVIEWでも組めるはずですが、非効率すぎます。リソースの無駄遣い。

今まで必要に迫られなかったのでちゃんと調べたことが無かったのですが、実はLabVIEWからMATLABを呼び出すことができます。今後の計画では明らかに必要となる機能であるため、プログラムが動くところまで手を動かしてみたので、その流れのまとめです。

 

LabVIEWからMATLABを呼び出す方法

方法① MATLABスクリプトノード

LabVIEWに備わっているMATLAB Scriptノードを使えば、自動的にMATLABが起動して、データをMATLABワークスペースに入れることができます。NIのページがまさにそれだったので以下に引用して残しておきます。

たしかに以下の手順通りにするとVI実行とともにMATLABが立ち上がり、50*50のランダム二次元配列が生成されsurf関数で立体表示された。MATLABのウィンドウを閉じるときに「×印」で閉じるとLabVIEWがクラッシュして落ちてしまう。MATLABのコマンドでexitで抜けると問題なかった。

 

  1. 操作ツールやラベリングツールを使用して、MATLABスクリプトノードに次のスクリプトを入力します。a=rand(50)surf(a)
  2. MATLABスクリプトノードに出力を追加して、出力用の表示器を作成します。
    1. MATLABスクリプトノードフレームの右側を右クリックし、ショートカットメニューから出力を追加を選択します。
    2. 出力端子で「a」を入力して、スクリプトに「a」の変数の出力を追加します。
    3. 出力端子のデータタイプを指定します。 MATLABスクリプトノードでは、新しい入力端子または出力端子のデフォルトのデータタイプは実数です。「a」出力を右クリックし、ショートカットメニューからデータタイプを選択→実数の2次元配列を選択します。
    4. a」出力端子を右クリックし、ショートカットメニューから作成→表示器を選択して、実数の2次元配列とラベル付けられた2D配列の数値表示器を作成します。
  3. エラー出力の出力端子を右クリックし、ショートカットメニューから作成→表示器を選択して、エラー出力のラベルが付けられたエラー出力表示器を作成します。
  4. VIの実行時にスクリプトが生成するすべての数値を参照できるように、実数の2次元配列フロントパネル表示器のサイズを調整します。
  5. VIを実行します。LabVIEWは、MATLABソフトウェアスクリプトサーバを呼び出して、乱数から成る行列を作成し、行列をMATLABソフトウェアで表示し、その情報をグラフにプロットして、フロントパネルの実数の2次元配列表示器に行列を構成する値を表示します。
  6. (オプション) MATLAB言語構文で作成されたスクリプトデバッグします。

 

f:id:wannavi:20210213182524p:plain

LabVIEWからmatlbaを実行して描画させる



方法② もしMATLABライセンスを保有していない場合

他の人が作成したMATLABスクリプトを使いたいという場合があります。正式なMathworkライセンスを持っていなければMATLAB Scriptノードを使うことはできません。そこでMATLAB側でdllファイルを作成して、ライブラリ関数呼び出しノードで使用するという手があります。一つ前の投稿で「【LabVIEW】LabVIEWにCプログラムを組み込む方法 - TS工房 -技術者と研究者とモノづくり-」というものがありますが、やっていることは同じですね。

 

方法③ LabVIEWからMATLABを実行させる

おそらく方法①が正攻法なんだろうけど、スクリプトLabVIEW上に書いたり、線の繋ぎやデータタイプを意識するのが正直面倒だなと思いました。

まだ、試してはいないけどシステム実行VIを使用して、LabVIEWからMATLAB.exeまたはビルドされた実行ファイルを呼び出すことも可能みたいなので、これを利用するのが良いのではと思っています。

要は、LabVIEWで取得したデータをCSVかバイナリかで保存して、そのあとにVIからMATLABを実行させてデータを読みに行かせるという方法。もう、ここまできたら独立でも良いような気がしてきた。

 

 

参考にしたページ