相信对已经在使用 labview 的人来说,多少都会听过 VI Server 这个名词,到底甚么是 VI Server 呢?简单来说 VI Server 是控制 VI 的一种方式,LabVIEW 是一个物件导向的程序语言,所以可以将 VI 看做是一个物件 (Object),透过属性 (Property) 与方法 (Method) 来控制 VI,实际上在 LabVIEW 中就是可以透过Property Node 与 Invoke Node 来做控制。
在 LabVIEW 环境中,物件的属性可以用 Property Node 控制,例如可以去更改字体的颜色、大小这类型的属性。
而 Invoke Node 则是可以去让物件去执行某个动作,例如将物件的 Front Panel图案转出成图片。
在
LabVIEW Function 选单中的 Application Control 中,如下图所示,即为我们会使用到的 Function。
详细的使用模式如下图,第一步是使用 Open VI Reference 或是 Open Application Reference 来开启物件,这边意味着 VI Server 除了可以控制 VI 之外,也可以控制应用程序 (透过 ActiveX)。第二步可以使用 Property Node 去修改物件的属性,例如 VI Front Panel 的视窗大小,也可以使用 Invoke Node 去执行某个动作,例如让某个 VI 开始执行。等到使用完毕后,可以透过 Close Reference 去关闭这个物件的 Reference,释放掉存储器位置。
讲到这边我们就来试着跑一个范例,来加深对 VI Server 的感觉,这边先做一个最基础的例子,我们将一个原本的 SubVI,改成使用 VI Server 的方式来控制。以下是一个最简单的 SubVI,他的内容如下:
如果使用一般的 SubVI 的方式来去执行这个 VI,我们只要遵守 Data Flow 的程序接线方式即可以呼叫这个 SubVI。
但是如果我们使用 VI Server 的方式来执行这个 SubVI,其程序的流程如下:
1. 给予路径透过 Open VI Reference 开启一个 VI Ref
2. 依序使用 Invoke Node => Control Value => Set 来设定 SubVI 内的接脚值,这边有一个特色,我们是使用 Control 的 Label 来指定要设定资料到哪一个 Control
3. 透过 Invoke Node=> RunVI 来执行 SubVI
4. 透过 Invoke Node => Control Value => Get 来取得计算完的结果
5. 关闭 VI Ref
笔者在这边承认这个范例有糟糕之处,他让大家以为透过 VI Server 来控制 VI反而让程序码变得复杂了,但是相信有部分的人会发现一些细节,在这边一一解释这些特色。
1. 透过 Open VI Reference,我们可以采用指定路径的方式来开启 VI,因此反过来说,程序不需要在一开始就将 VI Loading 到存储器中(一般的 Call SubVI 方式),因此我可以根据我的需求去指定不同路径的 VI 来执行,这种方式称为Plug-In 的呼叫。
2. 在 RunVI 的时候,有一个选项是 Wait Until Done,意思是我们可以在这个Node 去等待 VI 执行完毕后才往后走,也可以选择不等待 VI 执行完毕,就直接往后执行下一个步骤,意思是我们可以利用这个机制,去动态呼叫一些 VI,并且将这些 VI 变成背景程序在计算机中执行。
3. VI Server 的 Property Node 与 Invoke Node 提供了非常多的选项让我们可以控制 VI,做一些平常做不到的行为,简单的做一个 List。
Invoke Node 基本选项
Property Node 基本选项
这个单元简介了甚么事 VI Server,在下一个单元会开始利用 VI Server 来做一些应用,让我们在乎叫 VI 的时候有更多的弹性去做控制,另外 VI Server 的 Open Application 可以让我们去透过 ActiveX 去呼叫其他应用程序,来做各种控制,这也是相当好用的手段。
6