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中help()和dir()函数的使用

《Python中help()和dir()函数的使用》我们经常需要查看某个对象(如模块、类、函数等)的属性和方法,Python提供了两个内置函数help()和dir(),它们可以帮助我们快速了解代... 目录1. 引言2. help() 函数2.1 作用2.2 使用方法2.3 示例(1) 查看内置函数的帮助(

C++ 函数 strftime 和时间格式示例详解

《C++函数strftime和时间格式示例详解》strftime是C/C++标准库中用于格式化日期和时间的函数,定义在ctime头文件中,它将tm结构体中的时间信息转换为指定格式的字符串,是处理... 目录C++ 函数 strftipythonme 详解一、函数原型二、功能描述三、格式字符串说明四、返回值五

canal实现mysql数据同步的详细过程

《canal实现mysql数据同步的详细过程》:本文主要介绍canal实现mysql数据同步的详细过程,本文通过实例图文相结合给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的... 目录1、canal下载2、mysql同步用户创建和授权3、canal admin安装和启动4、canal

Linux实现线程同步的多种方式汇总

《Linux实现线程同步的多种方式汇总》本文详细介绍了Linux下线程同步的多种方法,包括互斥锁、自旋锁、信号量以及它们的使用示例,通过这些同步机制,可以解决线程安全问题,防止资源竞争导致的错误,示例... 目录什么是线程同步?一、互斥锁(单人洗手间规则)适用场景:特点:二、条件变量(咖啡厅取餐系统)工作流

Mysql的主从同步/复制的原理分析

《Mysql的主从同步/复制的原理分析》:本文主要介绍Mysql的主从同步/复制的原理分析,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录为什么要主从同步?mysql主从同步架构有哪些?Mysql主从复制的原理/整体流程级联复制架构为什么好?Mysql主从复制注意

如何解决Druid线程池Cause:java.sql.SQLRecoverableException:IO错误:Socket read timed out的问题

《如何解决Druid线程池Cause:java.sql.SQLRecoverableException:IO错误:Socketreadtimedout的问题》:本文主要介绍解决Druid线程... 目录异常信息触发场景找到版本发布更新的说明从版本更新信息可以看到该默认逻辑已经去除总结异常信息触发场景复

Python中bisect_left 函数实现高效插入与有序列表管理

《Python中bisect_left函数实现高效插入与有序列表管理》Python的bisect_left函数通过二分查找高效定位有序列表插入位置,与bisect_right的区别在于处理重复元素时... 目录一、bisect_left 基本介绍1.1 函数定义1.2 核心功能二、bisect_left 与

java中BigDecimal里面的subtract函数介绍及实现方法

《java中BigDecimal里面的subtract函数介绍及实现方法》在Java中实现减法操作需要根据数据类型选择不同方法,主要分为数值型减法和字符串减法两种场景,本文给大家介绍java中BigD... 目录Java中BigDecimal里面的subtract函数的意思?一、数值型减法(高精度计算)1.

C++/类与对象/默认成员函数@构造函数的用法

《C++/类与对象/默认成员函数@构造函数的用法》:本文主要介绍C++/类与对象/默认成员函数@构造函数的用法,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录名词概念默认成员函数构造函数概念函数特征显示构造函数隐式构造函数总结名词概念默认构造函数:不用传参就可以

C++类和对象之默认成员函数的使用解读

《C++类和对象之默认成员函数的使用解读》:本文主要介绍C++类和对象之默认成员函数的使用方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录一、默认成员函数有哪些二、各默认成员函数详解默认构造函数析构函数拷贝构造函数拷贝赋值运算符三、默认成员函数的注意事项总结一