I/O変数を使用する (Real-Time、Windows )
- 更新日2025-08-27
- 20分で読める
I/O変数は、I/Oデータを転送するシェア変数の一種です。I/O変数は、ローカルアクセスすると、シングルポイントI/OデータへのアクセスにNIスキャンエンジンを使用します。リモートアクセスすると、シングルポイントまたはバッファ型I/OデータへのアクセスにNI Publish-Subscribe-Protocol (NI-PSP )を使用します。I/O変数は、物理I/Oチャンネルと直接データの受け渡しをしたり、同じターゲットで実行するFPGA VIとReal-Time (RT )VIの間でカスタムI/Oデータを転送することができます。
以下の表は、I/O変数の使用方法の概要を示します。
| 用途 | I/O変数タイプ |
|---|---|
| I/OハードウェアとLabVIEW VI間で、LabVIEW FPGAモジュールを使用せずにスケール済みのI/Oデータを転送 | スケール済みI/Oデータを扱うI/O変数 |
| 同じハードウェアデバイスで実行するLabVIEW FPGA VIとLabVIEW Real-Time VI間で、FPGAでカスタム処理したI/Oデータを転送 | カスタムFPGA I/Oデータを扱うI/O変数 |
スケール済みI/Oデータを扱うI/O変数
スケール済みI/Oデータを扱うI/O変数を使用するには、サポートされるI/OデバイスをNIスキャンエンジンがインストールされたターゲットに接続し、LabVIEWプロジェクトでターゲットにI/Oデバイスを追加します。
プロジェクトエクスプローラウィンドウで、サポートされるI/Oデバイスをサポートされるターゲットに追加すると、各I/OチャンネルのI/O変数が自動的に追加されます。すでにLabVIEWプロジェクトに存在するターゲットにI/Oデバイスを物理的に追加した場合は、その新しいI/Oデバイスをプロジェクトに追加し、対応するI/O変数をデプロイする必要があります。
LabVIEWプロジェクトに存在するターゲットからI/Oデバイスを物理的に削除した場合、プロジェクトからそのI/Oデバイスを削除し、そのI/Oデバイスを含むターゲットを再度デプロイする必要があります。ターゲットを再度デプロイすることで、ターゲットの構成がプロジェクトの構成を反映します。プロジェクト&システム比較ダイアログボックスを使用して、プロジェクトとターゲットの構成を確認します。
カスタムFPGA I/Oデータを扱うI/O変数 (FPGAモジュールまたはReal-Timeモジュール )
プロジェクトにNIスキャンエンジンをサポートするFPGAターゲットが含まれている場合は、ユーザ定義I/O変数を作成して同じハードウェアデバイスで実行されているFPGA VIとRT VIの間でカスタムI/Oデータを転送することができます。
ユーザ定義I/O変数は、それらのユーザ定義I/O変数をホストするシャーシで実行するFPGA VIおよびRT VIのブロックダイアグラムに追加できます。すべてのI/O変数は単方向であるため、各ユーザ定義I/O変数の方向をFPGAからホストまたはホストからFPGAのどちらかに指定する必要があります。たとえば、アナログI/Oデータを集録してFPGA VIでFFTを実行するには、FPGAからホストで構成したI/O変数を使用して処理済みデータをRT VIの制御ループに送信し、さらにホストからFPGAで構成したI/O変数を使用して出力データをRT制御ループからFPGAの物理I/Oチャンネルに返します。
ユーザ定義I/O変数を作成するには、LabVIEW FPGAモジュールをインストールする必要があります。しかし、Real-Timeモジュールしかない場合は、LabVIEW FPGAモジュールをインストールしていなくても、RT VIからユーザ定義I/O変数にアクセスできます。たとえば、LabVIEW FPGAモジュールの開発者は、ユーザ定義I/O変数を作成して、その変数にアクセスするFPGAビットファイルをコンパイルすることができます。そして、開発者はビットファイルとユーザ定義I/O変数が含まれるLabVIEWプロジェクトをFPGAモジュールを持たない別の開発者に配布して、その開発はそのプロジェクトを使用してCompactRIOシャーシでビットファイルを実行することができます。この場合、2番目の開発者は新しいユーザ定義I/O変数を作成できませんが、Real-Timeモジュールを使用して最初の開発者が作成したユーザ定義I/O変数にアクセスできます。
(Windows) ユーザ定義I/O変数のネットワーク共有を有効にすると、この変数を同じLabVIEWプロジェクト内のRT VIまたはWindowsベースのVIで使用できます。たとえば、ネットワーク共有I/O変数を使用して、Windowsで実行できるユーザインタフェースを作成できます。
I/O変数を構成する
I/O変数は、編集時や実行時に対話式に、または実行時にプログラム的に構成できます。また、これらの方法を組み合わせて構成することもできます。以下の表には、各方法の利点と欠点の概要が記載されています。
| 方法 | 使用例 | 利点 | 欠点 |
|---|---|---|---|
| 対話式 | プロジェクトエクスプローラウィンドウにアクセスできる時にI/O変数の設定を構成する場合。 | プログラミングに時間がかからない。 |
|
| プログラム的 |
|
|
プログラミングに時間がかかる。 |
I/O変数を対話式に構成する
1つのI/O変数の構成にはシェア変数プロパティダイアログボックス、複数のI/O変数を同時に構成する場合には複数変数エディタウィンドウを使用します。
I/O変数を使用するVIの実行中にもI/O変数の説明、ネットワーク、およびスケールオプションを更新できます。ただし、I/O変数の名前とデータタイプは実行時に変更できません。
I/O変数をプログラム的に構成する
変数プロパティを使用してI/O変数をプログラム的に構成するには、次の手順を実行します。
- ブロックダイアグラムに変数プロパティノードを追加します。
- リファレンス入力を右クリックして、ショートカットメニューから作成→定数を選択します。
- シェア変数refnum定数の右側の矢印ボタンをクリックし、参照を選択します。
- 変数オブジェクトを参照ダイアログボックスを使用して、構成するI/O変数を選択します。
- シェア変数refnum定数を右クリックし、使用するプロパティのクラスを変数クラスを選択ショートカットメニューから選択します。
- 変数プロパティノードの白い部分をクリックし、使用するプロパティを選択します。
- (オプション )位置決めツールを使用して変数プロパティノードをサイズ変更すると、一度に複数のプロパティを表示できます。
次の図は、リモートターゲット上のI/O変数をプログラム的に構成する例を示します。
この例では、CompactRIOモジュールのチャンネルに対応するI/O変数を構成することにより、そのチャンネルの電流制限を指定しています。
- labview\LabVIEW.iniファイルをテキストファイルとして開きます。
- 新規行に、RemoteIOVConfigurationTimeout=の後に新しいタイムアウト時間 (秒単位 )を入力します。たとえば、タイムアウト時間を10秒に延ばしたい場合は、RemoteIOVConfigurationTimeout=10と入力します。
- ファイルを保存して閉じます。
I/O変数をデプロイする
I/O変数をデプロイするには、プロジェクトエクスプローラウィンドウでI/O変数を含むプロジェクト項目を右クリックし、ショートカットメニューからデプロイを選択します。
I/O変数ノードを使用するVIを実行すると、I/O変数コンテナが自動的にそれらのI/O変数が所属する場所にデプロイされます。この操作では、コンテナ内のI/O変数がすべてデプロイされます。
I/O変数値をスケールする
I/O変数またはI/Oエイリアスの線形スケールは、シェア変数プロパティダイアログボックスのスケールページで有効にすることができます。しかし、I/O変数は非線形スケールをサポートしません。
I/Oエイリアスを作成する
I/O変数のエイリアスを作成し、状況により異なる方法でI/Oデータの名前を作成したり、変数のスケールを行うことができます。たとえば、熱電対入力に接続されたI/O変数の場合、摂氏エイリアスと華氏エイリアスを作成できます。さらに、それぞれのエイリアスをスケールして両方の単位で温度を表示できます。
I/Oエイリアスの値は、親の値に双方向的にリンク付けされ、親の値を更新するとI/Oエイリアスの値が更新されます。同様に、I/Oエイリアスの値を更新すると親の値が更新されます。また、I/Oエイリアスのチェーンのどのリンク (エイリアス )を更新しても、他のすべてのリンクが更新されます。
1つのI/Oエイリアスを作成する
I/Oエイリアスを作成するには、プロジェクトエクスプローラウィンドウでI/O変数を含むターゲットを右クリックして、ショートカットメニューから新規→変数を選択してシェア変数プロパティダイアログボックスを開きます。I/Oエイリアスの名前を入力して、変数タイププルダウンメニューからI/Oエイリアスを選択します。参照ボタンをクリックして、新しいI/Oエイリアスに関連付ける既存のI/O変数またはI/Oエイリアスを選択します。
I/Oエイリアスの名前、説明、ネットワーク共有の設定、スケールは、プロジェクトエクスプローラウィンドウで変更できます。また、複数変数エディタウィンドウを使用して、複数のI/Oエイリアスを同時に編集することもできます。
複数のI/Oエイリアスを同時に作成する
まとめて変数を作成ダイアログボックスを使用して、複数のI/Oエイリアスを同時に作成できます。I/Oエイリアスを一括作成するには、以下の手順に従ってください。
- 一括作成の処理を行うためのテンプレートとなるI/Oエイリアスを1つ作成します。
- I/Oエイリアスを含む変数ライブラリを右クリックして、ショートカットメニューから変数を作成を選択してまとめて変数を作成ダイアログボックスを開きます。
- プロパティをコピーを選択して、参照ボタンをクリックし、テンプレートとして使用するI/Oエイリアスを選択します。
- 作成するI/Oエイリアスの数を作成する数フィールドに入力し、OKボタンをクリックして新しいI/Oエイリアスを作成します。
これらの手順の実行後に、新しい変数を編集するための複数変数エディタウィンドウが自動的に開きます。たとえば、各I/Oエイリアスのエイリアスパスを編集して固有のI/O変数にバインドすることができます。
I/O変数値を強制する
I/O変数値は、対話的またはプログラム的に強制することができます。I/O変数を強制すると、関連するI/Oデータは、強制が解除されるまで、またはターゲットが再起動されるまで、または変数が別の値に強制されるまで、指定された値を取ります。I/O変数の強制を解除すると、I/O値はNIスキャンエンジンに制御されるようになります。
I/O変数値を対話的に強制する
I/O変数の値は、デバッグ中またはI/Oチャンネルの手動制御中にNI分散システムマネージャを使用して強制または強制解除することができます。NI分散システムマネージャを起動するには、LabVIEWでツール→分散システムマネージャを選択します。分散システムマネージャは、プロジェクトエクスプローラウィンドウでRTターゲットを右クリックしてユーティリティ→システムマネージャで表示を選択して起動することもできます。
I/O変数値をプログラム的に強制する
強制VIを使用して、プログラム的にI/O変数を強制または強制解除します。
I/Oエイリアスを強制する
強制は、標準I/O変数だけでなくエイリアスにも適用されます。I/O変数を強制すると、すべての関連するエイリアスも強制されます。エイリアスを強制すると、親I/O変数と関連するすべてのエイリアスも強制されます。
ターゲットですべてのI/O変数を同時に強制/強制解除する
ターゲットのグローバル強制状態を使用して、ターゲットですべてのI/O変数を同時に強制および強制解除できます。ターゲットでグローバル強制を対話的またはプログラム的に有効および無効にできます。
NI分散システムマネージャの強制を有効化および強制を無効化ボタンを使用して、ターゲットで対話的にグローバル強制を有効および無効にします。「変数の強制を有効化」または「変数の強制を無効化」VIを使用して、ターゲットでプログラム的にグローバル強制を有効および無効にします。
以下の手順に従って、ターゲットのすべてのI/O変数を同時に強制します。
- ターゲットの強制を無効にして、I/O変数を強制することなく、I/O変数の希望する強制値を個々に設定できるようにします。
- ターゲットのすべてのI/O変数の強制値を設定します。
- ターゲットの強制を有効にして、ターゲット上のすべてのI/O変数を同時に強制します。
I/O変数にリモートからアクセスする
I/O変数のネットワーク共有が有効にされている場合、I/O変数をホストするターゲットと同じネットワークに接続されているリモートコンピュータからI/O変数にアクセスできます。NI分散システムマネージャのI/O変数プローブビューを使用して、リモートのI/O変数に対話的にアクセスできます。VI内でリモートのI/O変数にプログラム的にアクセスすることもできます。
シェア変数プロパティダイアログボックスを使用して、I/O変数のネットワークでの共有を有効または無効にできます。ホストコンピュータのI/O値を監視したり、リモートターゲットからI/O値にアクセスするには、ネットワーク共有を有効にします。ターゲットのすべてのI/O変数のグローバルネットワーク共有レートは、スキャンエンジンページで設定します。
I/O変数にローカルでアクセスする
I/O変数は、スキャンエンジンのグローバルメモリマップに追加され、すべてのI/O変数の値は同時に更新されます。ただし、I/O変数をホストするローカルターゲットのI/O変数にアクセスする場合、各ノードでスキャンアクセスまたはダイレクトアクセスを使用するように設定できます。
以下の手順に従って、I/O変数ノードのローカルアクセスモードを選択します。
- ブロックダイアグラムでI/O変数ノードを右クリックします。
- ショートカットメニューからローカルアクセスモードを選択します。
- ノードで使用したいアクセスモードを選択します。
ローカルアクセスモードを選択する
一般に、スキャンアクセスはアップデートレートがほぼ等しいチャンネルのグループに適し、ダイレクトアクセスはスキャン周期に非同期でアップデートする個々のI/Oチャンネルに適しています。以下の表は、各I/Oアクセス方法の用途を示しています。
| 一般的用途 | アクセス方法 |
|---|---|
| 共通のアップデートレートを共有するI/Oチャンネルへのシングルポイントアクセス | スキャン |
| 緊急停止出力への単一の書き込みなど、NIスキャンエンジンの周期と非同期なローカルI/Oチャンネルへのシングルポイントアクセス (ユーザ定義I/O変数ではサポートされていません ) | ダイレクト |
スキャンアクセス
デフォルトでは、I/O変数ノードではスキャンアクセスが使用されます。スキャンアクセスは、単一レートで更新されるI/Oチャンネルのセットや、拡張I/Oチャンネルに使用します。スキャンアクセスでは、以下の図で示すように、スキャンエンジンメモリマップによって非ブロックI/O読み取り/書き込みが実行されます。
スキャンアクセスでは、I/O変数から値を読み取るたびに、NIスキャンエンジンはブロックまたは新規値を待機せずにメモリマップの最新値を即座に返します。各スキャン処理では、LabVIEWは最新のI/O値を読み取り、その値をNIスキャンエンジンのメモリマップに書き込みます。
スキャンアクセスでは、I/O変数に値を書き込むたびに、スキャンエンジンメモリマップに格納されていた以前の値が上書きされます。各スキャン処理では、メモリマップの値を物理I/Oチャンネルにプッシュします。すべてのI/O変数の書き込み操作は、データの損失を回避するためにスキャン周期に同期する必要があります。
ダイレクトアクセス
ダイレクトアクセスは、スキャン周期と非同期のシングルポイントローカルI/Oチャンネルの読み取りまたは書き込みに使用します。アプリケーションが可能な限り速く値を書き込む必要がある場合にダイレクトアクセスを使用します。ダイレクトアクセスは、以下の図で示すとおり、スキャンエンジンメモリマップをバイパスしてI/Oデバイスドライバと直接通信し、ブロックなしのI/O読み取り/書き込みを行います。
I/O変数ノードアイコンの意味
ブロックダイアグラムの各I/O変数ノードには、以下のアクセス方法を示すグリフが表示されます。
| アクセス方法 | ノードの外観 |
|---|---|
| NI-PSP |
|
| スキャン |
|
| ダイレクト |
|