VIリファレンスを開く 関数



LabVIEW 2018ヘルプ


発行年月: 2018年3月
製品番号: 371361R-0112
製品情報を参照

ダウンロード (Windowsのみ)


LabVIEW 2015ヘルプ
LabVIEW 2016ヘルプ
LabVIEW 2017ヘルプ
LabVIEW 2018ヘルプ
LabVIEW 2019ヘルプ

1つ上のパレット: アプリケーション制御VIおよび関数

インストールパッケージ: ベース開発システム

名前文字列またはディスク上のVIの位置へのパスによって指定されたVIへのリファレンス、カスタム制御器、またはグローバル変数を返します。

詳細  サンプル

タイプ識別子VI refnum(タイプのみ)は、VIリファレンスのコネクタペーン情報とデータタイプを指定します。 この入力の実際の値は無視されます。 デフォルトでは、この関数は一般VIリファレンスを返します。

リファレンス呼び出しノードまたは非同期呼び出しを開始ノードに対してこの関数のVIリファレンス出力を使用するには、この入力にタイプ指定VIリファレンスを配線する必要があります。

この入力にタイプ指定VIリファレンスを配線する場合、VIパスで指定されたVIのコネクタペーンがこの入力のコネクタペーンと一致していなければなりません。
アプリケーションリファレンスは、LabVIEWアプリケーションインスタンスへのリファレンスです。 デフォルトでは、発呼者VIのアプリケーションインスタンスが使用されます。 他のアプリケーションインスタンスへのリファレンスは、「アプリケーションリファレンスを開く」関数で取得できます。 アプリケーションリファレンス入力に他のアプリケーションインスタンスへのリファレンスを配線すると、VIパスは、そのアプリケーションインスタンスが実行されているコンピュータのファイルシステム上の場所を参照します。
VIパスは、参照するVIの名前を含む文字列、または参照するVIへのパスを受け入れます。 名前文字列を配線する場合、その文字列はターゲットのメモリにあるVIのパスデリミタ付きの名前に完全に一致している必要があります。 パスを配線する場合、LabVIEWは同じターゲットのパスから前回ロードしたVIをメモリ内で検索します。 一致するVIがメモリ内で検索できない場合は、ディスク上のそのファイルからVIをロードしようとします。 ファイルが見つからないか、ファイルがメモリ内の別のVIと競合する場合は、エラーが発生します。

パスが相対パスの場合、VIはそのパスを発呼者VIに対する相対パスとして解釈します。発呼者VIが保存されていない場合は、アプリケーションディレクトリに対する相対パスと解釈されます。
メモ  アプリケーションリファレンスでリモートのアプリケーションインスタンスを指定すると、パスはリモートマシン上でリモートファイルシステムのコンテキストに応じて解釈されます。 そのパスはローカルコンピュータのパスセパレータを使用して表されますが、要求時にリモートコンピュータのパスセパレータ(デリミタ)に変換されます。

たとえば、WindowsベースのアプリケーションからmacOS上のVI、My HD/LabVIEW Vis/foo.viを参照するには、My HD:\LabVIEW Vis\foo.viというパスを使用します。 逆に、macOSアプリケーションからWindowsコンピュータ上のVI、C:\labview\foo.viを参照するには、C/labview/foo.viというパスを配線します。
パスを配線すると、LabVIEWはユーザインタフェースがアイドル状態になるまで待機してからディスクからVIをロードします。 名前文字列を配線した場合、LabVIEWはディスクからVIをロードしないため、ユーザインタフェースがアイドル状態になるまで待機しません。 LabVIEWは、メモリ内で指定された名前のVIのみ検索します。
メモ  「VIリファレンスを開く」関数ではクローンVIへのリファレンスを開く能力はサポートされていません。 この関数を使用してクローンVIへのリファレンスを開こうとすると、LabVIEWがクラッシュする可能性があります。
オプションは、VIリファレンスに参照されるVIの特性 (VIを非同期呼び出しできるかどうかなど) を決定します。 デフォルト値は0x0です。 以下のオプションフラグのサブセットを組み合わせオプションを作成します。
オプションフラグ説明
0x01修正を記録―VIサーバによる変更が行われたことを示すアスタリスク (*) をVIタイトルの横に表示するには、このオプションフラグを使用します。 修正を記録するためには、VIが編集モードである必要があります。
0x02編集のためにテンプレートを開く.vitファイルの原本を開くにはこのオプションフラグを使用します。 このオプションフラグを選択しない場合、LabVIEWはテンプレートVIの新規インスタンスを開きます。 インスタンスに行われた編集は元の.vitファイルに適用されません。 このオプションフラグはテンプレート以外のファイルには影響しません。
0x04保存を促すメッセージを表示―以下のすべての条件が満たされる場合にこのVIリファレンスを閉じるときに変更の保存を促す画面を表示するには、このオプションフラグを使用します。
  • リファレンスVIまたはそのサブVIに未保存の変更が含まれている。
  • リファレンスVIに対する他のリファレンスが開いていない。
  • リファレンスVIをメモリから解放できる。 たとえば、他にVIを呼び出すVIがない、VIのフロントパネルが閉じている、VIが開いているプロジェクトライブラリのメンバーでないなどの場合、VIはメモリから解放できます。
0x08再入可能実行を準備―このオプションフラグは、VIを実行メソッドを使用して再入可能ターゲットVIの複数のインスタンスを並列実行する際に使用します。 このオプションフラグを設定すると、ターゲットVIのクローンを実行するための専用並列データスペースが割り当てられます。 このオプションフラグを設定しないと、「VIリファレンスを開く」関数は常に最初のターゲットVIの1つのデータスペースへのリファレンスを返すため、複数のVI呼び出しが同時に実行されることはありません。 このとき、ターゲットVIが再入可能でなければ、エラー1096が返されます。 このオプションフラグの使用サンプルは、runvi LLBで参照できます。
ヒント  ターゲットVIを非同期実行するには、VIを実行メソッドの代わりに「非同期呼び出しを開始」ノードを使用します。 非同期呼び出しを開始ノードを使用すると、インタフェースが簡潔になりパフォーマンスが向上するだけでなく、対応する非同期呼び出しを待機ノードによってターゲットVIの出力を取得できるようになります。 runvi LLBサンプルの別の実装サンプルは、TCPDateServerUsingStartAsynchronousCall LLBで参照できます。
0x10見つからないサブVIの検索を促す画面を表示―このオプションフラグは、参照しているVIに見つからないサブVIがある場合に、それを検索するかどうかをユーザに確認するように設定するために使用します。
0x20ロードダイアログボックスを非表示―参照しているVI中の見つからないサブVIを検索中、ロードダイアログボックスが表示されないよう設定します。
メモ  このオプションフラグの設定は、見つからないVIの検索を確認するプロンプトの表示/非表示の設定には影響しません。
0x40再入可能VIの同時呼び出しを有効にする―このオプションフラグは、複数のリファレンス呼び出しノードと非同期呼び出しを開始ノードを使用して、再入可能ターゲットVIのクローンを並列実行する際に使用します。これらのノードは、Forループ内で並列ループ反復を有効にして使用します。 このオプションフラグは、各リファレンス呼び出しノードをクローンVIのデータスペースにアクセスできるようにすることで、並列実行を可能にします。 このオプションフラグを使用しないと、同一ターゲットVIへの各呼び出しは、データスペースに他の呼び出しがアクセスしている間は待機する必要があるため、1度に1つずつ実行されます。 このオプションフラグの使用サンプルは、AsynchronousCallAndCollectUsingOption0x40 VIで参照できます。

0x40オプションフラグは、以下の場合にのみ有効です。
  • ターゲットVIが再入可能でクローンを共有する場合。
  • ターゲットVIが再入可能で、さらに0x80または0x100オプションフラグを使用している場合。
メモ  0x40オプションフラグがターゲットVIまたは使用されているほかのオプションフラグに対して有効でない場合は、エラー1591が返されます。
0x80呼び出して放置―このオプションフラグは、非同期呼び出しを開始ノードによってターゲットVIを非同期で呼び出す必要がある一方で、VIから返されるデータとタイミングを使用する必要がない場合に使用します。 このオプションフラグは0x08または0x100と併用できません。 このオプションの使用サンプルは、AsynchronousCallAndForget VIで参照できます。
メモ  リモートVIへのリファレンスにこのオプションフラグを使用すると、LabVIEWはエラー1578を返します。
0x100呼び出して収集を準備―このオプションフラグは、非同期呼び出しを待機ノードによるターゲットVIに対する非同期呼び出しの結果を使用する場合に使用します。 このオプションフラグを使用する場合は、非同期呼び出しを開始ノードで開始する各呼び出しに非同期呼び出しを待機ノードを含めることで、開始された呼び出しが永久にメモリで維持されないようにする必要があります。 このオプションフラグは0x08または0x80と併用できません。 このオプションの使用サンプルは、AsynchronousCallAndCollect VIで参照できます。
メモ  リモートVIへのリファレンスにこのオプションフラグを使用すると、LabVIEWはエラー1578を返します。
エラー入力は、このノードを実行する前に発生したエラーの状態を示します。 この入力は、標準エラー入力として機能します。
パスワードは、リファレンスを開くVIのパスワードです。 パスワード保護されたターゲットVIを編集するには、この入力にパスワードを配線します。 正しいパスワードを配線すると、この関数はVIへの認証済みリファレンスを返します。 この入力に誤ったパスワードを入力すると、関数はエラーおよび無効なVIリファレンスを返します。 ターゲットVIがパスワード保護されていない場合、この入力は無視されます。 ターゲットVIがパスワード保護されている場合にこの入力にパスワードを配線しないと、「VIリファレンスを開く」関数からは有効なリファレンスが返されますが、このリファレンスを使用してVIを編集できません。
メモ  VIへの認証済みリファレンスは、「VIサーバリファレンス」を使用して取得することもできます。
VIリファレンスは要求されたVIに関連づけられたrefnumです。 関数の実行が失敗した場合、VI Refnum非Refnumが含まれます。
エラー出力には、エラー情報が含まれます。 この出力は、標準エラー出力として機能します。

VIリファレンスを開くの詳細

「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―呼び出して収集VIは、以下の理由で中断されます。
    • 呼び出して収集VIリファレンスを開いたVIを中断する。 この場合、LabVIEWはVIの実行中のすべてのインスタンスを中断します。
    • VIの特定のインスタンスを手動で中断する。 この場合、ただ1つの非同期呼び出しを待機ノードが、呼び出されたVIが中断したというエラーを返します。 同じVIリファレンスの呼び出しを待機している他のすべての非同期呼び出しを待機ノードは、そのまま待機し続けます。
    • 呼び出して収集VIリファレンスのVIを中断メソッドを呼び出す。 この場合、LabVIEWはVIの現在実行中のすべてのインスタンスを中断します。 非同期呼び出しを待機ノードの数と同数のエラーが返されます。

開いているリファレンスを閉じる

この関数で取得したリファレンスは、使用終了後に「リファレンスを閉じる」関数で閉じます。 リファレンスを明示的に閉じると、そのリファレンスの維持に必要なリソースが解放されるため、メモリの割り当てとパフォーマンスが最適化されます。 明示的に閉じないリファレンスは、そのリファレンスを開いたVIの実行が完了するまで開いたままになります。

メモ  オプションフラグ0x80で開いたリファレンスを閉じても、リファレンスVIは中断されません。

スタンドアロンアプリケーションでVIリファレンスを開く

開発コンピュータとスタンドアロンアプリケーション内の両方でVIをダイナミックに開くには、VIパスで相対パスを指定します。

その他の情報

サンプル

VIリファレンスを開く関数の使用サンプルは、以下のVIで参照できます。

  • 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: labview\examples\Application Control\VI Server\Asynchronous Call By Reference


この記事は役に立ちましたか。

役に立たなかった