![]() | LabVIEW 2016ヘルプ |
![]() | LabVIEW 2017ヘルプ |
![]() | LabVIEW 2018ヘルプ |
![]() | LabVIEW 2019ヘルプ |
![]() | LabVIEW 2020ヘルプ |
サブVIノードまたはリファレンス呼び出しノードでターゲットVIを普通に呼び出すと、ターゲットVIが結果を返すまでデータフローはそのノードで停止し、結果を受信した後ノードの出力端子からデータフローが続行します。
これとは対照的に、サブVIを非同期で呼び出すと、呼び出しVIにデータが流れている間にも、呼び出しVIサブVIは実行を開始します。呼び出しVIがサブVIの結果をすぐに必要としない場合に、サブVIを非同期呼び出しすることを推奨します。このような場合は、非同期呼び出しによりサブVIが呼び出しVIと同時に実行されるため、呼び出しVIの実行時間が大幅に短縮されます。以下は、VIの非同期呼び出しにより実行を効率化できるプログラミングシナリオの例です。
LabVIEWでは、すべてのVIの非同期呼び出しは次のステップの組み合わせで構成されています。
VIの非同期呼び出しを実行するには、意図する使用ケースが、以下の使用モデルのいずれであるかを判断する必要があります。各モデルの実装方法については次のトピックを参照してください。
通常VIの非同期呼び出しを使用する場合、VIの非同期呼び出しの管理に関する知識は必要ありませんが、非同期呼び出しプールを理解すると、パフォーマンス制御や確定的アプリケーションの設計に役立ちます。「VIリファレンスを開く」関数のオプション入力に非同期オプションフラグの1つを設定して、非同期呼び出しを実行するためのVIリファレンスを準備すると、そのVIのすべての呼び出しデータを追跡記録するデータ領域のプールが作成されます。単一のデータ領域ではなく、データ領域のプールがVIリファレンスに関連付けられるため、同じVIリファレンスで複数の非同期呼び出しを開始できます。非同期呼び出しを開始ノードを使用して、VIリファレンスで非同期呼び出しを開始するたびに、プール内の1つのデータ領域が予約されます。VIが実行を終えると、その出力はデータ領域に保存され、VI呼び出しは完了したものとしてマークされます。非同期呼び出しを待機ノードが呼び出しVIの出力を待機している場合は、データ領域から結果が返され、同じVIの他の呼び出し用のデータ領域が開放されます。
LabVIEWでは、各VIリファレンスに対して、ターゲットコンピュータの各CPUコアにつき1つのデータ領域が非同期呼び出しプールに作成されます。使用可能なデータ領域以上の非同期呼び出しがターゲットVIに対して開始されると、追加のデータ領域をプールに割り当てられ、プールのサイズが拡大されます。領域の割り当てに要する時間は確定的でないため、割り当てをトリガする非同期呼び出しを開始ノードにおいて、VIの呼び出しに予測不可能な遅延が発生する場合があります。
リアルタイムオペレーティングシステムで実行する必要のあるVIにおいて、予測不可能な遅延が発生することを防ぐためには、非同期呼び出しを開始する前に非同期呼び出しプールを追加メソッドを呼び出し、使用するVIリファレンスに必要な数のデータ領域を呼び出しプールに事前に割り当てておきます。データ領域を事前に割り当てておくと、遅延はプログラムの最初のみで発生し、非同期呼び出しを開始ノードでは発生しません。
非同期呼び出しプールがパフォーマンスに与える影響の詳細については、labview\examples\Application Control\VI Server\Asynchronous Call By ReferenceディレクトリのPopulating the Asynchronous Call Pool VIを参照してください。
VIの非同期呼び出しの結果を収集する場合、呼び出されたVIのリファレンスを非同期呼び出しを待機ノードに渡す必要があります。非同期呼び出しを待機ノードが受け取るリファレンスは、VIのリファレンスであり、特定のデータ領域のリファレンスではないため、ノードはリファレンスVIの特定の呼び出しの出力を収集できません。代わりに、ノードは、完了したVI呼び出しの出力を返します。この現象の詳細については、次のブロックダイアグラムを参照してください。
ラベルからも分かるように、複数の非同期呼び出しを待機ノードが同じVIリファレンスに依存している場合、どのノードがそのVIリファレンスの特定の呼び出しの出力を返すかを予測することはできません。前述のダイアグラムでは、上の非同期呼び出しを待機ノードは、非同期呼び出し1を開始に配線されていますが、非同期呼び出し2を開始の出力を返すことができます。同じVIに複数の呼び出しを実行して、非同期呼び出しを開始ノードを特定の非同期呼び出しを待機ノードと組み合わせたい場合は、次の解決法のいずれかを実行します。
役に立った
役に立たなかった