複数のVIインスタンスを非同期で呼び出して並列実行する



LabVIEW 2018ヘルプ


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

ダウンロード (Windowsのみ)


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

同じVIに対して複数の非同期呼び出しを開始すると、デフォルトでは、呼び出しは直列化され、強制的に1度に1つずつ実行されます。このため、実行時間が長くなります。複数の呼び出しを並列的に実行して、1つの呼び出しが他の呼び出しの実行を遅延することを防ぐには、次の手順を実行します。

使用するオブジェクト

次のブロックダイアグラムオブジェクトを使用して、再入可能VIに対して非同期呼び出しを動的に開始し、後でVIの出力を収集します。

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

解決方法

次のブロックダイアグラムを作成し、再入可能VIに対して複数の非同期呼び出しを開始して、後で結果を収集します。

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

再入可能実行VIパスで指定されたVIを構成するには、VIプロパティダイアログボックスの実行ページでクローン共有による再入実行またはクローンの事前割り当てによる再入実行を選択します。
「VIリファレンスを開く」関数のオプション入力の一部として0x40フラグを設定します。再入実行VIリファレンスで同期呼び出しを開始するには、このオプションフラグが必要です。このフラグがないと、呼び出しは直列的に実行されます。
メモ メモ  「VIリファレンスを開く」関数の各オプションフラグ(16進数形式)は、『LabVIEWヘルプ』に記されています。このため、正しい値が渡されるように、数値定数入力の表記形式を必ず16進数形式に変更してください。
ターゲットVIリファレンスの複数の特性は、オプションフラグを組み合わせることにより指定できます。この用途では、0x100オプションフラグと0x40オプションフラグを組み合わせることにより、VIを同期で呼び出してから、後で結果を収集するように構成されています。
1つのリファレンスに対して、同数の非同期呼び出しを待機ノードと非同期呼び出しを開始ノードを使用します。
0x40オプションフラグを設定すると、非同期呼び出しを開始ノードは、ターゲットVIではなく、そのクローンを呼び出します。クローンVIを呼び出した場合の影響については、注意とアドバイスを参照してください。
同じVIリファレンスに対して複数の非同期呼び出しを開始した場合、特定の「非同期呼び出しを待機」関数に出力を返すVIのインスタンスを直接識別することはできません。返されたVIのインスタンスを識別する必要がある場合は、VI呼び出しに識別子を割り当てます。
結果を収集した後、「リファレンスを閉じる」関数を使用して開いているVIリファレンスを閉じます。
メモ メモ  I非同期呼び出しの結果を無視する場合は、非同期呼び出しを待機ノードを削除し、0x100オプションフラグの代わりに0x80オプションフラグを設定します、

注意とアドバイス

VIサーバプロパティおよびメソッドは、VIの非同期呼び出しの並列インスタンスを変更できません。0x40VIリファレンスで呼び出されたVIサーバプロパティまたはメソッドは、非同期呼び出しを開始ノードが実際に呼び出すVIクローンを変更できません。プロパティまたはメソッドは、元のターゲットVIに適用されます。非同期呼び出しを開始ノードが実際に呼び出すVIクローンにVIサーバプロパティやVIサーバメソッドを適用するには、ターゲットVI内でプロパティまたはメソッドを呼び出します。

サンプル

実行時間を短縮するために、VIの並列インスタンスを非同期に呼び出すサンプルについては、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ディレクトリのBenchmarking Asynchronous Calls VIを参照してください。



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

役に立たなかった