当前位置:网站首页>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)
边栏推荐
猜你喜欢

Rhce第二天
![[filter tracking] target tracking based on EKF, TDOA and frequency difference positioning with matlab code](/img/e5/878bf5908856c80d6e07b03ba59da5.png)
[filter tracking] target tracking based on EKF, TDOA and frequency difference positioning with matlab code

MyCms 自媒体商城 v3.6 发布,兼容微擎应用开发(Laravel框架)

CV实例分割模型小抄(1)

Huawei wireless device configuration uses WDS technology to deploy WLAN services

Price for volume has encountered "six consecutive declines" in sales. Can Volvo, which is no longer safe, turn around?

通过Wi-Fi 7实现极高吞吐量——洞察下一代Wi-Fi物理层

事件抽取文献整理(2008-2017)

Achieve high throughput through Wi Fi 7 - insight into the next generation of Wi Fi physical layer

Subscript in swift
随机推荐
trivy【3】自定义扫描策略
欲要让数字零售继续发挥作用,我们需要对数字零售赋予新的内涵和意义
Form label
通过Wi-Fi 7实现极高吞吐量——洞察下一代Wi-Fi物理层
Solve the problem of using anonymous users in pod due to the failure of attaching ciphertext token files for serviceaccount user authentication
行泊一体迎爆发期,抢量产还是修技术护城河?
The safety dog has been selected into many details of cloud security panorama 2.0
可视化全链路日志追踪
GCD implementation and arc, blocks, GCD usage examples
互动滑轨屏在展厅中应用的制作步骤
Text is hidden beyond and ellipsis is displayed
Anr questions often asked in Android interviews
How to automatically install homebrew in China (domestic address)
Binary search tree
Basic concept of MySQL database and deployment of MySQL version 8.0 (I)
金仓数据库 KingbaseES V8.3至V8.6迁移最佳实践(3. KingbaseES移植能力支撑体系)
[physical application] atmospheric absorption loss with matlab code
深开鸿:万物智联的大江上,升起一轮开源鸿蒙月
How to embed AI digital human function in VR panorama? Create a cloud experience
View APK signature