第26章 LabVIEW工程应用常见疑难解答与经验技巧集萃[共7页]
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
第26章
LabVIEW工程应用常见疑难解答
与经验技巧集萃
1.如何使用针对示波器的仪器驱动来同时采集多个波形?
大部分传统的和IVI仪器驱动只允许用户配置采集的时候一次一个通道,然而,对这一特殊的应用不应该成为障碍。
假设用户将从一个多通道示波器的通道1和2采集波形,先简单地配置通道1的垂直特性和通道属性,然后对通道2做同样的配置。
每个通道的设置将存入仪器的内存,这样不会丢失。
大部分示波器驱动都包含高层的函数或VI,允许用户做这些配置。
接着,配置水平的和触发的采集属性,同样,大部分驱动函数或VI允许用户做这样的配置。
为了用IVI驱动采集多个波形,请不要用IviScope Read Waveform.VI。
原因是Read Waveform.vi 将初始化采集并从某指定的通道取回一个波形,而另一个通道的波形只有在重新初始化一次采集后才能取回一个波形。
因此,这两个波形是不同步的。
相反,应该使用底层函数或VI:IviScope initiate Acquicistion.vi和IviScope fetch Waveform.vi。
开始,通过调用初始化函数,使仪器置于等待触发状态。
接着,仪器收到一个触发,使所有使能的通道开始采集波形,并把数据放入输出缓存。
最后,每个采集通道独立地取回数据,在取回波形(IviScope fetch waveform.vi)并不初始化采集,并不采集新的数据,因此在这种情况下,所取回的两个通道的数据是同时的。
对于非IVI驱动,高层函数的名称和行为不能进行确切的讨论,因为没有针对示波器的详细指标,然而,关于示波器的驱动,有多种读波形的函数或VI,但这些可能不包括初始化功能。
若需要包含初始化功能,可调用一些中层函数或VI来实现。
如果初始化是独立的函数或VI,可通过两次调用IviScope read waveform.vi实现两个波形的同步采集。
2.局部变量和值属性节点之间的区别是什么?
属性节点允许对一个簇中的单个控件进行读或者写,而局部变量则指向整个簇。
属性节点可对远程位置进行更新,而非和面板固定的。
如果用户使用不严格的控件引用(control reference),这个值的数据类型可能是变量(variant),而非这个控件的真实数据类型。
435LabVIEW工程应用常见疑难解答与经验技巧集萃 第 26 章
因为这些的不同,也带来了一些性能上的差别。
如想要更新一些值,如图表,用户可能想加两个光标,改变颜色,把数据写到图里。
在过去需要两个节点,一个是属性,一个是值,这会导致图的两次刷新。
把值属性加到现存的节点,而不用终端连线或局部变量,可以减少一次刷新。
另一方面,因为可能更新数据的一个子集,属性节点和局部变量或终端(terminal )是不同的。
当反复地更新同一个值时,局部变量和终端不会刷新这个控件,但属性节点会。
此外,对于更新非常快的控件,比如一秒钟更新超过50次,局部变量和终端将分期显示(amortize the redisplays ),以便节省CPU 用于来不及看得见的刷新。
控件的右键菜单中有个同步框图更新和显示的选项,值属性节点能够保证每次更新的同步。
3.如何对鼠标的单击和双击做不同的响应?
使用注册表VI 查找鼠标的双击速度HKEY_CURRENT_USER\ControlPanel\Mouse 下的DoubleClickSpeed 。
选择鼠标按下或鼠标按下后,在事件处理框中有事件属性可以设置,选择组合键.Double Click ,程序框图如图26-1所示。
4.调用库函数节点指定的DLL 什么时候导入
到内存?
当调用库函数节点所在的VI 导入到内存的时
候,DLL 文件导入到内存。
不过至少要考虑以下两种情况。
● 调用库函数节点在程序框图上的一个子VI
中,或者在主VI 程序框图中。
在这种情况下,当打开主VI 时,LabVIEW 会导入主VI 和所有的子VI ,所以这个时候同样也导入了调用库函数节点指定的DLL 。
当调用的VI 完全关闭并从内存中移除的时候,DLL 文件才从内存中退出。
● 调用库函数节点在一个被通过引用节点调用的子VI 中。
在这种情况下,子VI 是在打开VI 引用函数执行的时候被导入到内存中的。
因而,DLL 是在打开VI 引用函数执行的时候被导入到内存中的。
当调用的VI 引用关闭的时候,DLL 就会从内存中退出。
5.在LabVIEW 中,如何利用虚拟内存解决内存相关问题?
虚拟内存的含义就如它的名称一样,是实际上不存在的内存。
实际上,虚拟内存是硬盘的一部分。
通常PC 上所安装的RAM 的容量不足以同时运行所需要的所有的应用程序,或者运行一个占用大量内存的程序。
在这个情况下,虚拟内存则允许操作系统在RAM 中查找最近没有用到过的区域,并将它赋值到硬盘上,这个时候RAM 就能够释放出控件来加载一个新的应用软件。
在硬盘中存储了被复
制的RAM 的映像,这个映像被称做一个页面文件,允许操作系统在RAM 和页面文件之间移动数据。
虚拟内存同时也被称做“交换空间”,这是由于Windows 操作系统下的页面文件的扩展名为.swp ,由于内存交换在后台进行,因此通常用户甚至不需要指定它的进行。
由于硬盘的读写比对RAM 进行读写慢得多,因此系统太过于依赖虚拟内存的时候性能会下降,而通过增加内存就可以解决这个问题。
当用户试图在LabVIEW
中初始化一个非常大的数组时,有的时候会收到“内存已满”的错误。
这图26-1 鼠标单击与双击事件。