cRIOとホストPC間でシェア変数によるデータ通信を行う

更新しました Jun 25, 2021

環境

ハードウェア

  • cRIO-9049

ソフトウェア

  • LabVIEW
  • LabVIEW Real-Time Module

cRIOとホストPC間でデータのやり取りを行う方法の一つにシェア変数を使用する方法があります。ここではLabVIEWを使用して新規にProjectファイルを作成し、cRIOの追加、簡単なVIの作成、cRIOとホストPC間のデータ通信を行うシェア変数の作成、ホストPC側のプログラムを実行ファイル形式(*.exe)に変換し、別のPCで使用する方法について確認します。手順1~18までは実行環境と開発環境が同じ場合の手順です。手順19以降は自動的にシェア変数をデプロイする方法です。

プロジェクトファイルの作成とcRIOの登録

1.開発環境PCにcRIOを直接LAN接続し、MAXで認識される事を確認します。
2.LabVIEWを立ち上げ、新規プロジェクトを作成します。このプロジェクトはtest.lvprojとして保存します。
3.プロジェクトエクスプローラにてプロジェクトを右クリックし、新規>>ターゲットとデバイスを選択します。
4.ターゲットとデバイスを追加の画面で「既存ターゲットまたはデバイス」「既存ターゲットまたはデバイスを検出します」が 選択されている事を確認し、Real-Time CompactRIOのタブを開き、cRIOを選し、「OK」を押します。「RIOプログラミングモードを選択」の画面ではスキャンインターフェースを選択し、「継続」を選択します。
5.「Cシリーズモジュールを検出?」という選択肢が出てきたときは「検出」を選択します。(何も出ない場合はこのステップは不要です。) 
6.検出ステータスが出てきたら継続を選択します。
7.プロジェクトエクスプローラにてNI-cRIOを右クリックし「接続」を選択します。 

 

VI及びシェア変数の作成と動作確認

8.マイコンピュータを右クリックし、新規>>VIを選択します。このVIをhost.viとして保存します。 
9.プロジェクトエクスプローラにてcRIOを右クリックし、 新規>>VIを選択します。このVIはrt.viとして保存します。
10.プロジェクトエクスプローラにてcRIOを右クリックし、 新規>>変数を選択します。シェア変数プロパティが開いたら、名前をDBL1とし、RT FIFOにて「RT FIFOを有効」にチェックマークを入れます。
11.プロジェクトエクスプローラにてDBL1の1つ上のlvlibファイルを右クリックし、保存を選択し、var.lvlibとして保存します。
12.プロジェクトエクスプローラにてvar.lvlibを右クリックし、新規>>変数を選択します。シェア変数プロパティが開いたら、名前をBool1とし、データタイプはブールを選択します。また、RT FIFOにて「RT FIFOを有効」にチェックマークを入れます。
13.プロジェクトエクスプローラにて「すべて保存」を行ってください。 
14.下記の図のようにhost.viとrt.viを作成します。上側の2つがhost.vi、下側の2つがrt.viです。 プログラムが完成後、保存し、動作を確認します。この時点でシェア変数によるcRIOとホストPC間の通信が可能です。
 
HostandRTvi.png


 

実行形式ファイルの作成と動作確認

15.プロジェクトエクスプローラにてマイコンピュータ側のビルド仕様を右クリックし、新規>>アプリケーションを選択します。マイアプリケーションプロパティにて、ビルド仕様名をapp1、 ソースファイルでスタートアップVIにhost.viを加え、 シェア変数のデプロイから「アプリケーションの実行時にシェア変数ライブラリをデプロイ」にチェックマークを入れて、ライブラリパスからvar.lvlibを選択します。その後、ビルドします。ビルド後、エクスプローラにてapp1のフォルダを開きます。
16.プロジェクトエクスプローラにてcRIO側のビルド仕様を右クリックし、新規>>リアルタイムアプリケーションを選択します。リアルタイムアプリケーションプロパティにて ビルド仕様名をrtexe1とし、ソースファイルでrt.viをスタートアップVI、 var.lvlibを常に含むに加えます。この状態でビルドをし、完了を選択します。
17.プロジェクトエクスプローラにてrtexe1を右クリックし、「スタートアップとして実行」を選択します。
cRIOの再起動に2,3分ほど時間がかかります。 
18.cRIOの再起動が終了するとrtexe1が自動的に動作します。ホストPC側でapp1のフォルダよりApplication.exeを実行します。

上記の方法で開発環境と実行環境が同じ場合はexe間でシェア変数によるデータのやり取りが可能です。exeファイルを開発環境から実行環境のPCに移動して同じ事を行うには プログラム的にシェア変数をデプロイする必要があります。その部分につきましては下記の変更が必要です。



別のPCに実行形式ファイルを配布し、使用する場合の変更点

19.host.viを下記の図のように変更します。 ここで使用しているインボークノードは、ブロックダイアグラムで右クリックしてプログラミングパレットを開き、 プログラミング→アプリケーション制御に移動してインボークノードをブロックダイアグラムに配置します。操作ツールを使用して、メソッドをクリックし、ライブラリ→ライブラリをデプロイ(単一)を選択します。 
 
VarDep.png


開発環境と実行環境が違う場合、ライブラリのパスの指定方法に注意が必要です。これはホストPC上のexeがvar.lvlibを参照する際に必要なパスなのでどのPCでも参照可能な設定が必要となります。 ここで使用する手順の詳細はこちらの記事で確認できます。

また、TargetIPAddressに関してもcRIOに割り当てられるIPが常に同じである必要があります。 これはNI MAXでcRIOを開き、ネットワーク設定のタブを開き、 IPv4アドレスをスタティックに変更することで可能です。 これらの設定後、viを保存し、新たにアプリケーションとしてビルドします。 

20.プロジェクトエクスプローラにてマイコンピュータ側のビルド仕様を右クリックし、新規>>アプリケーションを選択します。マイアプリケーションプロパティにて、ビルド仕様名をapp2、 ソースファイルでスタートアップVIにhost.viを加え、 その後、ビルドします。ビルド後、エクスプローラにてapp2のフォルダを開きます。
RT exeが動作している状態でapp2のアプリケーションを実行するとプログラム的にlvlibがデプロイされます。 この状態のexeを別の実行環境で実行すると動作を確認できます。