この記事では、あるPCで実行されているLabVIEWプログラムを、別のPC上で見たり制御するための方法を紹介しています。
離れたところにあるPCに対してリモートデスクトップでアクセスするという手ももちろんありますが、VIの状態だけ見るのであればLabVIEW自体にあるリモートアクセスの機能を使ってアクセスすることが便利なときもあります。
なお、LabVIEWプログラム、としては、VIだけでなく、LabVIEWからビルドしたアプリケーション、いわゆるEXEファイルも含めて紹介しています。
リモートアクセスの準備
リモートアクセスは文字通り、あるPC上で実行されているLabVIEW VIあるいはLabVIEWで作成したEXEに対して、別のリモートPCからアクセスすることを指します。
今後の説明の都合上、「LabVIEW VIあるいはLabVIEWで作成したEXE」を実行しているPCを「サーバーPC」、これにアクセスしているPCを「クライアントPC」と呼ぶことにします。
事前準備として、「サーバーPC」側のLabVIEWで以下の設定を行っておきます。
LabVIEWのメニューバーの「ツール」の最下部にある「オプション」を選択して、Webサーバーのカテゴリにある「リモートパネルサーバ」を有効にしておきます。
また、HTTPポートについてもこの時点で確認しておきます。この記事では、以下のようにポート番号を「8123」としている前提で以降の説明をしていきます。
同じWebサーバカテゴリの下の方のページにある、ブラウザアクセスという部分についても「表示と制御を許可」とした状態でワイルドカード(「*」、アスタリスクのことです)を登録しておきます。
ブラウザを使用するわけではないですが、昔あった機能の名残でこの名称が残っているのだと思います。
なお、リモートアクセスによって、クライアントPCからサーバーPC上のVIあるいはEXEを制御(数値の操作やボタン押下など)ができるようになりますが、こういった「制御権」は同時にどれか一つのクライアントもしくはサーバー自身しか持ちえません。
また、実際は全てのVIおよびEXEが同じようにこの機能を使えるかというとそうではなく、リモートアクセスでは使用できない機能がいくつかあります。
注意事項についてはLabVIEWの以下のヘルプページに記載があるので、リモートアクセスを活用しようと考える際にあらかじめ確認しておいた方がいいと思います。
シチュエーション別アクセスの仕方
ほとんど使い方は同じなのですが、いくつかのシチュエーション別にそれぞれやり方を紹介していきます。
サーバーPC上で動作しているVIに、クライアントPCからアクセス(クライアントPCにLabVIEWがある)
まず一番簡単なのは、サーバーPC上で動作しているVIに、クライアントPCのLabVIEWからアクセスするという場合です。
この場合、簡単なのはクライアントPCのLabVIEWの操作メニューからリモートアクセスする方法になります。
試しに、サーバーPC側で、以下のようなプログラムが動いていて、これをクライアントPC側から見たり制御したりというシチュエーションを考えます。
VI名はsimpletest.viです(あとでこの名前を使用します)。
サーバーPC上では上記のプログラムが実行されているとして、クライアントPC側では「操作」のメニューから「リモートパネルに接続」を選択して、必要事項を入力していきます。
サーバアドレス、は、サーバーPCのIPアドレスのことです(クライアントPCとサーバーPCは同じネットワーク下にある必要があります)。
ポートはサーバーPC側で設定した「HTTPポート」のことです。この記事の例では8123にしていたので、以下の図ではそう指定しています。
VI名は、サーバーPC上で実行していて今から動作を見ようとしているVIの名前です。拡張子「.vi」も含めて一字一句間違えずに入力します。
あとは「接続」を押せばクライアントPC側でサーバーPC上のviを見ることができます。
「リモートパネルに接続」の画面にて「制御を要求」にチェックを入れていない場合、クライアント側には最初制御権はありません。
ただし、右クリックして「制御を要求」することで、制御権をクライアント側が持つことができ、ボタンを押したり値の変更ができます。
なお、クライアント側が制御権を持っている場合、サーバーPC側にはどのクライアントが制御権を持っているかの表示が出ます。
あるいは、クライアントPC上で以下の図の右側のようなプログラムを組むことで、操作メニューの機能を使用せずにアクセスすることもできます。
この方法が使えるということは、LabVIEWの開発環境が無くても、プログラムさえあればリモートアクセスができる、ということになります。
以下、このプログラムの中身を紹介します。
とはいっても、全体の構造はイベントストラクチャを用いたシンプルなもので、そのほとんどすべてのイベントでインボークノードを使用しているだけになっています。
以下が各イベントの中身です。
注意点としては、サーバーPC上のVIを動作させているLabVIEWと、クライアントPCからアクセスしようとしているLabVIEWのバージョン(厳密にはランタイムエンジンのバージョンになると思いますが)が一致している必要があることです。
これらが一致していないとリモートアクセスはできません。
また、もしサーバーPC側で「プロジェクトから開いたVI」を使用している場合には、指定するVI名はプロジェクト名を含んだVIである必要があります(このルールは、プログラム的にではなく「操作」メニューからリモートアクセスした場合も同様です)。
例えばサーバーPC上でremotetest.lvprojというプロジェクトの「マイ コンピュータ」の下にある「simpletest.vi」を実行している場合に指定するVI名は
remotetest.lvproj/マイ コンピュータ/simpletest.vi
となります。(「マイ」と「コンピュータ」の間は半角スペースがあります)
サーバーPC上で動作しているVIに、クライアントPCからアクセス(クライアントPCにLabVIEWがない)
次のシナリオは、サーバーPC上で動作しているVIに対してアクセスしようとしているクライアントPCにLabVIEWが入っていない場合です。
この場合には、クライアントPCに、「サーバーPCにアクセスする」ためのEXEを配布することになります。
既に紹介した、プログラム的にリモートアクセスするためのプログラムをLabVIEW開発環境があるPCで作成、ビルドし、インストーラを作って、このインストーラをクライアントPCで実行することで、クライアントPCにEXEを用意することができます。
注意点としては、上記のようなEXEをビルドする際に、ビルド仕様の設定で「今後のLabVIEWランタイムバージョンでこのアプリケーションの実行を許可する」の項目のチェックを外しておくことです。
このチェックが入っている場合、もしクライアントPCに何らかの理由で「EXEを作成したのとは異なるバージョンのLabVIEWのランタイムエンジン」がインストールされている場合、EXEを動作させるランタイムエンジンとして、サーバーPCのLabVIEWと同じバージョンが使われない可能性があるためです。
サーバーPC上で動作しているEXEに、クライアントPCからアクセス
最後のシナリオは、サーバーPC上で動作しているEXE(LabVIEWから作ったもの)に対して、クライアントPCからアクセスする場合です。
クライアントPCにLabVIEWが入っていればLabVIEWから、入っていなければ既に紹介したように「サーバーPCにアクセスする」ためのEXEを使って、リモートアクセスすることは変わりません。
ただし、アクセスするポート番号は、サーバーPC上で動作しているEXEに付属するconfファイルに記載の番号を指定します。
もし、サーバーPCにLabVIEWが入っている状態でEXEを動かしている、という場合には、LabVIEWで指定したのとは別のポート番号をconfファイル中に新たに指定したうえで実行することになります。
例えばサーバーPC上のLabVIEW自体の設定としてHTTPポートは「8123」を指定していたので、EXEに付属するconfファイルでは「8124」を指定する、といった具合です。
本記事では、LabVIEWのリモートアクセス機能について紹介しました。
普段はしないようないくつかの設定はありますが、別PC上のプログラムのフロントパネルの監視だけでなく制御まで行えてしまうこの機能が便利に使える場面も多いと思うので、設定の参考になるとうれしいです。
ここまで読んでいただきありがとうございました。
コメント