同期および非同期VISA関数の違いについて



使用ソフトウェア:
使用ソフトウェア・バージョン: 1.1
使用ソフトウェア・バージョンに特化: N/A
二次のソフトウェア: Driver Software>>NI-488.2, Driver Software>>NI-VISA

問題:
同期もしくは非同期VISA関数はアプリケーションに対してどのような違いがありますか?


解決策:
同期および非同期という用語は、VISA関数がその呼び出し元のスレッドに対してどのように動作するかを指します。VISA関数を同期して実行すると、呼び出し側のスレッド内で実行から他のコードを防ぐことができます。大量のデータを転送したり、できる限り速くデバイスからデータを取得したいような状況では、これが望ましいかもしれません。

下位レベルでは、呼び出し元のスレッドはインターフェイスが同期または非同期であるかによってロックされる時間が異なります。書き込み操作の場合、データは開発環境からコンピュータによって提供される下層の物理リソースに転送される必要があります。読み取り操作の場合、データはデバイスの物理リソースから開発環境へ転送される必要があります。これらの転送ではいくつかのメモリ層を通過する必要があります。

書き込み操作の場合は、以下の操作があります。

  1. 呼び出し元のスレッドがロックされます。
  2. VISA書き込み関数に関連したデータは、開発環境からVISAメモリへ転送されます。
  3. VISA書き込みに関連したすべてのデータが、VISAメモリからハードウェアリソース用の下層ドライバへの転送タイミングを決定するために、ポーリングを開始します。
  4. 転送が完了します。
  5. VISA書き込みが終了します。
読み取り操作でも同じ操作が発生しますが、順番が逆になります。

同期操作では、呼び出し元のスレッドが4と5間でアンロックされます。非同期操作では、呼び出し元のスレッドはステップ2と3の間でアンロックされます。アプリケーションにおいて同期および非同期を選択するには、書き込むもしくは読み取るデータ量とアプリケーションが利用できるスレッド数を考慮する必要があります。

もし大容量のデータをできる限り短い時間で転送する必要がある場合、ハードウェアリソース間のデータ転送に対して呼び出し元のスレッドを費やすため、同期操作で実行することを検討すべきです。 非同期操作を実行することは、アプリケーションの他の部分で呼び出し元のスレッドにアクセスすることを許可しますが、ハードウェア間のデータ転送に時間がかかります。

アプリケーションで利用可能なスレッド数が並列プロセス数より小さい場合は、非同期としてVISA操作を実行することで、アプリケーションの他の部分ですぐ利用できる呼び出し元のスレッドを作成します。同期操作を実行すると、VISA操作に呼び出し元のスレッドを費やしてできる限り速く完了することを確実に行いますが、アプリケーション全体のパフォーマンスを犠牲にします。

LabVIEWで同期および非同期の設定方法については、下記のLabVIEWヘルプを参照してください。



関連リンク:
技術サポートデータベース 3D9B7L4B: シリアル通信でUART FIFOサイズによるパフォーマンスの影響
技術サポートデータベース 0W1EHK0Z: How Do I Change VISA Reads and Writes from Asynchronous to Synchronous?
LabVIEWヘルプ: VISA読み取り 関数
LabVIEWヘルプ: VISA書き込み 関数

添付:


Screenshot.bmp - Screenshot.bmp



報告日時: 09/10/2004
最終更新日: 11/16/2016
ドキュメントID: 3D9B8E4B