LabVIEW对VISA Write和Read函数的异步和同步

2024-03-01 18:50

本文主要是介绍LabVIEW对VISA Write和Read函数的异步和同步,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

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)

 

这篇关于LabVIEW对VISA Write和Read函数的异步和同步的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/763463

相关文章

Python的time模块一些常用功能(各种与时间相关的函数)

《Python的time模块一些常用功能(各种与时间相关的函数)》Python的time模块提供了各种与时间相关的函数,包括获取当前时间、处理时间间隔、执行时间测量等,:本文主要介绍Python的... 目录1. 获取当前时间2. 时间格式化3. 延时执行4. 时间戳运算5. 计算代码执行时间6. 转换为指

Python正则表达式语法及re模块中的常用函数详解

《Python正则表达式语法及re模块中的常用函数详解》这篇文章主要给大家介绍了关于Python正则表达式语法及re模块中常用函数的相关资料,正则表达式是一种强大的字符串处理工具,可以用于匹配、切分、... 目录概念、作用和步骤语法re模块中的常用函数总结 概念、作用和步骤概念: 本身也是一个字符串,其中

Redis消息队列实现异步秒杀功能

《Redis消息队列实现异步秒杀功能》在高并发场景下,为了提高秒杀业务的性能,可将部分工作交给Redis处理,并通过异步方式执行,Redis提供了多种数据结构来实现消息队列,总结三种,本文详细介绍Re... 目录1 Redis消息队列1.1 List 结构1.2 Pub/Sub 模式1.3 Stream 结

使用Python实现一个优雅的异步定时器

《使用Python实现一个优雅的异步定时器》在Python中实现定时器功能是一个常见需求,尤其是在需要周期性执行任务的场景下,本文给大家介绍了基于asyncio和threading模块,可扩展的异步定... 目录需求背景代码1. 单例事件循环的实现2. 事件循环的运行与关闭3. 定时器核心逻辑4. 启动与停

C#中async await异步关键字用法和异步的底层原理全解析

《C#中asyncawait异步关键字用法和异步的底层原理全解析》:本文主要介绍C#中asyncawait异步关键字用法和异步的底层原理全解析,本文给大家介绍的非常详细,对大家的学习或工作具有一... 目录C#异步编程一、异步编程基础二、异步方法的工作原理三、代码示例四、编译后的底层实现五、总结C#异步编程

shell编程之函数与数组的使用详解

《shell编程之函数与数组的使用详解》:本文主要介绍shell编程之函数与数组的使用,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录shell函数函数的用法俩个数求和系统资源监控并报警函数函数变量的作用范围函数的参数递归函数shell数组获取数组的长度读取某下的

关于pandas的read_csv方法使用解读

《关于pandas的read_csv方法使用解读》:本文主要介绍关于pandas的read_csv方法使用,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录pandas的read_csv方法解读read_csv中的参数基本参数通用解析参数空值处理相关参数时间处理相关

MySQL高级查询之JOIN、子查询、窗口函数实际案例

《MySQL高级查询之JOIN、子查询、窗口函数实际案例》:本文主要介绍MySQL高级查询之JOIN、子查询、窗口函数实际案例的相关资料,JOIN用于多表关联查询,子查询用于数据筛选和过滤,窗口函... 目录前言1. JOIN(连接查询)1.1 内连接(INNER JOIN)1.2 左连接(LEFT JOI

MySQL中FIND_IN_SET函数与INSTR函数用法解析

《MySQL中FIND_IN_SET函数与INSTR函数用法解析》:本文主要介绍MySQL中FIND_IN_SET函数与INSTR函数用法解析,本文通过实例代码给大家介绍的非常详细,感兴趣的朋友一... 目录一、功能定义与语法1、FIND_IN_SET函数2、INSTR函数二、本质区别对比三、实际场景案例分

C++ Sort函数使用场景分析

《C++Sort函数使用场景分析》sort函数是algorithm库下的一个函数,sort函数是不稳定的,即大小相同的元素在排序后相对顺序可能发生改变,如果某些场景需要保持相同元素间的相对顺序,可使... 目录C++ Sort函数详解一、sort函数调用的两种方式二、sort函数使用场景三、sort函数排序