LabVIEW应用-SubVI的调用
Labview子VI创建与调用方法(适合初学者)

首先打开labview创建一个子VI,要实现的功能是:输入两个数x,y,最后输出得到x+y-3;
程序,前面板如图所示:
右击左上角圈出位置选择模式为
三个框(即两个输入一个输出)
选好模式以后,然后开始确定输入和输出对应的接口,具体操作为鼠标单击任意方框(方框又白变黑)然后单击前面板上要对应的控件。
如下图所示:
然后依次操作
然后单击保存命名为:“子VI创建(x+y-3).VI”就可以调用啦。
调用过程如下:
打开labview程序界面,单击右键选择”选择VI”选项
然后选择”子VI创建(x+y-3).VI”
单击确定,放置调用的VI 于程序面板上,按下ctrl+H如下图可看调用的子VI有三个接线端
然后在三个接线端点击右键创建控件如下所示:
就此简单的子VI创建与调用就完成了。
本教程只是简单的描述子VI的调用方法,针对初学者学习很有帮助。
学会子VI的调用在以后的复杂编程中会很有用处。
Labview功能介绍之三

探针
你可以用探针工具来查看当框图程序流经某一根 连接线时的数据值。从Tools工具模板选择探针工 具,再用鼠标左建点击你希望放置探针的连接线。 这时显示器上会出现一个探针显示窗口。该窗口 总是被显示在前面板窗口或框图窗口的上面。在 框图中使用选择工具或连线工具,在连线上点击 鼠标右键,在连线的弹出式菜单中选择“探针”
示。 • 图形子模板:显示数据结果的趋势图和曲线图。 • 路径和参考名(Refnum)子模板:文件路径和各
种标识的控制和显示。
控制模板包括的几个子模板(续)
• 控件容器库子模板:用于操作OLE、ActiveX等功能。 • 对话框子模板:用于输入对话框的显示控制。 • 修饰子模板:用于给前面板进行装饰的各种图形对象。 • 用户自定义的控制和显示。 • 调用存储在文件中的控制和显示的接口。
框图程序
框图程序是由节点、端点、图框和连线四种元素构成的
•节点 类似于文本语言程序的语句、函数或者子程序。
LabVIEW有二种节点类型----函数节点和子VI节点。两者
的区别在于:函数节点是LabVIEW以编译好了的机器代 码供用户使用的,而子VI节点是以图形语言形式提供给用 户的。用户可以访问和修改任一子VI节点的代码,但无法 对函数节点进行修改。上面的框图程序所示的VI程序有两 个功能函数节点,一个函数使两个数值相加,另一个函数 使两数相减。
功能模板包括的几个子模板(续三)
• 应用程序控制子模块:包括动态调用VI、标准可执行程 序的功能函数。
• 底层接口子模块:包括调用动态连接库和CIN节点等功 能的处理模块。
• 文档生成子模板。 • 示教课程子模板:包括LabVIEW示教程序。 • 用户自定义的子VI模板。 • “选择…VI子程序”子模板:包括一个对话框,可以
labview动态调用

基本概念众所周知,LabVIEW程序又称虚拟仪器,即VI。
VI是由以下三部分构成:·前面板——即用户界面。
·程序框图——包含用于定义VI功能的图形化源代码。
·图标和连线板——用以识别VI的接口,以便在创建VI时调用另一个VI。
当一个vi可以应用在其它VI中,则称为子vi。
子vi相当于文本编程语言中的子程序。
在进行LabVIEW程序设计时,一个VI中可以包含一个或若干个子vi。
这些子vi是被直接放置在程序框图中,习惯上称这些子vi为:静态链接子vi。
这些子vi在VI载入的同时也被加载到内存中。
动态调用VI在应用程序设计时,我们希望能够自由地、任意切换操作界面和测量程序界面,并且希望在任何时候,前面板上仅运行一个程序界面。
这样就能够保证良好地、准确地实现“人机对话”。
完成这样的操作,就需要动态的调用不同的VI。
与静态链接的子vi不同,动态加载VI只有在打开VI引用时VI的调用程序才会将其加载。
如果VI调用程序较大,采用动态加载VI的方式可以节省加载时间和内存,这是因为在调用程序需要运行该VI以前无需将其加载,在操作结束后又可将其从内存中释放。
问题是:在涉及到动态调用的LabVIEW帮助文件中,看到了这样的概念:“严格类型VI”。
那么与此相对应一定还存在着:“非严格类型VI”。
似乎将VI分成了两种不同的形式?到底“什么是严格类型VI和非严格类型VI”?它们有什么内在联系和不同以及区别呢?前几天我还和NI的AE讨论这个问题,就是:“什么是严格类型vi和非严格类型VI”?但一直没有得到明确的答复。
察看一些LabVIEW的资料,也没有弄明白这个问题。
直到开始写这篇博客时,因涉及到这个概念,才开始对这个问题进行了仔细的分析,分析的结果似乎找到了一些答案。
严格类型vi:严格类型vi就是可以被其它VI调用的子vi(静态链接子vi)。
进一步说LabVIEW 提供的“函数”选板上的vi都是严格类型vi。
labview深入探索------全局变量、局部变量与内存管理

很多教科书上都提示要慎用局部变量和全局变量,主要有以下几个原因:违背了数据流的编程读取局部变量需要拷贝数据不能象SUBVI一样可以重用数据BUFFER不利于程序调试容易引起竞争我在论坛上看到很多初学者的程序,里面充满了大量的局部变量,可以这样说,当你使用了过多的局部变量的时候,你的程序结构是有问题的,在早期的LV版本中根本不存在全局变量和局部变量,同样可以编制规模很大的程序,这说明局部变量和全局变量并不是必须的,LV提供了它们是因为在特定的情况下可以简化编程。
当我们使用SUBVI时,我们需要定义一个连接器,包括输入输出端子,调用VI的数据从输入端子进入,当SUBVI未执行完毕时,数据是不会流出到输出端子的,因此,SUBVI可以重用调用VI的数据缓冲区。
而局部变量可以在子VI的任何位置被读写,局部变量在同一一个VI中,全局变量可以在任何VI中,所以通常情况下,无法重用数据缓冲区。
局部变量用于读写一个VI的前面板对象,对象是控制器或者指示器都可以,当我们读局部变量的时候,我们是在对象的当前状态,而对象在程序框图中的其它位置,其它的线程可能连续写这个对象,所以LABVIEW无法重用内存,不得不拷贝数据到新的缓冲区中,如果数据结构很大,就会占用相当多的内存。
很多情况下,局部变量都是可以避免的,看下面的例子。
上面图中的设计方式,在很多初学的程序中经常碰到,同样的数据要传到两个VI中,并且有次序要求,因此采用了顺序结构。
问题是根本没有必要用局部变量,局部变量导致了数据的复制。
上面的两个图完成同样的功能,一个仍然采用顺序结构,不过CLUSTER挪到了FRAME外面,通过隧道,将数据传入到两个子VI中,避免了使用局部变量。
但是顺序结构本身也是效率比较低的,也是NI不建议过度使用的.针对这个具体问题,最下面的是最好地解决方案,利用错误簇作为数据流实现了顺序处理,避免使用局部变量。
通过错误簇同时也有利于程序调试跟踪.另外一个明显的优点是程序框图更清晰明了,避免了在各个FRAME中进行切换.全局变量使用内存的方式类似于局部变量,不同的是每次读全局变量肯定要生成一份内存拷贝,而局部变量是有可能重用缓冲区的.当全局变量是一个比较大的数组或者字符串时,多处多次读操作会造成大量的内存复制,极大地占用内存,导致运行速度下降。
LabVIEW调用库函数节点技术

LabVIEW调用库函数节点技术LabVIEW提供了调用库函数节点(Call Library Function node,简称CLF),利用CLF,可以在LabVIEW中实现DLL和API函数的调用。
在LabVIEW中使用CLF 需要了解动态链接库里被调用的函数名称、功能及其输入输出参数等,下面将详细介绍在LabVIEW 8.6下利用CLF调用6050运动控制卡基于C语言编写的驱动程序[41]。
首先在框图程序中创建一个空的CLF,CLF位于“函数模板→互连接口→库与可执行程序子模板”,如图1-1所示,下面给出其详细的配置过程:图1-1 CLF节点图标(1)双击CLF图标弹出配置对话框,如图1-2所示,首先要指定6050控制卡动态链接库的库名或路径。
点击其右边的文件夹图标,打开一个文件对话框,找到6050运动控制卡的动态链接库文件“dfjzh6050dll.dll”所在位置。
(2) LabVIEW装载了DLL文件后会自动检测其所包含的函数,但不能检测函数中的参数及其数据类型,因此接下来的要参照DLL说明文件“dfjzh6050dll.h”及控制卡使用手册选择所要配置的函数名,设置函数参数。
(3)在调用规范中有“stdcall(WINAPI)”和“C”两个选项,它们的区别是,若调用函数为Windows标准共享库函数则选择“stdcall(WINAPI)”选项,若调用函数为VC环境下编译的库函数则选择“C”选项,本文选择“C”选项。
(4)在“线程”选项中选择“在UI线程中运行”。
至此,完成了所有配置选项,在CLF配置图最下方可以看到函数原型。
下面阐述配置CLF过程中需注意的两个问题:图1-2 CLF节点配置图Figure1-2 CLF Node Setting Chart(1) LabVIEW线程调用方式节点配置中,有两种线程调用方式,“在UI线程中运行”和“在任意线程中运行”。
“在UI线程中运行”表示在用户接口线程中调用,DLL的执行期将等到用户接口线程(在此即LabVIEW环境下的VI应用程序)执行DLL的导出函数调用时才开始;“在任意线程中运行”表示允许多个线程同时调用这个DLL。
利用LabVIEW进行仪器控制与测量

利用LabVIEW进行仪器控制与测量LabVIEW是一款强大的图形化编程软件,广泛应用于仪器控制与测量领域。
它提供了丰富的工具和函数库,帮助工程师们实现高效可靠的仪器控制和测量任务。
本文将介绍如何利用LabVIEW进行仪器控制与测量,并分享一些实用的技巧和经验。
一、LabVIEW简介LabVIEW是由美国国家仪器公司(National Instruments,简称NI)开发的一款虚拟仪器编程环境。
它基于图形化编程思想,通过将各种仪器的控制命令和测量数据进行图像化的表示和连接,实现仪器的自动化控制和数据处理。
二、仪器连接与配置在使用LabVIEW进行仪器控制之前,首先需要确保仪器与计算机正确连接,并进行相应的配置。
LabVIEW支持各种通信接口,如GPIB、USB、以太网等,根据所使用的仪器接口,选择相应的硬件适配器并进行驱动程序的安装。
在LabVIEW开发环境中,选择适当的仪器控制器件和相应的驱动程序,并进行配置。
LabVIEW提供了一系列的仪器驱动程序,可以根据具体的仪器型号进行选择和安装,以确保与仪器的正常通信。
三、仪器控制程序设计1. 创建仪器控制 VI在LabVIEW中,一个程序被称为虚拟仪器(VI,Virtual Instrument)。
要创建一个仪器控制程序,首先打开LabVIEW开发环境,点击“新建”按钮,选择“空VI”创建一个新的虚拟仪器。
2. 编写程序代码在LabVIEW的开发环境中,程序代码被称为控件和功能块,通过将这些控件和功能块进行图形化的连接,实现仪器的控制和测量。
可以根据需要在界面上拖拽控件,如按钮、滑块、图表等,并通过功能块的参数设置来实现具体的仪器控制和测量任务。
3. 数据采集与处理LabVIEW提供了丰富的数据采集和处理函数库,可以方便地进行数据采集、数据存储、数据处理和数据分析等操作。
可以根据需求选择合适的函数,并将其与仪器控制程序进行连接,实现数据的自动采集和处理。
labview信号量的使用
labview信号量的使用
关于信号量的使用,程序自带帮助文件的说明是这样的:信号量(互斥量)是用来保护对共享资源进行访问的一个对象。
被访问的共享资源的代码叫作关键临界段。
在同一时间,只有一定数量的任务可以访问信号量。
信号量以此方式保护对重要部分的访问。
通常情况下,一次只有一个任务可以访问被通用信号量保护的临界段。
但是,信号量可能允许一个以上任务(预定义值以下)访问重要部分。
如要指定同时访问被通用信号量保护的重要部分的任务数量,连接获取信号量引用VI的大小输入端。
该VI获取对现有信号量的引用或新建一个信号量,大小输入端指定同一时间可获取信号量的任务数量。
使用获取信号量VI可以
获取对一个信号量的访问。
如使用获取信号量引用VI创建的信号量的大小为1,则一次只有一个任务可访问信号量。
所以,必须使用释放信号量VI,释放
对信号量的访问。
这样,另一个任务才能访问信号量。
使用释放信号量引用VI,释放对信号量的引用。
注:只要非空闲的顶层VI引用了某个信号量,信号量就一直在内存中。
如
顶层VI为空闲,LabVIEW将释放该VI的全部信号量引用,包括顶层VI的子VI中的引用。
如LabVIEW释放上一个引用至命名信号量,LabVIEW将销毁信号量。
因为只能获取引用至一个未命名信号量的引用,当顶层VI空闲时,LabVIEW将销毁一个未命名信号量。
如要在多个顶层VI之间使用信号量,需为信号量命名并从顶层VI调用获取信号量引用VI,这样每个VI就有了对信号量的唯一引用。
将这些难懂的语言转化为我自己的语言吧:。
Labview实验一、Labview基本编程环境的使用和子VI的调用
实验一、Labview基本编程环境的使用和子VI的调用一、实验目的(1)熟悉LabVIEW软件的基本编程环境。
(2)熟悉子VI的调用。
二、实验内容(1)创建一个VI程序,并将此程序保存为子VI。
此VI要实现的功能是:当输入发动机转速时,经过一定的运算过程,输出发动机温度和汽车速度值。
(2)创建一个VI程序,并在编写程序过程中调用上机练习一中创建的子VI。
此VI 要实现的功能是:通过旋钮控件来显示输入的发动机转速值,中间调用练习一中创建的子VI作为计算过程,从子VI输出的值分别输出至不同的数值显示控件来显示发动机的温度以及当前汽车速度,同时判断当汽车速度超过100时,系统将产生蜂鸣声,报警提示。
三、实验步骤练习一(1)新建一个VI。
(2)在前面板中放置一个温度计控件、一个仪表控件、一个数值输入控件,并修改标签名以及标尺刻度范围。
(3)做出前面板如图:(4)切换至程序框图窗口。
(5)从函数选板中选择相应的函数,拖入程序框图中,并连线,做好的程序框图如图:(6)单击运行按钮,运行VI程序。
调整发动机转速,观察前面板。
(7)修改图标为T/V以表示该子VI输出量为发动机温度T和汽车速度V。
(8)在前面板右上角的图标框中单击鼠标右键,从弹出的快捷菜单中选择“编辑图标”选项,将打开一个图标编辑器对话框。
(9)将编辑框中的缺省图标消除,然后画出所需的图标。
(10)在窗口的图标框中单击鼠标右键,从弹出的快捷菜单中选择“显示连接板”选项。
选择一种连接器。
(11)使用连线工具,在左边的输入连接器端口框内单击鼠标左键,进行连线。
并将右侧的两个接线端口分别与前面板中的发动机温度显示控件和汽车速度显示控件对应连接。
(12)保存文件,子VI创建完成。
练习二(1)新建一个VI。
(2)从控件选板中选择按钮控件并拖入前面板中,并修改标签名。
(3)修改旋转控件数值范围,在快捷菜单中选择“显示项→数字显示”,则调出一个数字显示控件来同步显示旋钮控件当前的值。
用到的Labview知识点: 属性节点、引用句柄、子VI、枚举、条件结构、连线板
用到的Labview知识点:属性节点、引用句柄、子VI、枚举、条件结构、连线板
首先创建三态的子VI:
1.在前面板添加“枚举”控件以及Bool引用句柄,创建布尔引用句柄方法为:先添加“控件引用句柄”,然后右键→选择VI服务器类→通用→图形对象→控件→布尔,并勾选“包括数据类型”;
2.在程序框图添加“属性节点”,并和Bool引用句柄连线;
3.添加“条件结构”,并同“枚举”类型连接,其中“枚举”类型的“编辑项”属性中添加三态:default,run,fault;
4.在每态条件结构中分别定义“数组常量”,然后添加“簇常量”,并在“簇常量”中添加两个“颜色盒常量”,然后将这个“簇常量”整体放入前面定义的“数组常量”,并同“属性节点”连线;
5. 程序框图如下图所示:
6.在前面板中对子VI进行连接线定义:前面板中右键子VI图标,选择编辑图标,此处选取自己喜欢的子VI图标,并勾选显示接线端,退出编辑后,继续右键子VI图标,选择“显示连线板”,开始选取子VI的连线板,这里选择前面板中的“枚举”和“bool引用句柄”这两个输入,至此子VI建立完成,前面板如下图所示:
子VI建立好后,就可以设计一个指示灯,试验一下三态LED的运行情况了,我添加的一个简单VI如下图,这里注意的是要创建指示灯的一个bool引用:
程序建立完成后,就可以运行了,试验结果表明此VI能很好的实现三态LED显示。
labview如何调用子vi
4、我们将此子程序的各个连接端口与主程序中的其他控件的节点按
照逻辑关系进行连接子程序的前面板,在SubVI的图标
上单击鼠标右键,然后在弹出的菜单中选择《设置子VI节点》,在接下来弹
出的对话框中选择《调用时显示前面板》即可,另外《运行时挂起》的意思
labview如何调用子vi
labview如何调用子vi
这种技巧经常用在多个参数顺序测量时,实现波形实时切换,显示当
前测试参数的波形。具体步骤为:在主VI中右键,单击选择VI,即可选择
需要调用的VI(子VI)。
在子VI图标上右键,勾选调用时显示前面板,即可在主VI调用子
VI的时候显示子VI的前面板。
子VI运行是的位置,由子VI的文件下拉菜单中VI属性决定。
LabVIEW子程序的调用方法
1、新建一个VI程序,然后在程序框图的空白处单击鼠标右键,在
弹出的函数选板中选择《选择VI》子选板。
2、在弹出的《选择需要打开的VI》对话框中找到我们需要调用的子
程序。
3、将我们刚才选中的子程序移至程序框图的合适位置,单击鼠标左
是运行的时候暂时停止。注意在调用子VI的时候,需要注意数据流的流向,
即只能向输入端口中输入数据,而不能从输入端口中向外输出数据。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
LabVIEW应用-SubVI的调用
[]摘要当主程序执行某个任务的同时,会跳出waiting...对话框提示用户等待, 直到任务执行完毕waiting...对话框消失.以下主要介绍其实现方法...
[]创建SubVI
创建SubVI
[]调用SubVI
1. 前面板中放下VI 引用句柄: 引用句柄>>VI 引用句柄;
2. 前面板右击VI 引用句柄,在选择VI 服务器类下左击浏览,选择你刚刚创建的SubVI;
3. 程序框图中放下打开VI 引用: 右击VI 引用句柄>>应用程序控制面板>>打开VI 引用;
4. 将VI 引用句柄连接到打开VI 引用的类型说明符端;
5. 将刚刚创建的SubVI 所保存的路径连线至打开VI 引用的VI 路径端;
6. 程序框图中放下属性节点; (同[]调用SubVI 步骤3)
7. 将打开VI 引用的VI 引用端连线至属性节点的引用端;
8. 单击属性节点的属性>>前面板窗口>>打开,并右击FP.Open 将属性转换为输入;
9. 程序框图中放下布尔真常量并连线至FP.Open;
10. 程序框图如下:。