VIリファレンスを開く関数
- 更新日2025-03-14
- 16分で読める
ディスク上のファイルへのパス、名前文字列、または既存の参照で指定されたVI、カスタム制御器、またはグローバル変数への参照を返します。

入力/出力
![]() タイプ識別子VI refnum (タイプのみ) は、VIリファレンスのコネクタペーン情報とデータタイプを指定します。この入力の実際の値は無視されます。 デフォルトでは、この関数は一般VIリファレンスを返します。 リファレンス呼び出しノードまたは非同期呼び出しを開始ノードに対してこの関数のVIリファレンス出力を使用するには、この入力にタイプ指定VIリファレンスを配線する必要があります。 この入力にタイプ指定VIリファレンスを配線する場合、VIパスで指定されたVIのコネクタペーンがこの入力のコネクタペーンと一致していなければなりません。 ![]() アプリケーションリファレンスは、LabVIEWアプリケーションインスタンスへのリファレンスです。 デフォルトでは、発呼者VIのアプリケーションインスタンスが使用されます。他のアプリケーションインスタンスへのリファレンスは、「アプリケーションリファレンスを開く」関数で取得できます。アプリケーションリファレンス入力に他のアプリケーションインスタンスへのリファレンスを配線すると、VIパスは、そのアプリケーションインスタンスが実行されているコンピュータのファイルシステム上の場所を参照します。![]() vi pathには 、参照したいVIへの パス 、参照したいVIの名前を含む文字列、または参照したいVIへのVIリファレンスを指定します。 パスを配線する場合、LabVIEWは同じターゲットのパスから前回ロードしたVIをメモリ内で検索します。名前文字列を配線する場合、その文字列はターゲットのメモリにあるVIのパスデリミタ付きの名前に完全に一致している必要があります。一致するVIがメモリ内で検索できない場合は、ディスク上のそのファイルからVIをロードしようとします。LabVIEWがファイルを検出できない場合は、エラーが発生します。 パスが相対パスの場合、VIはそのパスを発呼者VIに対する相対パスとして解釈します。発呼者VIが保存されていない場合は、アプリケーションディレクトリに対する相対パスと解釈されます。 メモ
アプリケーションリファレンスでリモートのアプリケーションインスタンスを指定すると、パスはリモートマシン上でリモートファイルシステムのコンテキストに応じて解釈されます。そのパスはローカルコンピュータのパスセパレータを使用して表されますが、要求時にリモートコンピュータのパスセパレータ (デリミタ) に変換されます。 例えば、WindowsベースのアプリケーションからLinux上の My HD/LabVIEW Vis/foo.viの VIを参照するには、 My HD: \LabVIEW Visfoo.viのパスを使用します。逆に、Linuxアプリケーションから C: \labviewfoo.vi にあるWindowsを実行しているコンピュータ上のVIを参照するには、パス C/labview/foo.viを配線する。 パスを配線した場合、またはVIとアプリケーション参照の両方を配線した場合、LabVIEWはディスクからVIをロードするためにユーザーインターフェイスがアイドルになるまで待ちます。アプリケーション参照なしで名前文字列またはVI参照を配線した場合、LabVIEWはディスクからVIをロードしないため、ユーザーインターフェイスがアイドル状態になるまで待つ必要はありません。LabVIEWは、メモリ内で指定された名前のVIのみ検索します。 メモ LabVIEWは、Open VI Reference関数で名前を使用してクローンVIへの参照を開く機能をサポートしていません。この関数を使用してクローンVIへのリファレンスを開こうとすると、LabVIEWがクラッシュする可能性があります。
![]() オプションは、VIリファレンスに参照されるVIの特性 (VIを非同期呼び出しできるかどうかなど) を決定します。デフォルト値は0x0です。 以下のオプションフラグのサブセットを組み合わせてオプションを作成します。
![]() エラー入力は、このノードを実行する前に発生したエラーの状態を示します。この入力は、標準エラー入力として機能します。 ![]() パスワードは、リファレンスを開くVIのパスワードです。 パスワード保護されたターゲットVIを編集するには、この入力にパスワードを配線します。正しいパスワードを配線すると、この関数はVIへの認証済みリファレンスを返します。この入力に誤ったパスワードを入力すると、関数はエラーおよび無効なVIリファレンスを返します。ターゲットVIがパスワード保護されていない場合、この入力は無視されます。ターゲットVIがパスワード保護されている場合にこの入力にパスワードを配線しないと、「VIリファレンスを開く」関数からは有効なリファレンスが返されますが、このリファレンスを使用してVIを編集できません。メモ VIサーバー参照を 使用して、VIへの認証参照を取得することもできます。
![]() VIリファレンスは要求されたVIに関連づけられたrefnumです。 関数の実行が失敗した場合、VI Refnumに非Refnumが含まれます。![]() エラー出力には、エラー情報が含まれます。この出力は、標準エラー出力として機能します。 |
「VIリファレンスを開く」関数は、リファレンス呼び出しノード、非同期呼び出しを開始ノード、非同期呼び出しを待機ノードによるダイナミック呼び出しに対応できるようVIリファレンスを設定します。ダイナミック実行が可能になるようリファレンスを設定するには、タイプ識別子VI refnum (タイプのみ) 入力とオプション入力を使用します。
ダイナミックVI呼び出しのためにリファレンスを開く
リファレンス呼び出しノードまたは非同期呼び出しを開始ノードで特定のVIを動的に呼び出すには、以下のパラメータに適切なデータを使用する必要があります。
- タイプ識別子VI refnum (タイプのみ) ―この入力にはタイプ指定VIリファレンスを配線します。
- オプション―リファレンスVIの呼び出しにオプションフラグ0x08、0x40、0x80、0x100のうちどれを適用するか決定します。
タイプ指定リファレンスを開く条件
タイプ識別子VI refnum (タイプのみ) にタイプ指定のVIリファレンスを配線するには、VIパスで指定されたVIは以下の条件を満たしている必要があります。
- 壊れていないこと。
- 再入可能である場合を除き、トップレベルVIとしてアクティブではないこと。
- VIのコネクタペーンがタイプ識別子VI refnum (タイプのみ) のコネクタペーンと一致していること。
再入可能VIへのリファレンスを開く
再入可能VIのリファレンスを開く際は、以下の点に注意してください。- 再入可能ターゲットVIへのダイナミックな呼び出しは、オプションの1つとして0x40を指定しない限り、順番に実行されます。
- オプションフラグ0x40を指定して再入可能ターゲットVIのインスタンスを並列実行すると、VIリファレンスはターゲットVIのクローンではなくターゲットVIを参照します。ただし、リファレンス呼び出しノードと非同期呼び出しを開始ノードはどちらもターゲットVIのクローンを呼び出します。したがって、VIリファレンスでVIサーバプロパティまたはメソッドを呼び出すと、そのプロパティ/メソッドはそれらのノードが実際に呼び出すクローンVIには影響しません。
- 「等しい?」関数は、1つの再入可能VIに対する2つのリファレンスを比較すると、常にTRUEを返します。複数のリファレンスが再入可能VIの同じインスタンスを参照しているかどうかを確認するには、「型変換」関数を使用してリファレンスを32ビット符号付き整数に変換します。次に、「等しい?」関数を使用してそれらの整数を比較します。
開いているリファレンスを中断する
開いているすべてのVIリファレンスは、VIのフロントパネルから、またはVIを中断メソッドを使用して手動で中断できます。しかし、非同期実行用に準備されたVIリファレンスには、それを開くときに使用したオプションに応じて重要な注意点があります。
- 0x80―呼び出して放置VIは、VIのフロントパネルから手動で中断するか、そのVIを中断メソッドを呼び出した場合にのみ中断されます。それ以外の場合は、たとえリファレンスを閉じたり、呼び出しVIを中断しても、VIは最後まで実行されます。
- 0x100-Call-and-collect VI は、以下の理由でアボートする:
- 呼び出して収集VIリファレンスを開いたVIを中断する。この場合、LabVIEWはVIの実行中のすべてのインスタンスを中断します。
- VIの特定のインスタンスを手動で中断する。この場合、ただ1つの非同期呼び出しを待機ノードが、呼び出されたVIが中断したというエラーを返します。同じVIリファレンスの呼び出しを待機している他のすべての非同期呼び出しを待機ノードは、そのまま待機し続けます。
- 呼び出して収集VIリファレンスのVIを中断メソッドを呼び出す。この場合、LabVIEWはVIの現在実行中のすべてのインスタンスを中断します。非同期呼び出しを待機ノードの数と同数のエラーが返されます。
開いているリファレンスを閉じる
この関数で取得したリファレンスは、使用終了後に「リファレンスを閉じる」関数で閉じます。リファレンスを明示的に閉じると、そのリファレンスの維持に必要なリソースが解放されるため、メモリの割り当てとパフォーマンスが最適化されます。明示的に閉じないリファレンスは、そのリファレンスを開いたVIの実行が完了するまで開いたままになります。
スタンドアロンアプリケーションでVIリファレンスを開く
開発コンピュータとスタンドアロンアプリケーション内の両方でVIをダイナミックに開くには、VIパスで相対パスを指定します。
その他の情報
- 開かれたら実行プロパティ、実行:ロードされたらフロントパネルを表示、実行:呼び出されたらフロントパネルを表示プロパティのいずれかを設定した場合、またはターゲットVIのVIプロパティダイアログボックスで同等のオプションを設定した場合、設定は無視されます。
- 新しい Facade VI 参照を開くには、FacadeVIクラスを 型指定子VI Refnum(型のみ)に配線します。
サンプルプログラム
LabVIEWに含まれている以下のサンプルファイルを参照してください。
- labview\examples\Application Control\VI Server\Asynchronous Call By Reference\Asynchronous Call and Collect (Using Option 0x40).vi
- labview\examples\Application Control\VI Server\Asynchronous Call By Reference\Asynchronous Call and Forget.vi
- labview\examples\Application Control\VI Server\Asynchronous Call By Reference\Asynchronous Call and Collect.vi