收藏 分享(赏)

LabVIEW 编程思想(第2版)第二部分.doc

上传人:weiwoduzun 文档编号:2892317 上传时间:2018-09-29 格式:DOC 页数:158 大小:17.30MB
下载 相关 举报
LabVIEW 编程思想(第2版)第二部分.doc_第1页
第1页 / 共158页
LabVIEW 编程思想(第2版)第二部分.doc_第2页
第2页 / 共158页
LabVIEW 编程思想(第2版)第二部分.doc_第3页
第3页 / 共158页
LabVIEW 编程思想(第2版)第二部分.doc_第4页
第4页 / 共158页
LabVIEW 编程思想(第2版)第二部分.doc_第5页
第5页 / 共158页
点击查看更多>>
资源描述

1、第 6 章 应用程序控制 VI 和函数前面我们曾谈到过控件的属性和 VI 的属性,但是那些属性都属于它们的静态属性。这些静态属性一般是在程序设计过程中通过属性对话框来进行修改和设定。一旦程序运行,即便是在开发环境下运行,我们也无法再进行相应的改动和设置。实际上,有时侯我们期待在程序的运行过程中动态的修改某些参数或属性。比如按键开关的灰化、LED 指示灯的颜色改变等等。LabVIEW 为适应这样特殊的需求,特地给出一些动态控制控件和 VI 的属性节点和方法节点。这些节点的引入可以大大丰富和增强应用程序设计中的灵活性,比如打开 VI 的引用动态的调入 VI、使用 VI 脚本来设计 VI 等等。应用

2、程序控制 VI 和函数这些节点在程序框图下,选择:函数编程应用程序控制中可以看到,参见下图。图 61 应用程序控制 VI 和函数6.1 属性节点和调用(方法)节点属性是 VI、对象或应用程序的特性。属性节点被用于获取及设置 VI、对象或应用程序的属性。方法是 VI、对象或应用程序的操作。调用节点被用于在 VI、对象或应用程序上执行操作(方法)。6.1.1 创建属性节点和调用节点创建属性节点和调用节点的方法很简单。在程序框图中,鼠标右键单击空白处,在弹出的快捷菜单中选择:函数编程应用程序控制将属性节点或调用节点拖拽到程序框图中即可,结果参见下图。图 62 放置在程序框图上的属性节点和调用节点此时

3、放置在程序框图上的属性节点和调用节点是默认状态下隶属于应用程序(App)的节点。上图中这些节点没选择属性和方法还不能正常使用(程序运行箭头断裂标志编译没有通过)。在实际的使用中,属性节点和调用节点往往还需要配置引用(后面将介绍)和错误簇的连接。实际应用情况参见下图。图 63 带有引用和错误簇的属性节点和调用节点利用引用和错误簇的连接,使得属性节点和调用节点都具备了支持数据流运行机制的能力。所以我们在编程时应该尽量利用这点,满足图形化语言数据流编程和运行的要求。还需要注意的是:对于不同类别的使用(App 、VI 或控件等),其引用是不同的。事实上,这两个节点都属于公用节点函数(默认状态 App)

4、。如果选择类别设置可以用于多种地方,比如 DAQmx、VISA 等等。若要选择其它类别,可以用鼠标右击属性节点,在弹出的对话框中可查看到:选择类(可选择多个类别)VI 服务器应用程序所以在上图中可以看到 App 的标识,但具体属性还未确定。参见下图。图 64 为属性节点选择其它的类别同理,用鼠标右击调用节点,在弹出的对话框中可查看到:选择类VI 服务器应用程序所以在上图中可以看到 App 的标识,但具体方法还未确定。参见下图。图 65 为调用节点选择其它的类别下面简要介绍不同类别的属性节点和方法节点。6.1.2 应用程序(App)的属性和方法应用程序属性被用于获取及设置应用程序的一些特性。当前

5、我们可以直接选择应用程序的属性,因为当前的属性类别就是应用程序。鼠标右键单击属性节点,在所弹出的对话框中选择:选择属性(即可选择多个应用程序的属性)操作系统(下图所显示的样式)版本号其实可以有多种选择,这里只是演示属性节点选择的方法,参见下图。图 66 应用程序(App)的多种属性当前我们还可以直接选择应用程序的方法,因为当前的类别就是应用程序。鼠标右键单击调用节点,在所弹出的对话框中选择:选择方法置于最前其实可以有多种选择,这里只是演示调用节点选择的方法,参见下图。图 67 应用程序(App)的多种方法节点如此众多的应用程序属性和方法,我们在实际应用中使用过那些呢?实在的讲,我本人几乎没有使

6、用过这些节点。主要是没有理解这些属性和方法的内涵和用途。其实,图形化语言的学习主要靠阅读他人的例程,但是真的我们很难看到使用这些节点的程序例程。如果期待对此有更多的了解,请参考1 p203。当然,如果你真的理解这些节点的应用,会对程序设计提供很大的帮助。6.1.3 VI 的属性和方法或许在我们的程序设计中,使用更多的是 VI 的属性和方法。获得 VI 的属性和方法需要首先确定类别。鼠标右键单击属性节点,在弹出的快捷菜单中选择:选择类别VI 服务器VIVI ,此时我们可以看到原来属性节点中的 App 已经被 VI 所代替,参见下图。图 68 VI 的属性节点(还没有确定属性)这是还没有确定属性的

7、 VI 属性节点。选择属性的方法是:鼠标右键点击该节点在弹出的快捷菜单中选择:选择属性就可以看到 VI 所有属性的内容,参见下图。图 69 VI 属性的全部内容VI 的方法选择与属性的选择相类似,这里就不重复了。现在只给出 VI 方法的全部内容,参见下图。图 610 VI 方法的全部内容例 61 最实用的方法之一:默认值:全部控件重新初始化为默认值如果我们的程序框图中有许多数值控件或图形控件,我们希望在程序运行前将这些控件值全部初始化为默认值。我们可以使用 VI 方法中:默认值:全部控件重新初始化为默认值的方法。坦率的讲,我此前是一个控件一个控件的进行初始化(在初始化状态下)。在看到天下会论坛

8、中12ExpiredCLAD 的点评后,才发现这个方法更简单有效。参见下图。图 6 11 VI 方法,默认值:全部控件重新初始化为默认值例 62 如何设定控件的默认值上面谈到了控件的默认值,现在谈谈如何设定控件的默认值。具体操作如下:在前面板或程序框图上选择工具栏中选择:编辑当前值设置为默认值(M)然后可千万别忘了保存这个 VI。保存后当再次打开这个 VI 时,控件的当前值值即为默认值。6.1.4 对象的属性和方法我们认识了应用程序的属性和方法,也认识了 VI 的属性和方法。现在来介绍对象的属性和方法。所谓对象这里所指的是控件,关于 LabVIEW 对象更深入的探索参见 1 p168。如果在程

9、序框图中已经放置的基本属性节点,创建控件的属性就很容易。鼠标右键单击属性节点选择:连接至窗格选择具体控件名即可,参见下图。图 612 关联控件的属性控件的属性还可以用鼠标右键直接点击控件,在弹出的快捷菜单中选择:创建属性节点这两种方法创建的控件属性参见下图所示。图 613 控件属性(没有确定的属性,但已经包括数据类型)具体属性选择,鼠标右键单击属性节点在弹出的快捷菜单中选择:选择属性即可以查看到数值控件的所有属性,参见下图。图 614 数值控件常用属性(截图不全)对象的方法创建与属性节点相同,这里仅给出数值控件的一些方法,参见下图。图 615 数值控件的全部方法关于对象的属性节点和方法节点就基

10、本介绍这些。下面我们针对对象的属性节点的一些特性做更深入的探索。6.1.5 对象的属性的一些深入探索获得对象的值我们知道,数值控件被用来纪录、存放数据,通过创建局部变量可以获得数值控件中的数据。现在,通过数值控件的属性:值;也可以获得数值控件的数据。也就是说:我们有两种方法:局部变量、属性节点都可以获得数值控件的数据。它们之间有区别吗?首先,我们要说明的是:无论局部变量的创建还是属性节点的创建,都必须通过特定的控件(关联到具体对象)来实现,参见下图。图 616 数值控件、数值控件的属性和局部变量下面在比较它们之间的其它特点,参见表一。表 1局部变量1)内存局部变量实质就是对“ 输入控件、显示控

11、件”中数据进行复制(copy),所以要占用内存。当为数组建立多个局部变量时,会占用大量的内存。而对局部变量的操作行为是:读数据(Read)或写数据(Write )2)执行速度由于局部变量是对内存进行直接读、写操作,所以它的执行速度很快(约快 1000 倍以上)。3)数据竞争局部变量容易导致数据竞争,很多 LabVIEW的书籍都介绍了这方面的例子。原因是局部变量破坏了数据流的工作方式。这也正是 LabVIEW 及许多书籍中强调的“慎用” 本地变量的原因。属性节点1)内存属性节点实质上是对“输入控件、显示控件”中数据进行查询或置入,不会占用内存。因为在部件创建时已经为此参数分配好了内存。而对属性节

12、点的操作行为是:查询(Query)数据或置入(Set)数据。2)执行速度相对于局部变量而言,属性节点的执行效率是很低的,或者说更占用 CPU 的资源。3)数据竞争属性节点可以通过“错误簇” 来引导数据流,所以避免了发生数据竞争现象。注意,当属性节点的错误簇没有使用(与其它 vi 相互连接),同样可能会导致数据竞争现象发生。通过上面的比较,现在我们能够理解控件类似一个容器的比喻。使用属性节点要不断的打开这个容器并为它赋值,所耗费的时间较多。而使用局部变量则是对内存中数据的直接读或写,所以执行速度很快完成。关于对象执行速度的另一种说法是:执行线程。关于执行线程LabVIEW 的执行系统可参见下图。

13、图 617 LabVIEW 执行系统示意图LabVIEW 的执行系统就是对已编译后的 VI 的程序代码,按运行处理需要进行作业区的管理和调度分配。LabVIEW 2010 共设有 7 个执行系统,分别是: 用户界面 标准 仪器 I/O 数据采集 其它 1 其它 2 与调用方相同有资料将定时循环也列为一个执行系统。对于每个 VI 我们都可以通过 VI 的属性设置,将不同的 VI 分配到不同的执行系统中去执行。具体操作是:文件VI 属性执行设置首选执行系统,参见下图。图 618 VI 的执行系统选择通常所创建的 VI 其默认执行系统是:与调用方相同。现在我们将做试验的“ 属性和变量.vi”的执行系

14、统选择为:用户界面。此时属性节点的执行时间与表 1 对比,其执行时间仅仅减少了约 1(而其它执行系统的执行时间都与表 1 相同,并没有任何改善)。可见执行系统的设置的改变并没有显著的解决问题。至少我们没有发现修改线程所带来的更大影响。看另一项试验,对属性节点写入常数,测试结果得到明显的改善,执行时间仅为原来的 25,参见下图。图 619 仅写入常数改善了执行速度(仅为原来的 25)我个人理解可能还是在读“ 循环计数端 N”的数值时,花费了更多的时间。下面的试验结果证明了这个观点是对的,参见下图。图 620 控件值直接传递给属性(相当于常数)改善执行速度最后我们再看一个试验,利用属性节点将控件的

15、值读出后再重新写入。图 621 属性节点的读出再写入对比不同的试验结果,不难发现,控件值的读出和写入时间是基本相同的。从“循环计数” 端读值要花费更多的时间。6.2 引用 操控对象的钥匙上一节我们讨论了如何创建应用程序、VI 和对象等的属性节点和调用节点,同时也看到了这些节点的丰富程度,当然也非常期待能够在程序设计中使用这些节点。问题是在 LabVIEW 中如何操控访问这些节点呢?大概在 LabVIEW4.0 中,在仪器控制中就使用了属性节点。到 LabVIEW5.0 属性节点被归结到 VI服务器部分,并为许多对象提供了属性节点和调用节点。同时提供了一种对这些节点进行操控的机制,就是通过“引用

16、”来操控访问这些属性节点。6.2.1 引用的基本概念引用是 LabVIEW 中的一个非常重要概念,它类似于一个指向对象的指针。这里所说对象的概念比之前对象的概念得到了延伸。LabVIEW 中的应用程序、VI 和对象等等都应该视为图形化语言中的对象,对象不再单单用来针对控件。也就是说,应用程序、VI 和控件等等都可以通过引用来实现操控。面向对象的 Java 语言(包括 C+)也采用了引用的概念。尽管 LabVIEW 并不是纯面向对象的语言,但是引用的概念与面向对象的 Java 语言基本相同,引用都被用来作为操控对象的钥匙,或者说是操控对象的标识符(一种特殊的数据类型)。需要注意的是:面向对象的编

17、程语言,通过程序设计可以创建新的对象或为对象创建新的属性和方法(不断的完善所创建的对象),并通过引用来操控对象。可是在 LabVIEW 图形化编程语言中,我们只能通过引用来操控和使用对象所固有的属性和方法。有人曾这样比喻过13 :引用和对象之间的关系,就好比电视机(对象)和遥控器(对象的引用)之间的关系一样。只要你手上握有遥控器,便可以控制电视机。若要改变电视机的频道或音量的大小,操纵遥控器即可。实质上,就是通过引用(遥控器)来间接的控制电视机(对象)并改变它的工作状态。如果你想在房间里走来走去,又不想失去对电视机的控制,只需携带遥控器就行,不必背着笨重的电视机。由于建立了这种引用机制,对象中

18、的许多属性和方法就会被我们在程序设计中得到广泛的应用。而作为图形化语言的提供者 NI,只需不断的提供和改进这些对象的属性和方法来提高图形化语言应用程序设计的灵活性和实用性。6.2.2 获得引用的方法之一:创建如何获得操控对象的钥匙,也就是如何获得对象的引用。其实,获得引用的方法之一就是创建。创建的基本概念是:所要操控的对象必须存在于当前的程序中,否则不可创建引用。创建的具体操作是:在程序框图上,鼠标右键空白区,在弹出的快捷菜单中选择:函数编程应用程序控制VI 服务器引用它实际上是一个图形化的通用引用,并没有指向任何对象。参见下图。图 622 VI 服务器引用将 VI 服务器引用拖拽到前面板上,

19、它变成一个指向对象的引用(实例化),它的默认状态是:本VI。参见下图。图 623 连接到其它对象(创建其它对象的引用)这里请注意:因为本 VI 是已经存在的,所以我们可以通过创建获得它的引用。当然通过快捷菜单还可以选择设定为其它对象的引用,参见上图。比如也可以选择:本应用程序的引用或窗格中其它控件的引用,参见下图中的具体引用实例。需要注意的是:这些对象必须真正的存在(关于非实例化的引用句柄后面我们会谈到)。图 624 不同对象的引用实例(都是已存在的对象)当控件作为对象时,它的引用更容易创建,鼠标右键点击程序框图或前面板上的控件,在弹出的快捷菜单中选择:创建引用即可创建一个控件的引用(参见上图

20、中的“数字”引用)。现在,有了对象的引用就可以通过引用来操控不同的对象了。参看下面的例子。例 63 查看本应用程序的多个属性利用本应用称序引用查看本应用程序的多个属性,程序参见下图。图 625 通过引用查看本应用程序的多个属性通过这些属性节点看到我们所使用的操作系统、多核处理器的数量等一些系统特性。6.2.3 获得引用的方法之二:打开与关闭引用我们上面所谈的对象都是已经存在当前程序中的对象,所以可以通过创建的方法来获得这些对象的引用。还有一些对象并没有存在于当前的程序中,获得它们的引用的方法就是采用打开 xx 引用的函数,包括打开应用程序引用和打开 VI 引用。具体操作是:在程序框图中,鼠标右

21、键单击空白处,在弹出的快捷菜单中选择:函数编程应用程序控制打开应用程序引用或打开 VI 引用,并拖拽到程序框图中,参见下图。图 626 打开应用程序引用和打开 VI 引用,最后要关闭引用关于打开应用程序引用和打开 VI 引用的具体应用实例后面我们会谈到。如果我们打开了应用程序或 VI 的引用,使用后必须关掉该引用。关闭该引用的方法是使用“ 关闭引用”函数。具体操作是:在程序框图中鼠标右键单击空白处,在弹出的菜单中选择:函数编程应用程序控制关闭引用将关闭引用函数拖拽到程序框图中即可。打开引用完成对应节点的操作后,关闭该引用是一个良好的编程习惯。这样可以避免内存的泄露和浪费更多的系统资源。对于前面

22、谈到的那些所创建的引用,我个人理解是无须关闭的,似乎 LabVIEW 将会自动关闭这些引用。比如 VI 关闭后,这些引用随着对象的消亡会自动消亡,VI 导入后会自动获得这些引用。许多 NI 所提供的例程也都是这样使用的。对于打开的引用一定要注意进行关闭操作。下面我们看一个打开应用程序引用的实际应用例子,参见下图。图 627 打开和关闭引用在这个例子中我们应该注意到,如果输入空字符串,该函数将打开本应用程序的引用。下图中的操作可以给出证明。图 628 两种引用是相同的6.2.4 引用句柄上面我们通过两种方法获得了对象的引用。在图形化程序设计中,仅有这些方法还是不够的。比如我们有一个主 VI 的程

23、序,其界面上有一个字符串显示控件,我们需要对字符串文本进行一些设置,通过属性节点可以实现这些操控,参见下图。图 629 使用属性节点占面积很大这样的程序代码给我们带来了很多麻烦,至少是占用程序框图中的很大面积。当然我们可以将这部分代码转换成一个子 VI,减少占用面积、简化程序代码。创建的子 VI 命名为:字体设置.vi。参见下图。图 630 主 VI 与字体设置子 VI在字体设置.vi 中我们看到使用了一个引用句柄(字符串)。在主 VI 中看到了对象的引用代替了引用句柄的使用方法。引用句柄是一组控件(程序框图上是引用句柄端子),它包括了很多的对象。在前面板上,鼠标右击空白处,在弹出的快捷菜单中

24、选择:控件新式(经典)引用句柄参见下图。图 631 丰富的引用句柄引用句柄主要用来引导 VI 之间的引用传递(传引用),它的功能实际上满足了 VI 层次化、模块化设计的需求。引用句柄本身并没有什么实际作用,只起到了引用标识符的作用,包括程序框图中引用句柄的端子。引用句柄最终只有被实例化后,才能真正称为引用。所以,引用句柄也可以称为:非实例化的引用。下面我们就围绕 LabVIEW 中三个最终要的对象(应用程序、 VI、控件)来说明引用的实际应用。6.3 应用程序引用通过创建的方式所获得的引用是本应用程序的引用(我们称之为:实例化引用,简称:引用),它只可以操控本应用程序的属性节点和调用节点。对于

25、其它应用程序还需采用其它办法。6.3.1 打开应用程序的引用前面我们也已经看到,VI 服务器还可以通过打开应用程序引用函数来操控另一台计算机上的应用程序(注意:应用程序指的是 LabVIEW 程序)。当时,我们对打开应用程序引用函数没有做更多的讨论和说明,下面我们看一下它的实际使用方法。参见下图。图 632 打开应用程序引用函数的使用方法这里:机器名待打开应用程序的计算机地址。如果为空,则打开本应用称序的引用。端口号或服务器名称(3363)VI 服务器的端口号。LabVIEW 中的默认值为:3363。超时等待默认值为:1 分钟。采用这种方式所获得的应用程序引用就是应用程序引用的实例化,它所获得

26、的引用就是某应用程序的引用。实际上若想在本计算机上实现通过引用来操控另一台计算机上的应用程序还要有一些基本工作需要做。下面就一步一步来操作。6.3.2 获得相关计算机的网络地址现在我们有两台计算机,一台运行 Apple 操作系统,并已经安装了苹果版的 LabVIEW 2009SP1;而另一台计算机则运行 Windows 操作系统,并安装了 LabVIEW 2010SP1。这两台电脑通过 WiFi 无线网络进行网络连接。Apple 电脑做服务方,Windows 电脑做客户方。现在,首先查看两台电脑的网络参数,Apple 电脑的网络参数设置参见下图所示:图 633 Apple 电脑的网络设置(地址

27、 10.0.1.3)我们需要记住这个地址:10.0.1.3下面再查看 Windows 电脑的网络配置情况。参见下图。图 634 Windows 电脑的网络设置(地址10.0.1.25)我们也需要记住这个地址:10.0.1.25下面再查看各计算机 VI 服务器的设置情况。6.3.3 获得相关计算机 VI 服务器的设置下面我们再分别看看两台电脑上的 LabVIEW VI 服务器的设置情况。对于 Apple 电脑,在 LabVIEW 2009SP1 开发环境下,从工具栏选择:ToolOptionsVI Server 参见下图。图 635 Apple 电脑的 VI Server 的设置情况这里注意:T

28、CP/IP 的 Port 3363其它无须进行设置(就不截图了)。点击“OK“完成设置。下面在看看 Windows 电脑的设置情况。同样,在 LabVIEW 2010SP1 开发环境下,从工具栏选择:工具选项VI 服务器,参见下图。图 636 VI 服务器的设置情况端口设置与 Apple 电脑一样,都是 3363。然后滑动垂直滚动条继续往下查看,参见下图。图 6 37 VI 服务器的设置情况(续)服务方地址需要设定需要将 Apple 电脑的地址设定在这里。其它无须设定,点击确定按键即可完成 VI 服务器的设定工作。剩下来的工作就是在 Apple 电脑上设计一个程序。 6.3.4 应用程序引用

29、实例下面我们在 Apple 电脑上设计一个 VI,名字为:AppleLV2009SP1.vi。程序框图和运行结果参见下图。图 638 在 Apple 电脑上查看另一台电脑上的信息(Windows 电脑信息)通过引用我们在 Apple 电脑上查看到另一台 Windows 电脑上应用程序的基本信息。现在我们将上图中的地址设为空,在看看 AppleLV2009SP1.vi 程序的运行结果,参见下图。图 639 地址为空时等效打开本应用程序的引用( Apple 电脑信息)当地址为空时,引用指向本应用程序,查看到本应用称序的基本信息。此时相当于本应用程序的引用,证明如下图所示。图 640 两个引用是相同

30、的6.4 VI 引用同样,我们通过创建的方法所获得的 VI 引用,只针对本 VI 的操控。使用打开 VI 引用函数可以打开其它 VI 的引用(包括本机或其它计算机上 VI 的引用)。现在我们就看看打开 VI 引用函数。6.4.1 打开 VI 的引用通过打开 VI 引用函数,我们就可以操控其它的 VI。具体操作是:在程序框图中,鼠标右键空白处,在弹出的快捷菜单中选择:函数编程应用程序控制打开 VI 引用将打开 VI 引用函数拖拽到程序框图中,参见下图中红色框内的部分。图 641 通过打开 VI 属性来打开全局变量 .vi 的前面板运行上图中的程序,结果会在桌面上打开一个全局变量(已存在)的前面板

31、,且令打开的前面板居中显示。通过这个实例是想说明,使用打开 VI 引用函数不仅可以打开 VI,还可以打开全局变量引用以及自定义控件引用(指定自定义控件的路径即可)。注意:打开 VI 引用函数需与关闭引用函数配对使用。我们再看一个打开另一台计算机上 VI 的例子。在 Windows 计算机的 C 盘下,已经放置了一个名字为: OK.vi 的 VI。现在我们希望通过另一台Apple 电脑来打开它。Apple 电脑下设计的程序框图,参见下图。图 642 打开另一台计算机上的 VI1、通过打开应用程序引用打开另一台计算机上的应用程序引用2、通过应用程序的引用再打开 VI(OK.vi)的引用3、通过 V

32、I 的方法节点,打开 OK.vi 的前面板,并使其居中4、关闭引用程序在 Apple 电脑上运行,我们会看到另一台 Windows 电脑上的 OK.vi 突然被打开,并居中显示。如果你不断的打开和关闭这个 VI,你的同事真的可能会感到莫名奇妙。这有些象黑客,前提是那台计算机的 VI 服务器允许你访问(它的 LabVIEW 必须是打开的)。6.4.2 VI 的动态调用通常在我们编程过程中,放置在程序框图中的 VI 都属于 VI 的静态调用。这些静态调用的 VI 当我们打开引用程序时,所有静态 VI 都会导入内存()包括它们所使用的子程序。如果有的静态 VI 占用内存很大且又不经常使用,我们可以采

33、用 VI 动态调用的方法,也就是在该 VI使用时调入,执行完成后自动清除该 VI。这样就可以解决内存被大量占用的问题。现在,我们设计一个程序命名为:查看内存中的 VI.vi。它的程序框图和前面板以及运行结果,参见下图所示。图 643 查看内存中的 VI.vi 的前面板、程序框图和运行结果从该程序的运行结果来看,内存中只有一个 VI,也就是我们现在所使用的查看内存中的 VI.vi。假如我们随便打开一个范例 VI,TDMS 快速读取数据(时域),查看结果参见下图所示。图 644 竟包含 169 个 VI保留查看内存中的 VI.vi 这个 VI,以后用来查看内存中的 VI。6.4.3 动态调用 VI

34、 方法之一通过引用节点调用使用通过引用节点调用 VI,可以实现 VI 的动态调用。但是,需要注意是它所调用的 VI 必须是严格类型 VI。关于 VI 的类型我们在 2.6.2 节已经做过介绍。我们还是先看看这种动态调用的方式,假如我们有一个字体设置.vi,参见下图。图 645 字体设置.vi (我们前面见过)现在我们通过引用节点来调用这个 VI。参见下图。图 646 通过引用节点动态调用字体设置.vi(运行后)我们期待在 VI(通过引用节点调用 VI)的前面板上显示版本,上图中通过动态调用字体设置.vi 来实现。1、打开 VI 引用给出需要被调用字体设定.vi 的路径将字体设定.vi 拖拽到“

35、 类型说明符 VI 引用句柄“ 处,建立连线板关系(会同时出现在通过引用节点调用中)2、连接通过引用节点调用创建版本字符串的引用,连接到“通过引用节点调用”的连线端3、关闭引用这种动态调用的数据流运行机制将是执行完被调用 VI 后结束。这种动态调用可以实现与被调用 VI 间的数据交换,这种方式更适用于某些数据的计算处理,比如误差拟合计算、滤波器设计、频谱分析等插件。通过运行查看内存中的 VI.vi 其结果参见下图所示。图 647 内存中只有两个 VI,动态调用的 VI 并不在内存中通过查看,我们发现内存中只有两个 VI,而被动态调用的 VI 并不在于内存之中。 6.4.4 动态调用 VI 方法之二通过调用节点调用动态调用的另一种方式就是通过调用(方法)节点来实现 VI 的动态调用。我们先看看这种动态调用方式的基本特点。适合于任何类型的 VI可以用来控制程序的运行流程实际上在程序设计中这种动态调用方式更常见。下面我们就分别来进行讨论。主从,方式的动态调用主从,方式的运行机制是:首先主 VI 动态的调用从 VI,即打开从 VI 的前面板并运行从 VI,关闭动态调用的参考(从 VI 一直运行),然后通过方法节点关闭主 VI。这种运行方式意味着整个程序运行的控制权将从主 VI 通过动态调用后转交给从 VI。这种情况多用于各程序之间的连接调用。

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 企业管理 > 经营企划

本站链接:文库   一言   我酷   合作


客服QQ:2549714901微博号:道客多多官方知乎号:道客多多

经营许可证编号: 粤ICP备2021046453号世界地图

道客多多©版权所有2020-2025营业执照举报