Visa读写数据时会收到VI_ERROR_TMO(超时错误)

当执行VISA 写入函数的时候,会依次发生下面的事情:

  1. 调用的线程会被锁定。
  2. 和VISA写入函数相关的数据会被从开发系统(例如LabVIEW)中传输到VISA驱动中去。
  3. 通过投票决定什么时候将相关的数据从VISA中传输到底层的硬件资源中。
  4. 传输到底层资源结束。
  5. VISA写入函数结束。

伴随着VISA写入函数的执行,你可以选择以同步模式运行还是异步模式运行。在同步模式下,调用的线程会在第四步结束后解锁,这时已经完成了数据到底层硬件的写入。在异步模式下,调用的线程会在第二步结束的时候被释放。这个时候已经完成了数据从开发系统到VISA驱动的写入。

由于在异步模式下,调用线程会被释放以执行其他的程序,用于轮询以查看程序是否执行完毕的viWaitOnEvent 函数会在结束前出现超时的错误。这个超时错误会在NI I/O Trace中出现。这个超时错误并不会影响您的LabVIWE程序的执行。但是这也是一个值得关注的问题。

为了避免这样的问题,您可以按照下面的方式进行设定。右键点击VI,依次选择Synchronous I/O Mode » Synchronous 。

对于更多的信息,请参考名为《异步与同步模式下VISA读写函数的影响》的知识库。

为了在NI I/O Trace中查看到这个信息,您可以依次点击Tools -> Options,在View Slection标签中,取消LabVIEW的复选框来禁用掉LabVIEW API。:

参考:

http://digital.ni.com/public.nsf/allkb/52495D41496A5BFA86257C6E001E8558

https://www.ni.com/zh-cn/support/documentation/supplemental/18/choosing-between-synchronous-and-asynchronous-ni-visa-functions.html?OpenDocument

posted @ 2020-04-19 14:47  *雷子*  阅读(3130)  评论(0编辑  收藏  举报