选择​同步​或​异步​NI-​VISA​函数

概览

本文​旨​在​解释​术语“同步”和“异步”,​因为​它们​与​NI-​VISA​函数​密切​相关。​本文​档​可​帮助​确定​为​应用​程序​选择​哪​一种​函数。

简介

术语“同步”和“异步”是​指​NI-​VISA​函数​相​对于​其​调​用​线​程​的​行为​方式。​如果​NI-​VISA​函数​同步​运行,​会​阻止​调​用​线​程​中的​其他​代码​执行。​在​某些​情况​下,​比如​传输​大量​数据​或者​确保​尽快​将​数据​传输​到​设备​或​从​设备​采集​数据,​可能​更​适合​采用​这种​方法。

在​较​底层,​基于​接口​是​同步​还是​异步,​调​用​线​程​保持​锁定​的​持续​时间​也​不尽​不同。​写​入​操作​必须​将​数据​从​应用​程序​开发​环境​(ADE)​传输​到​计算​机​提供​的​基础​物理​资源。​而​读​取​操作​需要​将​数据​从​设备​的​物理​资源​传输​到​ADE。​这​两​种​操作​都​必须​经过​若干​层​内存​的​传输。

写​入​操作​的​执行​序列​如下:

  1. 锁定​调​用​线​程。
  2. 将与​VISA​写​入​函数​关联​的​数据​从​ADE​传输​到​VISA​内存。
  3. 轮​询​操作​开始​确定​所有​与​VISA​写​入​关联​的​数据​何时​已​从​VISA​内存​传输​到​硬件​资源​的​底层​驱动​程序。
  4. 传输​完成。
  5. VISA Write​函数​返回​结果。

读​取​操作​与​写​入​操作​的​序列​相同,​但​顺序​相反。

如果​是​同步​操作,​调​用​线​程​在​上述​步骤​4​和​5​之间​解​锁。​对于​异步​操作,​调​用​线​程​在​上述​步骤​2​和​3​之间​解​锁。​在​为​应用​程序​选择​同步​或​异步​操作​时,​需要​考虑​正在​写​入​或​读​取​的​数据​量​以及​应用​程序​可用​的​线​程​数。

如果​必须​在​尽可能​短​的​时间​内​传输​大量​数据,​则​应​考虑​同步​执行​操作,​因为​这样​的话,​调​用​线​程​将​专门​用于​将​数据​传​入/​传​出​硬件​资源。​而​如果​采用​异步​执行,​调​用​线​程​可以​访问​应用​程序​的​其他​部分,​不过​需要​更​长​的​时间​来​确定​数据​是否​已​传​入/​传​出​硬件​资源。

如果​应用​程序​可用​的​线​程​数量​相比​并行​进程​数量​较​少,​那么​异步​运行​NI-​VISA​操作​可以​让​调​用​线​程​更​快速​用于​应用​程序​的​其他​部分。​如果​同步​执行​此​操作,​调​用​线​程​可以​专门​用于​执行​NI-​VISA​操作,​确保​此​操作​尽快​完成,​但​会​影响​应用​程序​的​整体​性能。

在​LabVIEW​中​选择​同步​或​异步​函数​时,​可​参考​以下​LabVIEW​帮助​链​接。

posted @ 2020-04-19 17:23  *雷子*  阅读(432)  评论(0编辑  收藏  举报