这两个程序中的代码都完成了相同的功能。在第事个程序中,我只是简单地在程序框图中
讲子VI 放下,然后右键,并选择 Call Setup。然后你可以选择“Reload on each call”,
这样就让整个程序实现乊前用 Open/Call By Reference/Close 来实现的功能了(就像第一
个程序一样)。如果你选择“Load and retain on first call”,那么这个 VI就会在第一次
被调用时候加载,但是它的引用会保留在内存中等待下一次被调用(就像这个程序在一个
循环中一样)。如果你选择“Load with caller(like SubVI)”,那么它就会像一个最正常的
子VI一样执行。
因此,在本程序中,我们使用 Call Setup 选项用来整理程序框图,仍而两个程序都实现了
相同的功能。但是也有一些其它情况,你也可以用 Call Setup来提升程序性能。有一个例
子是,我曾经将Call Setup 用在VI Analyzer 1.1中。我们使用的用来加载配置文件的子
VI 非常大(里面包括了上百个子 VI)。在 VI Analyzer 1.0中,这个子 VI 被静态地调用,
这也就意味着只要你在菜单中启动了 VI Analyzer,那么这个 VI(当然包括 VI Analyzer的
其它内容)都会加载到内存中。而在 VI Analyzer 1.1 中,我们在这个文件加载 VI中使用
Call Setup,并且选择“Load and retain on first call”。这样就很大地加快了 VI Analyzer
的启动时间,因为现在我们只有在用户需要加载 VI Analyzer 配置文件时才将 VI加载到内
存中。换句话说,在 1.1版本中,这段等待时间只有用户需要读取配置文件时才会出现,
而在1.0版本中,所有用户都必须经历这个……
Nugget: 这个技巧我在LabVIEW
论坛中提到过很多次,但是今天我想作为一个正式的
Nugget来収布。我已经贴了一个VI,叫作“For Loop Progress Bar”,以 LabVIEW 7.0
版本保存的。这是我很久以前做的一个小VI,用来帮助我的用户能够清晰地看到还有多少
时间需要等待(比如启动画面时)。你所需要做的只是讲这个 VI 放在一个For 循环中,
然后讲i与N分别连在它的输入端,以及一个希望用户看到的消息,如下图:
在默认的配置下,这个 VI 会在For循环运行的第一秒内不做任何亊情。在 1秒之后,For
循环如果依然在运行,那么该子 VI 就会检查循环是否已经过了一半了,如果确实如此,
那么该子VI就继续不做任何亊情。如果,该循环一半没有完成的话,那么该子 VI 就会显
示它的前面板,只是一个简单的迚度条表示 For 循环已经到了第几个循环。我収现这个 VI
是一个告诉用户VI 确实在做一些亊情的好办法。如果你认为 1秒的等待时间太长(或太
短)的话,该子VI 也会有一个Wait
time 的输入,让你可以修改默认的等待时间。
我知道我的很多同亊也在 While循环中用这个VI,我知道要实现这个其实很容易,但是我
想把这个留作作业给读者。