VIを非同期で呼び出し、結果を収集する



LabVIEW 2018ヘルプ


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

ダウンロード (Windowsのみ)


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

非同期で呼び出すVIのリファレンスを開く際、VIの結果を後で収集するかどうかを決定する必要があります。このトピックでは、非同期の「呼び出して収集」VI呼び出しを開始し、後で結果を収集する方法を説明します。この用途モデルは、他のプログラミング言語で「fork AND join」と呼ばれています。また、VIを呼び出して、結果を収集しないこともできます。

使用するオブジェクト

VIの非同期呼び出しを開始した後、VIの出力を収集するには、次のブロックダイアグラムオブジェクトを使用します。

タイプ指定VIリファレンス VIリファレンスを開く 非同期呼び出しを開始 非同期呼び出しを待機 リファレンスを閉じる
作成

解決方法

VIを非同期で呼び出した後で結果を収集するには、次のブロックダイアグラムを作成します。

以下のリストには、前のダイアグラムについての重要な情報が記載されています。

「VIリファレンスを開く」関数のオプション入力の一部として0x100フラグを設定します。このオプションフラグは、非同期に呼び出され、後で結果を返す「呼び出して収集」VIリファレンスを作成します。
メモ メモ  「VIリファレンスを開く」関数の各オプションフラグ(16進数形式)は、『LabVIEWヘルプ』に記されています。このため、正しい値が渡されるように、数値定数入力の表記形式を必ず16進数形式に変更してください。
非同期呼び出しを待機ノードは、同じVIリファレンスを入力とする非同期呼び出しを開始ノードと関連付けられています。
非同期呼び出しを開始ノードがリファレンスVIを呼び出した後、残りの呼び出しブロックダイアグラムは、リファレンスVIが終了するのを待たずにそのまま実行されます。
非同期呼び出しを待機ノードは、リファレンス入力に関連付けれらたVIが実行を終了するか、ノードがタイムアウトするまで待機します。その時点で、非同期呼び出しを待機ノードがリファレンスVIの出力を返し、データは出力ワイヤに沿って流れます。
リファレンスVIを使用した後、「リファレンスを閉じる」関数を使って閉じて出力を収集します。呼び出して収集VIリファレンスを閉じると、VIの実行中のすべてのインスタンスがすべて中断され、関連付けられているすべての非同期呼び出しを待機ノードはエラー1026を返します。この動作は、呼び出して放置VIリファレンスを閉じた場合とは異なります。

注意とアドバイス

  • VIの中断―この用途パターンにおいてVIを中断する場合は、次のような影響を考慮する必要があります。
    • 呼び出して収集VIリファレンスを開くVIを中断した場合、リファレンスは自動的に閉じ、実行中のVIのインスタンスはすべて中断されます。
    • 呼び出して収集VIリファレンスのあるインスタンスを中断した場合、1つの非同期呼び出しを待機ノードからのみ、呼び出されたVIが中断されたというエラーが返されます。同じVIリファレンスの呼び出しを待機している他のすべての非同期呼び出しを待機ノードは、そのまま待機し続けます。
    • 呼び出して収集VIリファレンスの中断メソッドを呼び出した場合、VIの現在実行中のインスタンスすべてが中断されます。非同期呼び出しを待機ノードの数と同数のエラーが返されます。
  • 呼び出して収集VIリファレンスを開いたVIが実行を終了すると、リファレンスは自動的に閉じ、実行中のVIのインスタンスはすべて中断されます。
  • 同じVIリファレンスに対して複数の非同期呼び出しを開始した場合、特定の非同期呼び出しを待機ノードに出力を返すVI呼び出しを直接識別することはできません。返されたVIのインスタンスを識別する必要がある場合は、VI呼び出しに識別子を割り当てます。

応用:固有のVIリファレンスへの複数の呼び出しからの出力を収集する

次のブロックダイアグラムは、複数のVIを非同期で呼び出し、後に出力を収集する場合のテンプレートです。各非同期呼び出しが固有のVIリファレンスに関連付けられているため、非同期呼び出しを待機ノードは、それぞれ特定のVI呼び出しが終了するのを待機します。このテンプレートは、ユーザインタフェースを作成して、別のサブVIのフロントパネルをサブパネルとして表示する場合に特に役立ちます。

サンプル

VIを非同期に呼び出し、結果を後から収集するサンプルについては、labview\examples\Application Control\VI Server\Asynchronous Call By ReferenceディレクトリのAsynchronous Call and Collect VIを参照してください。



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

役に立たなかった