这是我添加入LabVIEW 8.20的又一个新特性。

        请查看一下在File I/O > Advanced File Function 函数子板中的6个新VI。
        其中一些VI其实已经在之前的LabVIEW版本中自带了,但是我讲它们放在一个函数板上,希望人们能够找到它们并使用它们,我 们来看一下它们的用处:

Check if File or Folder Exists.vi ———输入一个文件或者文件夹路径,返回一个布尔值判断该文件或文件夹是否存在。

Recursive File List.vi ——输入一个文件夹或者LLB的路径,会返回该目录或LLB的所有内容……如果输入是文件夹,那么该VI还会返回所有子目录的内容,作为递归。

Compare Two Paths.vi ——给予2个路径输入,VI会返回一个True/False值,作为路径B是否与路径A相关的评判,并且会输出一个两者之间的相对路径。

Get File Extension.vi — 输入一个路径,VI会返回路径的文件后缀名,以及在后缀名前的文件名。

MD5Checksum File.vi — 返回一个文件的MD5校验码,这个我在之前的技巧中讨论过,不过这次是在官方的LabVIEW 8.20中公布。

Generate Temporary File Path.vi — 生成一个唯一的路径,这样你可以使用其它File I/O的VI在你的系统中创建一个临时目录。

我希望LabVIEW开发者们能够觉得这些VI好用。

 

        这周是LabVIEW 8.20我新添加的特性第二部分。

        我记得之前曾经想过,如果我可以在一个全局或者控件VI上右键,然后选择Advanced>Hide Control,那么就完全没有办法再去重新显示这个控件了,除非写一个VI去做到这点。
         而在LabVIEW 8.20中,你可以在一个全新的菜单选项中做到这点,只需要选择Edit>Show Hidden Controls and Indicators in a Global or Control VI, 那么所有隐藏的控件都会显示出来,并且也会有一个总结对话框显示所有控件重新显示的列表。

         这个菜单选项在常规VI中还无法实现,但是你依然可以使用这个特性。只需要打开[LabVIEW]\project\ShowHidden Core.vi,指定你的VI名,然后运行,那么所有的隐藏控件也都会被重新显示。

 

        在今天上午的NI Week 2006中,LabVIEW 8.20正式发布。

        下面几周我会介绍一些我个人在LabVIEW 8.20中添加的新特性。这些特性是那种能够让人觉得非常酷的感觉,但也不会大到需要放在PPT上作为一个主要特性。

         作为开始,我给大家介绍一下,在任何打开VI的Edit下拉菜单上你可以看到Remove Breakpoints from Hierarchy Utility的选项。选择这个菜单选项可以将当前VI的所有断点直接移除,包括该VI的所有子VI 的断点。
          同时会有一个总结对话框会显示出每个VI有多少断点被移除。

 

待整理........

 


        本周的一个小技巧,我突然意识到其实之前我从来没有真正地编辑页面中对
Ring/Enum 进行过编辑。你知道,当你右键点击一个Ring或Enum数据,并选择“Properties…”,然后进入Edit Items的页面。我所谓的从来不这样来使用,是因为我总是在输入内容时使用Shift+Enter组合键。如果你在编辑Ring/Enum空格键的文本 内容时,你可以按Shift+Enter键,这样它就可以创建一个新的条目,让你继续编辑。这是我所知道的最快捷的方式来添加Ring/Enum控件的内容的。

 


        直到上周有人为我介绍,我才知道今天要讲的这个技巧。你可以将一个字符串连在
Case结构的选择项中,从而将一个Case结构转变为“不分大小写判断”(“
Case Insensitive Match" 有一个选项)模式。
        在过去,我一般会在进入Case结构之前加一个“To Lower Case”函数在我的程序中……显然这是不需要的。

 


        你有没有使用过
Implies这个函数VI?它在布尔类型的函数面板上。


        每次我想写一个条件代码需要满足如下要求:如果
X是True而Y是False,那么做一些事情;如果是其它情况,那么做其它事情。当我想写这样的代码时,我经常会用到Implies函数。

 

待补充!

 


        这个技巧我在
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,我知道要实现这个其实很容易,但是我想把这个留作作业给读者。

 


       你有没有注意过当你右键按下
LabVIEW中的子VI时出现的新的选项“Call Setup”?这确实是一个很好的技巧,可以让你的代码更为干净,并且加快你加载VI的时间。


      这两个程序中的代码都完成了相同的功能。在第二个程序中,我只是简单地在程序框图中将子
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版本中,所有 用户都必须经历这个……