当前位置:网站首页>LabVIEW对VISA Write和Read函数的异步和同步
LabVIEW对VISA Write和Read函数的异步和同步
2022-07-28 21:48:00 【LabVIEW开发】
LabVIEW对VISA Write和Read函数的异步和同步
改变VISAWrite和Read函数会怎样影响应用?
解答:
注:LabVIEW中,VISA Write和Read函数的同步或异步选择通过右键点击该函数实现,而在基于文本的编程环境里,同步和异步有专门的函数设置。
这里,同步和异步是什么意思呢?
这里的同步并不是硬件共享时钟或者时基。而是VISA函数的运行和调用它们的线程的关系。准确地说,选择异步或者同步决定了执行某个VISARead或者Write的线程在什么时候被释放,可以让别的代码运行。
在LabVIEW里该怎么选择异步或者同步函数呢?
右键点击一个VISAWrite或Read函数会弹出一个菜单,显示Do I/OSynchronously或Do I/O Asynchronously。在菜单里看见的和当前函数的状态正好相反。例如,do I/O synchronously会设定函数为同步(之后,再次右键点击,选择doI/O asynchronously能够回到异步)。下边的截屏显示了VISA Write函数如何实现这一点。

编辑
添加图片注释,不超过 140 字(可选)
改变VISAWrite和Read函数会怎样影响应用?
首先,认识到每一类资源,例如串口,都有内存供数据传输到总线上。对于串口而言,内存就是UART FIFOs。这个内存跟物理内存不一样。物理内存,例如CPU内存(RAM),存储在电脑上运行的应用所需的数据。此外,应用要和资源通信,需要在资源内存和RAM之间传递数据。这时候,VISA作为中间层,拥有处理数据传输的独立内存。要理解VISA Write和Read函数中异步和同步的区别,我们需要认识到数据从开发环境内存(例如LabVIEW)传输到VISA内存,到底层驱动内存(VISA调用操作系统来确定资源名指定的硬件有什么样的基本驱动),到物理资源内存(例如串口的UART FIFO)。考虑一个VISA Write函数,包括下边的事件:
调用线程被锁死。
VISA Write函数相关的数据从开发环境(例如LabVIEW)传输到VISA。
开始轮寻确定所有和VISAWrite函数相关的数据从VISA传输到硬件资源的底层驱动。
从VISA到底层驱动传输完成。
VISA Write函数返回/完成。
现在的问题是: “什么时候调用线程解锁?” 答案如上所述,由选择Write操作的异步或同步决定。如果是异步的,线程在事件2和3之间解锁(紧接在VISA得到数据之后)。然而,如果是同步的,线程在事件4和5之间解锁(仅在函数返回前)。
对Read函数也差不多,区别在于数据传输的方向。这时候数据从硬件资源传向VISA,选择同步或异步read等于选择在传输结束之前或之后释放线程。
该如何选择VISAWrite或Read的同步或异步?
对于VISAWrite,有两个重要的因素:1.写入数据量。2.该应用在调度操作中的可用线程数。考虑写入数据量,如果大量数据要写入(例如,通过串口写入数千字节),线程在把这些字节数传递到硬件驱动的时候会被锁死。如果这个时间超过了该应用在没有该调用线程的时候能处理的范围,选择异步能显著提高总体性能。另一方面,如果应用要求数据尽快被传输到资源,选择同步使得该线程实现这种需求,直到VISA至少把数据传输到资源驱动内存。
现在考虑该应用可用线程数。如果该数目比应用需要的并行处理数目少,选择同步执行VISA Write可能影响性能。理由是,调用线程在数据从VISA传输到硬件驱动之前被锁死,别的进程需要调用该线程的时候可能等待很长时间(特别是数据量很大的时候)。这种情况下选择异步操作会好一些。一个例子是,LabVIEW Runtime Engine默认有4个线程可以用来分布执行LabVIEW并行进程。如果其中的进程包括了VISA Write函数,可以选择异步来更快地释放专门使用那些资源的线程,这样通过使得线程能够被别的进程更早的调用,提高该应用性能。然而,如果希望一个资源在任务完成之前被尽快使用,同时并没有使用LabVIEW所有的4个进程,选择同步Write能够锁死线程,确保使用资源。相反地,如果可用线程数很大,而功能性不会受到多线程之间分割CPU时间影响(以及相应的线程间切换的额外开销)。同步执行Write不会对性能有负面影响。
对于VISA Read操作,也是一样的,在接收大量数据的时候,同步执行会更长时间的锁死该线程,在该应用可用的线程数相对于它的并行进程需要的线程数少的时候更为重要。。
LabVIEW、LabVIEW开发、LabVIEW编程、LabVIEW程序
上文中提到的例子和资料,均在word中的附件里,可点击下载。进一步了解,可联系我们。
LabVIEW对VISA Write和Read函数的异步和同步 - 北京瀚文网星科技有限公司 (bjcyck.com)
边栏推荐
猜你喜欢

事件抽取文献整理(2018)

网络流量监控工具iftop

通过Wi-Fi 7实现极高吞吐量——洞察下一代Wi-Fi物理层
![[radar] radar signal online sorting based on kernel clustering with matlab code](/img/56/1f8e8690b47fc4a1f101d4e530b87f.png)
[radar] radar signal online sorting based on kernel clustering with matlab code

Few people can really play in the "aftermarket" of the whole house intelligent fire collection

Win11找不到DNS地址怎么办?Win11找不到DNS无法访问网页解决方法

What's special about this wireless router, which is popular in the whole network?

华为无线设备配置利用WDS技术部署WLAN业务
![[physical application] atmospheric absorption loss with matlab code](/img/72/e6ac23012a59ac48a37bcbb068890b.png)
[physical application] atmospheric absorption loss with matlab code

Form label
随机推荐
深开鸿:万物智联的大江上,升起一轮开源鸿蒙月
Elements in the middle (one article is enough)
High quality subroutine 2 - high cohesion
The Gerrit local code is associated to the remote warehouse
Retrofit Usage Summary
CV语义分割模型小抄(2)
c语言进阶篇:指针(二)
GCD implementation and arc, blocks, GCD usage examples
[physical application] Wake induced dynamic simulation of underwater floating wind turbine wind field with matlab code
Zero vision technology completed the pre-A round of financing and promoted the domestic replacement of intelligent driving platform software
程序员成长第三十篇:识别真伪需求的神器
Failure [INSTALL_FAILED_TEST_ONLY: installPackageLI]
Typescript prevents base classes from being instantiated
Research on cookies in WebView
General paging - background
wget什么意思
How to open a profitable gym? I tell you from one year's experience that don't fall in love
酒店预订系统数据库房间库存设计思路
GCD summary
[physical application] atmospheric absorption loss with matlab code