【LabVIEW】VISAで開かれているセッション(ポート)を取得

LabVIEWのVISAを使用して、計測機器と繋げたり、シリアルポートによる通信を行うことは多々あると思います。

その際に、指定をしたセッション(ポート)が既に開かれている(使用されている)ポートかどうかを取得する方法を探したところ、見つかりましたので紹介をします。

本記事の目的
  • LabVIEWのVISAで開かれているセッションをリストとして取得するVIについての解説
  • VISAで開かれているセッションを使用したVIの作成

LabVIEWのVISAセッションをリストで取得するVIの保管位置

VISAセッションをリストで取得するためのVIについてですが、下記の位置にあります。(LabVIEWが32bit版でLabVIEW2019の場合)
C:\Program Files (x86)\National Instruments\LabVIEW 2019\vi.lib\Utility\visa.lib

Visa.libのライブラリファイルを開くことでLabVIEWのLLBマネージャーが開きます。

Open VISA Session Monitorを選択して開くと、VISAセッションモニタVIが開き、VISAで開かれているセッションを表示することが出来ます。

VISAセッションをリストで取得するVIについて

VISAセッションモニタVIを開いて実行を行うと、VISAで開かれたCOMポートなどのリソースがあると、①「現在開かれているセッション」として表示されます。

不要なセッションであれば、VISAセッションモニタVIから直接、②「選択セッションを閉じる」ボタンをクリックするとセッションを閉じることが出来ます。複数のセッションを閉じる場合は、③の「すべて選択」ボタンを押すと、開かれているセッションが全て選択されます。

①:現在開かれているセッション(COMポートなど)が表示されます。
②:現在開かれているセッションで選択されているセッションのVISAを閉じます。
③:現在開かれているセッションの数を表示しています。
④:セッションの更新する時間の間隔です。
⑤:現在開かれているセッションを全て選択します。
⑥:選択されているセッションを解除します。

ブロックダイアグラムについては上図の通りとなっています。開かれているVISAセッションを実際に検索しているのはVisa.libを開いたときに一緒に表示される「Open Session.vi」が行っています。

Open Sessionのブロックダイアグラムについてはパスワードで保護されているため、詳細な内容については解らない状態となっています。

Open Sessionから出力されてきたVISAリソース配列からリソース名を取り出してリストボックスに表示させます。
あとは、ボタンごとにリストボックスに表示されているリソース名を全選択したり解除したり、VISAを閉じたりするプログラムとなっています。

全て並列で走っているため、同時にボタンが押せた場合、予期しない動作が起きそうな気はしますが、普通に使用をしていれば同時にボタンが押せないので問題はないと考えます。(同時に押して予期しない動作になっても大きな問題にならないとは思います。)

VISAセッションリストの応用

VISAセッションリストVIを利用することでLabviewで、指定をしたリソースが開かれているかどうかをプログラムとして確認することができます。

先に、指定をしたVISAリソースが既に開かれているのかを確認するためのVIを作成します。

入力されたVISAリソースと「Open Session.vi」から出力をされるVIセッションリスト(VISAリソースの配列)を比較します。VIセッションリストが配列で出力されるため、Forループを用いて指標付けしています。

Forループ内で、同じリソースが存在する場合は、シフトレジスタに保存をして最後にTrueを出力します。(比較の後にOR関数を配置して前回の値を入力しているため、一度Trueが出力されていると、最後までTrueが保持されます。)

正常に指定をしたリソースが開いているかを確認することで、次の動作(読み書きなど)でエラーが出ないように対策を行うことが出来ます。

ケースストラクチャ内の内容については下図にまとめて表示をしています。

VISAのリソースが開いているかどうかを確認するためのサブVIを上図のように配置することで、

①最初に指定をしたVISAリソースが既に開かれているかを確認します。
②もし開かれていない場合はVISAを開きます。
③問題なく開かれたかを確認します。
④正常に開かれた場合は終了、開かれていない場合はダイアログで表示+エラークリア

⑤ ②の段階で既に開かれている場合は、開かれていることを告げるダイアログを表示
⑥ 既に開かれており、VISAを切断(閉じる)のブールがTrueの場合はVISAを閉じます。

というようなVIを作成することが可能となります。また、シリアル通信などを行う機器を使用する場合に毎回、VISAを開いたり閉じたりするためのVIを配置せずに済むようになります。(この構造である程度の問題には対応出来るはず。。。)