Picture
大家好!
      对于今天的Nugget,我希望能够引起大家的注意。这就是对LabVIEW8.2 Upgrade Issues 网页所提供的Bug纪录有足够的重视,因为当你从LabVIEW8.0升级到LabVIEW8.20时,
一些潜在问题极可能导致某些程序会出现问题。除了LabVIEW升级说明和LabVIEW发行说明之外,这些信息在一段时间内还是有用的,所以我期待你们尽可能的利用它。如果升级后还遇到了该页没有列出的问题,敬请将问题核查准确后,发布报告到这个论坛上,当然也可以选择你熟悉的渠道来反映问题,以便我们可以为大家提供更多、更有用的升级信息。

Picture
      labview7i说:这个单元的内容是我试着翻译的。
 

Picture
 

       大家新年好!今天的Nugget来自altenbach网友,它为我们指出了一些可以在数值控件的Format and Precision property page上的“Advanced editing mode”选项中使用的很酷的技巧。


        如你所看到的,数值控件的值可以被重新设定显示的方式。当然,一些描述性的文本可以被加到控件上,从而不需要任何冗余的前面板标签。如下图所示,一些数值型控件都被设定为不同的格式来显示数值型控件。每个控件的格式字符串都在右边显示出来了。你可以观察一下底部的“
Distance”以及“Time”控件,这种显示方式可以以一种更为可读的方式显示出来。

 

        今天的小技巧与文件快捷键以及你在LabVIEW中处理File I/O函数时可能遇到的潜在问题。看一下下面的VI,它只是简单地用到了List Folder函数来返回我的C盘的最顶级内容。

      我们来看一下“folder names”这个列表,看到“Shortcut to C.lnk”这行了吗?这是一个我在C盘创建的一个快捷方式。如果你在一个循环中使用List Folder函数来递归列举C盘内容时,这个在文件夹列表中出现的实时可能会发生问题。这个问题在LabVIEW 7.1和之前版本中没有什么很好的方式。但是在LabVIEW 8.0时,我们在File/Directory Info函数中有了一个新的输出。


      看到了这个“
Shortcut”输出了吗,观察一下它是如何输出TRUE的:当检查文件信息为“c:\Shortcut to C.lnk”的时候。因此,现在你的递归操作就不会出现这个问题了。

 

      通常,当我想要设定一个文本标签的边框为透明时,我经常会发生Tab键(或空格键)实现前景与背景色切换操作问题。当然,除了用Tab键来切换之外,你也可以按键盘上的“f”键来改变为只有前景颜色,然后按“b”键切换为只有背景颜色,同时使用颜色选择器。如果你想切换为前后景颜色同时操作时,你就要用到Tab键了。

 

       无论什么时候我第一次启动LabVIEW, 首先第一个我需要修改的默认设置就是Undo历史步骤数。默认值为8,但是我经常将它改为最大的99。对于现在电脑的内存越来越大,如果你增加你的 Undo历史长度,是看不出任何性能上的变化的。你可以在Undo步骤设定(在LabVIEW 8.2中),它位于 Tools>Options>Environment>Maximum undo steps per VI。

 

        今天要讲的一个特性我不经常用到,但是我有时必须用到。如果你在LabVIEW 下按下Ctrl+Shift+B键,那么类浏览器(Class Browser)会启动。这是一个很有用的特性,如果你需要放置属性或者执行节点的话,而不想搜索Property/Method列表的话。你可以浏览一 个特定VI Server Class的所有属性与方法(它也支持其它对象库,比如VISA、Datasocket、.Net等等),你也可以通过名称搜索类的对象库。类浏览器的最酷的一个功能呢个就是,你可以直接在类浏览器的等级树中拖拽属性/方法名到VI程序框图中,这样可以将一个属性/方法通过你的鼠标放在程序中。

 

         当使用自定义探针时,会出现一个问题:他们只会在值更新时才会运行程序框图(例如,当一个值流向一个被探测的数据线上)。这样的话,就有以下两种情况是很难使用自定义探针的:

·
探针的配置:你没有办法实现可以通过交互来设置复杂的配置的控件。例如,如果你写了一个复杂的自定义探针,你可能会在探针上有一个复选框。但是你无法让这个复选框能够控制自定义探针上其它控件的属性,这是因为它只有在值发生更新时候才会运行。

·
数据的探索:例如,你可以讲一段波形放入图表控件中。你可以有单选按钮用来对波形进行不同的滤波,从而可以帮助你看到不同方面的指标,但是在数据更新后改变这些单选按钮并不会改变滤波的种类。

        对于这些情况,你可以使用
XControl。如果你在一个自定义探针上放置一个XControl,那么该控件可以在任何产生XControl事件触发的时候(例如点击、或者鼠标移动等)运行程序。这样就让你将一个主动的行为放入了被动的自定义探针中。

 

        我在一些LabVIEW论坛中看到很多用户很惊奇地发现了一些“隐藏”的菜单或者选项。这周我就介绍一下这几年来我发现的其中一些:

·当使用Array to Cluster函数时,你必须右键点击函数,并选择“Cluster Size”,然后指定你想输出簇的大小。如果你不知道这个的话,你很可能在开发途中吃过不少的亏了。

·
LabVIEW 8.0中的Read from Text File函数有一个右键选项,叫作“Read Lines”。当你选择这个选项时,你连一个值到“count”输入端,该函数会返回一个字符串的数组,数组的每一个元素就是输入字符串的一行。

·
你可以点击或者按下“Step Out”调试函数,从而会在VI暂停时,显示出代码路径,从而让你直接跳到连续执行的任何层次进行调试。

·
很多人都不知道这个,但是在LabVIEW 7.0之后的版本,如果你在一个程序框图对象中点右键,在你右键菜单中有一个选项是显示一个特定的板(通常该显示板会包括对象或者线的数据类型)。例如, 如果你右键点击While循环的边框,你会看到一个“Structure Palette”选项,从而会显示一个Structure板。同样,如果你在一个整型的线上右键,你会得到一个“Numeric Palette”选项。有些情况下,与从最顶端的函数面板开始选相比,用这种方式来得到相关的对象会更快捷一点。
       这是我所想到的一些,虽然我知道还有很多其它的。

 

       如果没有人提醒我的话,我差点已经忘记了这个非常好的LabVIEW 小特性。当一个VI在运行的时候,工具栏上原先的“Font Ring”选项(字体)会变成一个更有用的工具……这是,这个选项会编程当前运行VI的调用链,可以看一下下面的截图……该VI被主VI(Text Report Example.vi)通过多层调用而得。通过点击已变的Font Ring,我们可以看到一个完整的调用栈。

 

       就像我在上周提到的,我最近跟Picture控件交往甚密。有一天,我在调试一个我以为是竞争条件引起的错误很长一段时间,但是最后,我发现我的代码其实是没问题的。出现这种情况主要是因为我对LabVIEW的一个怪癖不甚了解而导致的。

       你是否曾经注意过控件中有一个“Synchronous Display”选项?你可以通过右键点击控件并选择“Advanced”来找到它。当然,我记得8年前我第一次学LabVIEW的时候,我曾经注意过这个选项,我也曾经置疑过这个到底是什么,但是却没有花过时间去好好研究一下。当然,LabVIEW帮助文档对它有个非常详细的解释,并且最终解决了我的问题。

       总的说来,所有的控件缺省都设为Asynchronous Display……换句话说,“Synchronous Display”选项原先是没有被选择的。这也就意味着,当你给LabVIEW控件一个新的值时(通常是通过控件终端或者局部变量),只要能找到机会(比 如,每当用户界面线程得到机会运行时),它就会自动在前面板对象中更新最近的一个值。换句话来说,有一些更新可能从来就没有发生过。但是,如果你选择 Synchronous Display的话,你就迫使LabVIEW在每次值改变时都会立即更新控件。有一种简单的方法可以看到这两者的不同之处,创建一个包含一个运行 10000次的For循环的VI,然后将计数终端连在一个数值显示控件中。运行该VI……可以看到该VI运行得很快;现在右键控件并选择 Advanced>Synchronous Display,再次运行后,你会发现需要更长的时间,这是因为你迫使了LabVIEW在每次值发生改变的时候,去更新一下显示控件。