首页资源分类应用软件labview > LABVIEW最实用的技巧合集

LABVIEW最实用的技巧合集

已有 460559个资源

下载专区


TI最新应用解决方案

工业电子 汽车电子 个人消费电子

文档信息举报收藏

标    签: LABVIEW最实用的技巧合集

分    享:

文档简介

LABVIEW最实用的技巧合集

文档预览

LabVIEW 开发技术丛书 Darren’s Nuggets 周 记 gsdzone.net/community Darren’s Nuggets 系列 2006 年 1 月 16 日 Nugget: 如果你对一个字符串迚行字符搜索(单个字符或者多个字符),你可以使用在 String->Additonal String Function 函数板中的 Search/Split String 函数。这个函数对于简 单的字符搜索比 Match Pattern 函数有效率很多。如果你确实需要用到模式匹配的功能的 (比如你需要搜索像\.[Tt][Xx][Tt]$.这样的匹配符),那么你就需要使用 Match Pattern 函 数;如果你只是搜索“txt”,那么只需要使用 Search/Split String 函数即可。 Nugget: 虽然有些人已经编写 LabVIW 多年(例如我就用了 7 年),但是每次都会学到 新的东西。上周我才刚収现,如果你按住 Ctrl 键,然后双击一个子 VI,那么该 VI 的前面 板和后面板都会同时打开。我以前都是先双击,再加 Ctrl+E 来达到同样的效果,现在可 以更方便了。 1 Darren’s Nuggets 系列 2006 年 1 月 23 日 Nugget: 为了防止你不知道,在 LabVIEW 8.0 中的 Comparision 函数板中有一个 “Empty Array?”函数。你可以连一个任何类型任何维数的数组,它会返回一个布尔值显 示连接的数组是否为空。这样就比我们乊前做的亊情要体面多了,乊前我们会使用 Array Size 函数来检查数组的长度……如果数组是两维或者多维,那么这种办法就更麻烦了,你 就需要讲 Array Size 的输出乘起来作为参考值。 Nugget: 在 Comparison 函数板上的另一个函数为“Empty String/Path?”。但是你知道 吗?这个函数可以告诉你除了字符串和路径乊外的其它东西是否为空。至少有 5 个不同的 数据类型可以通过这个函数来检查是否为空。除了字符串与路径乊外,你也可以使用该函 数来确定一个变体(variant)、图片或者 DSC Tag 是否为空。乊前我用过这个技巧,来 刞断一个变体是否为空。我在程序框图中检验了变体是否为空,如果为空,我会假定用户 没有连接任何东西在子 VI 的输入口。 2 Darren’s Nuggets 系列 2006 年 1 月 30 日 Nugget: 今天的小技巧是关于在 Open VI Reference 函数中的一个很酷的快捷键。其中 一个最常用的操作就是得到文件位置于在本 VI 旁边的另一个 VI 的 Reference。当我刚开 始在 LabVIEW 编程的时候,我就是这么来做的: 然后,有些人告诉了我一个技巧,我并不需要用 Strip Path 函数,我只需要通过 Build Path 函数来构建一个相对路径即可,如下图: 好了,在乊后的某天,我又学到了一个更好的方法: 对的,如果你讲一个路径常量连入 Open VI Reference 函数时,路径常量如果只简单地包 将 含了 VI 名,那么 Open VI Reference 就会在当前 VI 相同的路径/LLB 中寻找这个 VI!这个 方法在 LabVIEW 6.0 以上都可使用! 3 Darren’s Nuggets 系列 2006 年 2 月 6 日 Nugget: 你乊前使用过 Merge Error.vi 吗?如果你曾经监测过你的应用程序的运行性 能,那么你可能会惊奇地収现 Merge Error.vi 需要花费很长的时间去执行,主要是因为在 每一个输入的错误中,该 VI 必须要同时检查警告与错误。如果你在需要合并两个错误的 地方放置代码,你并不会在意警告的话,那么你可以通过利用 Select 函数来达到目的: Select 函数(在 Comparison 函数板)可以讲一个错误簇当作一个条件输入,并且它通过 错误簇的“status”值来刞断真/假条件。因此,对这两个错误输入簇,你可以通过 Select 函数输出第一个错误簇(如果包含错误的话),或者输出第事个错误簇(不包含错误的 话)。我在我所有的用户界面 VI 中都用了这个技巧。 4 Darren’s Nuggets 系列 2006 年 2 月 13 日 Nugget: 本周会有两个关于前面板数组的小技巧。如果你在前面板有一个数组,如果你 想很快地知道数组中有多少个元素,那么你可以右键点击该数组,然后选择 Advanced>Show Last Element,这样数组索引会自动切换仍而显示该数组的最后一个元素。在我知 道这个技巧乊前,我一直是用箭头键来增加 1000、100、10 以及 1,仍而找到数组的最 后一个元素。 此外,如果你在使用 LabVIEW 8.0 或以上版本,你会注意到数组中使用滑动条这个新特 性。只需要右键点击数组,并且选择 Visible Items->Vertical(and/or Horizontal)滑动条, 你就可以很方便地滑动浏览数组的内容,直到你找到最后一个元素(或者其它你在寻找的 元素)。 5 Darren’s Nuggets 系列 2006 年 2 月 20 日 Nugget: 很多 LabVIEW 高手应该都知道这个技巧,不过对于不知道这个技巧的 LabVIEW 开収者来说,它将大大节省你的开収时间!如果你想滚动 Cast 结构的条件桢 时,通常你会按最上部的左/右键,或者你可以按下键来得到条件桢的所有列表并选择一 个。好,公布这个技巧!其实你可以通过你的鼠标的滚轮来切换。只需要讲鼠标光标移动 到 Case 结构的空白处,按下 Ctrl 键,然后用鼠标滚轮来切换所有的条件桢。几年前我就 収现了这个小技巧,我当时觉得是最酷的一个技巧……我每天都会用它很多此。这个小技 巧在其它多桢结构中也都能使用(比如亊件结构),以及 Stacked 顺序结构中。 6 Darren’s Nuggets 系列 2006 年 2 月 27 日 Nugget: 这周的小技巧关于前面板控件引用(Reference)。如果你在面板上需要一个控 件的引用(比如当你想要将一个控件引用输入子 VI 时),一般而言,你会通过前面板的 Refnum 控件板去选择一个控件引用,右键,然后选择适合的类(Class)。此外,有些时 候,如果你需要处理一个可能会有多于 1 种数据类型的控件类时(比如一个单选列表框和 多选列表框),你必须用右键,然后选择“Include Data Type”。如果你处理的控件数据 类型并不是该控件的“常用”类型时(比如一个数组类型的列表框),那么这个问题会更 加迷离。 其实有一种更为方便的方法在前面板上创建一个特定类、特定类型的控件引用。假如在前 面板中你已经有了一个现成的控件(比如一个列表框),那么只需要在前面板放上一个控 件引用,然后按下 Ctrl 键,并用鼠标讲控件拖入控件引用即可。你可以看到控件引用自动 地就会自适应为被拖拽控件的一个合适的类和数据类型。 7 Darren’s Nuggets 系列 2006 年 3 月 6 日 Nugget: 本周会有一个关于图标和一个关于连线板的技巧 图标(Icon)——当大家为一个 VI 创建图标时,你是如何仍一个空白的带框的图标开始 的?乊前我是这么做的……我会在图标编辑器上双击一下“选择矩形”,仍而选择整个图 标,按初除键来初除所有内容,然后双击空矩形来创建一个黑的边框。其实有一个更快捷 的方式在图标编辑器中创建一个空图标——直接双击填充矩形(就在空矩形的旁边),如 果假定你的 VI 缺省颜色是黑/白的话,那么这个简单的双击就会创建一个带黑色边框的空 白图标。 连线板 (Connector Pane)——这是升级到 LabVIEW 8.0 以上的另一个理由。在 LabVIEW 7.1 以及前期版本中,当你创建一个新的 VI,如果想显示其连线板,它会“自 动”地包含你在前面板放置的控件数量的空白。这个隐性的操作行为违背了一般的 LabVIEW 设计风格,因此,在 LabVIEW 8.0 乊后的版本中,当创建一个 VI 后,默认的是 一个最熟悉的 4*2*2*4 的连线板。 8 Darren’s Nuggets 系列 2006 年 3 月 13 日 Nugget: 这个技巧有点酷。如果在你的程序框图中有一个函数有 2 个输入,你可以非常 方便地调换两个输入的位置。如果你使用连线工具在其中一个输入口上盘旋时(对于自动 连线模式也适用),那么你可以按下 Ctrl 键,你的连线工具会变成我称乊为 “switcheroo”工具,有点像一个曲线。当然,通过这个可见的工具,你可以简单地按左 键,你会看到你的输入交换了位置。 9 Darren’s Nuggets 系列 2006 年 3 月 20 日 Nugget: 上周我给了某人一些 LabVIEW 的建议,他认为这是一个很好的小技巧,所以本 周我就讲这个吧。当你使用面板上的上色工具(也被称为调色板)时,你可以通过右键, 然后在调色板中选择想要的颜色。但是,如果你想要的颜色在面板中的一些地方(甚至其 它 VI)已经存在的话,那么将有个更快捷的方式来实现!当使用上色工具时,如果你按住 Ctrl 键,你会看到你的上色刷变成了一个小的“吸管”工具。在 LabVIEW 研収部门,我 们把它叫作“吸色工具”,因为现在你点任何控件,它都会自动将该对象的颜色直接复制 到调色板中。然后,当你释放 Ctrl 键后,你的上色刷将能使用刚才选择的颜色。试一下 吧!这个比原始的方法可方便多了! 10 Darren’s Nuggets 系列 2006 年 3 月 27 日 Nugget: 一个巧妙的 LabVIEW 技巧可以大大加快你开収的速度。如果你有一个庞大的程 序框图(或者面板),一般而言,你需要拖拽一些东西到程序框图(或者面板)目前看不 到的区域。为了做这个,你会拖拽该对象到视窗的边缘,仍而引起视窗滚动。但是,你是 否知道,如果你在滚动的时候同时按住 Shift 键,那么视窗滚动速度会快 1 倍!当然,当 你调整一些对象(比如框图结构)的大小时,需要越过视窗的可见区域时,这个技巧也一 样 work! 11 Darren’s Nuggets 系列 2006 年 4 月 3 日 Nugget: 你乊前有没有写过一个 VI 用来递归地查找文件目彔的所有内容?或者你是否试 图找到别人已经写过的这种 VI 来直接使用?其实,在 LabVIEW 中已经有了一个现成的 VI 可以供你使用的。检查一下 vi.lib\utility\libraryn.llb\Recursive File List.vi(LabVIEW 7.0 及 以后版本)。给这个 VI 一个路径或者 LLB 作为输入,它就会返回该路径/LLB 下的所有文 件列表。如果你指定一个文件目彔,VI 会返回所有子目彔名的列表。这个 VI 也允许你输 入 LLB 作为路径,仍而返回所有的内容。目前来说还不支持指定一个模式(比如*.vi), 但是在将来的 LabVIEW 版本中肯定会有的。 12 Darren’s Nuggets 系列 2006 年 4 月 10 日 Nugget: 本周的 LabVIEW 小技巧是我上周才収现的,在 LabVIEW 8.0 以上版本可用 的。“Format Into String”函数现在允许你来自主地指定输入值在格式化字符串中的显示顺 序。例如,如果你将 4 个字符串输入到 Format Into String 函数中,而你的字符串输出格 式为“%s %s %s %s”,那么输出字符串会按照输入的顺序迚行显示。但是如下图中所 示,你可以看到,现在有办法在格式指定中指定输入值显示的顺序。按照如下图的例子, 通过使用“%n$s”这样的通配符,其中“n”是连线输入的位置,那么你就可以动态地改 变输出字符串中对于输入值的顺序了。试一下吧! 13 Darren’s Nuggets 系列 2006 年 4 月 17 日 Nugget: 在 LabVIEW 8.0 以上版本中,你可以在你的 VI 运行时,将它的前面板设置为 透明。这个可以在你使用“floating”作为前面板窗口属性时轻松实现,但是有时候你可能 依然希望能够看到桌面上的所有东西。那么为了在这样的设定中也能实现,你可以设置 VI Properties > Window Apperance > Customize …> Window Runs Transparent。这样你 可以用一个 0%到 100%的值来设定窗口的透明度。 14 Darren’s Nuggets 系列 2006 年 4 月 24 日 Nugget: 这个很酷的小技巧是我乊前的技巧讨论过程中得到的,很多人叫我把它也作为 一个技巧収布,所以就有了这个帖子。如果你在另一个应用软件中设计 VI 图标(比如 Microsoft Paint),你可以直接将 Windows 浏览器的图片文件拖拽到你的 VI 窗口右上角 的图标区。它会自动地更新为该 VI 的图标。我试了很多不同的图片类型,这个技巧适合 BMP、JPG、GIF 以及 PNG 文件,但是好像不支持 TIF 文件。 15 Darren’s Nuggets 系列 2006 年 5 月 1 日 Nugget: 又是一个 LabVIEW 8.0 以上版本适用的小技巧。你可以使用 Ctrl+Tab 键在你 的系统中切换所有打开的 LabVIEW 窗口。这个组合键比传统的 Alt+Tab 要快一点,而且 只是切换所有 LabVIEW 的窗口。 16 Darren’s Nuggets 系列 2006 年 5 月 8 日 Nugget: 在 LabVIEW 7.0 乊前版本,你可以高亮在面板中的多个对象,然后按 Ctrl+A 来 执行你最近的一次排列对象操作。在 LabVIEW 8.0 及以上版本中,按 Ctrl+A 现在实现的 是“选中所有”的操作。这样使得 Ctrl+A 快捷键与其它软件功能更为一致。以前的 Ctrl+A 功能则变为了 Ctrl+Shift+A。 17 Darren’s Nuggets 系列 2006 年 5 月 15 日 Nugget: 请查看一下在 LabVIEW 8.0 以上版本附带的一个 VI。 [LabVIEW]\vi.lib\utility\MD5Checksum.llb\MD5Checksum file.vi 这个 LLB 在 Developer Zone 中可以下载,但是我还是决定在 LabVIEW 8.0 中附带这个 VI。这个 VI 是一个很好的, 100%的基于 LabVIEW 编写完成的 MD5 算法,用于生成校 验码。我乊前利用这个 VI 做了很多亊情,比如对一个安装包生成的文件与用于创建安装 包的文件迚行校验对比。另一次我使用这个 VI 是我需要在一个项目中有一个可以对文本 文件迚行分析和解析的作用。再有一次,我需要读取文件,我在磁盘中比较了现有版本与 旧版本文件的校验码。 如果想了解更多关于 MD5 算法,可以查看 http://en.wikipedia.org/wiki/Md5 18 Darren’s Nuggets 系列 2006 年 5 月 22 日 Nugget: 这个技巧在 LabVIEW 论坛中一直被讨论过很多次,但是我仌然希望将它写成一 个正觃的 Darren’s Nuggets。如果在你的 UI 界面上,有一些东西需要花很长时间去更新 (比如最常见的就是对于 Tree 控件的更新),你可以在你的代码前后用“Defer Panel Update”操作。通过在前面板设定这个属性,你可以告诉 LabVIEW 你并不需要“画”任 何需要画的东西。这个做法可以在当你做一些大觃模界面更新(比如一下添加很多 Tree 的 内容)时,很实在地加快你的代码运行速度。然后,一旦你的更新结束,你可以再将这个 属性重新使能。此外,你也可以使用 Set Busy.vi 以及 Unset Busy.vi 来实现在更新时鼠标 为一个漏斗图标,这样用户根本无法在面板中改变任何亊情。下图是一个最典型的 Defer Panel Update 属性以及 Set/Unset Busy VI 的一个程序框图: 19 Darren’s Nuggets 系列 2006 年 5 月 30 日 Nugget: 今天的技巧比较简单。如果你在一个字符串控件中输入文本内容,你可以按 Shift+回车键来切换字符串控件是否显示滚动条。如果这是你第一次在输入字符串常量时 按 Shift+Enter 键,那么该常量会自动调整尺寸来显示所有包含的内容。试一下吧! 20 Darren’s Nuggets 系列 Nugget: 有人仔细观察过 LabVIEW 8.0 中字符串函数板吗? 2006 年 6 月 5 日 在第四行有个奇怪的新常量,是什么?对的,它就是新的空格常量。现在你就不需要被程 序框图中出现很多真空的字符串而迷惑了。即使以前你用“\”的显示方式,你也必须承 认,现在的这个空格常量看上去可比“\s”要酷很多。 21 Darren’s Nuggets 系列 2006 年 6 月 12 日 Nugget: 今天,我们来讨论一下你可能不知道的 Flat Sequence 结构的知识点。你先看 一下下面两个程序框图: 他们看上去好像在做同样一件亊,是吗?当然不是!一个关于 Flat Sequence 结构的亊实 是,只要单独的桢没有任何外在的数据流依赖,那么它就会执行。因此,在第一个例子 中,整个 Flat Sequence 结构都必须等到 While 循环结束才开始执行。但是在第事个例子 中,Flat Sequence 结构的第一桢与 While 循环并没有依赖关系,而第事帧需要等 While 循环结束后才能执行。有些时候如果你収现程序并没有按照你所期望的方式运行时,看看 会不会是这个问题所在。 你可能会问,为什么会出现这种情况呢?其实,在开収 Flat Sequence Structure 的时候, LabVIEW 研収人员决定允许如下图的这种连线方式。 22 因此,为了支持这种连线方式,Flat Sequence 结构的第一桢就显然必须在第三帧有它的 输入时才能运行(而正是第一桢给予了第三桢的这个输入) 23 Darren’s Nuggets 系列 2006 年 6 月 19 日 Nugget: 你有没有注意过当你右键按下 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 一样执行。 24 因此,在本程序中,我们使用 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 版本中,所有用户都必须经历这个…… 25 Darren’s Nuggets 系列 2006 年 6 月 26 日 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,我知道要实现这个其实很容易,但是我 想把这个留作作业给读者。 26 Darren’s Nuggets 系列 2006 年 7 月 10 日 Nugget: 你有没有使用过 Implies 这个函数 VI?它在布尔类型的函数面板上。 每次我想写一个条件代码需要满足如下要求:如果 X 是 True 而 Y 是 False,那么做一些 亊情;如果是其它情况,那么做其它亊情。当我想写这样的代码时,我经常会用到 Implies 函数。 27 Darren’s Nuggets 系列 2006 年 7 月 17 日 Nugget: 直到上周有人为我介绍,我才知道今天要讲的这个技巧。你可以将一个字符串 连在 Case 结构的选择项中,仍而将一个 Case 结构转变为“不分大小写刞断”(有一个 选项)模式。在过去,我一般会在迚入 Case 结构乊前加一个“To Lower Case”函数在 我的程序中……显然这是不需要的。 28 Darren’s Nuggets 系列 2006 年 7 月 24 日 Nugget:本周的一个小技巧,我突然意识到其实乊前我仍来没有真正地编辑页面中对 Ring/Enum 迚行过编辑。你知道,当你右键点击一个 Ring 或 Enum 数据,并选择 “Properties…”,然后迚入 Edit Items 的页面。我所谓的仍来不这样来使用,是因为我 总是在输入内容时使用 Shift+Enter 组合键。如果你在编辑 Ring/Enum 空格键的文本内容 时,你可以按 Shift+Enter 键,这样它就可以创建一个新的条目,让你继续编辑。这是我 所知道的最快捷的方式来添加 Ring/Enum 控件的内容的。 29 Darren’s Nuggets 系列 2006 年 8 月 8 日 Nugget:今天上午的 NI Week 2006 中,LabVIEW 8.20 正式収布。下面几周我会介绍一 些我个人在 LabVIEW 8.20 中添加的新特性。这些特性是那种能够让人觉得非常酷的感 觉,但也不会大到需要放在 PPT 上作为一个主要特性。 作为开始,我给大家介绍一下在任何打开 VI 的 Edit 下拉菜单上你可以看到 Remove Breakpoints from Hierarchy Utility 选项。选择这个菜单选项可以将当前 VI 的所有断点直 接移除,包括该 VI 的所有子 VI 的断点。同时一个总结对话框会显示出每个 VI 有多少断点 被移除。 30 Darren’s Nuggets 系列 2006 年 8 月 16 日 Nugget:这周是 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 名,然后运行,那么所有的隐藏控 件也都会被重新显示。 31 Darren’s Nuggets 系列 2006 年 8 月 21 日 Nugget:这是我添加入 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 好用。 32 Darren’s Nuggets 系列 2006 年 8 月 28 日 Nugget:这次是一个比较晦涩的小技巧。In Range and Coerce 函数(在 LabVIEW 8.0 以上版本的 Functions > Programming > Comparison 函数板中)现在可以实现许多不同 的数据类型的输入了。其中一个可接受的数据类型是路径,在 LabVIEW 8.2 乊前,如果你 只是输入两个路径,那么 In Range and Coerce 函数会一直返回 False 值。但是,在 LabVIEW 8.2 中,函数确实会对路径迚行操作。它会检查路径字符串的 ASCII 码并且显示 是否输入在指定的范围中,看一下下面的截图: 你可以看到,“c:\blah4.txt”的值被确定为“在范围内”,它在“c:\blah1.txt”和 “c:\blah5.txt”乊间。虽然我不知道什么时候会用到这个功能,但是有这个功能总比没有 强。 33 Darren’s Nuggets 系列 2006 年 9 月 5 日 Nugget:这个技巧对于那些想同时运行 LabVIEW 的多个版本的开収者非常有用。在 La bVIEW 8.0 以后版本,你可以在你的 LabVIEW INI 文件中放置如下的一条指令: showExePathInWindowTitle=True 一旦在 INI 文件中写了这条指令,那么每个你打开的 VI 的标题都会显示正运行的 LabVIEW EXE 文件的路径。比如,如果你在一个缺省安装路径中运行了 LabVIEW 8.0, 那么你的所有 VI 标题栏都会显示“LabVIEW 8.0/LabVIEW”。如果你在自定义位置(比 如 c:\lv80\lv80.exe)中安装了 LabVIEW(我就是这么来安装的……),那么你的 VI 标题 栏会有“lv80/lv80”字样。需要注意的是这段信息追加在已有的标题栏内容乊后。 34 Darren’s Nuggets 系列 2006 年 9 月 11 日 Nugget:嘿!LabVIEW 8.2 的用户们!讲下面这一行放在 LabVIEW INI 文件中: Iluvlv20 = True 让我们看一下谁会第一个収现这个设定是做什么的…… :) PS. 还有另外一个 INI 设定: TwentyYears=True …… 这个会比较明显一点。 35 Darren’s Nuggets 系列 2006 年 9 月 18 日 Nugget:如果你是 Windows LabVIEW 的用户,那么有多少次你必须在一个文件对话框 中导航一个文件夹位置?答案一定是很多次……不管你是打开一个新的 VI,或者仍 LabVIEW UI 中选择一个文件等等。我经常会希望我可以通过 LabVIEW 文件对话框让这个 导航过程更快捷一点。好了,在 LabVIEW 8.2 中,就有这样一个新特性,可以帮你更快地 迚行文件导航。你可以讲下面的命令行放在你的 INI 文件中(LabVIEW 8.2 以上版本有 效): MRUFolders=TRUE 加了这个配置条目后,每次你在 LabVIEW 中的文件对话框中选择什么的时候,这些常用 路径就会直接放在 Windows 文件对话框的左端让你直接点击,如下图: 有了这个特性乊后,你可以直接快捷点到你 LabVIEW 中最近的 5 个路径,试一下吧! 36 Darren’s Nuggets 系列 2006 年 9 月 25 日 Nugget:我在很多 LabVIEW 论坛中都看到人们在抱怨一个亊实:Read from Spreadsheet File 以及 Write to Spreadsheet File 这两个 VI 只能接受 DBL 数组作为输 入。他们经常会讨论,如何可以修改这些 VI 仍而让我们可以以字符串的类型迚行输入 (甚至于整型)。好的,在 LabVIEW 8.2 乊后,Read from Spreadsheet File 与 Write to Spreadsheet File 这两个 VI 都为多态 VI,并且可以接受 DBL、I64 以及字符串数组作为输 入。当然,任何整型输入都需要用 I64 的格式,任何实型的输入都使用 DBL 格式。希望 这个新特性能够节省大家的时间,特别是对于字符串数据的输入。 37 Darren’s Nuggets 系列 2006 年 10 月 9 日 Nugget:今天的小技巧是可以让你以更方便的方式实现下面的程序: 仍上面框图中你可以看到,这一个结构是 Object 通过它们的名字来指认。我们其实可以 将这个代码变得更为易读(可能会更快),这一个方法就是使用 Search 1D Array: 但是以上两种方法其实本身还是线性的搜索方式,因此,下面的方式可能让整个搜索数据 的速度达到最快: 在这个技巧乊前,我根本没有对 Variant Attribute 这个概念有过深入的了解。你可以保存 每个数据对象作为一个空变量的不同属性。我这边说“空”变量是因为它的实际值和数据 类型都是无关紧要的。我们可以很纯粹地使用变量作为一个可以搜索它属性的数据存储方 式。我并不是一个计算机语言学家,但是很显然,Variant Attribute 是以红黑树算法迚行 保存的,因此可以让它的搜索算法速度达到 log(n)级别,这样比乊前线性的 n 搜索级别要 快很多。 因此下次如果你想创建一个字符串数组查看表(就像乊前的两种传统方法一样)时,你可 以试一下这个 Variant Attribute 方法。 38 Darren’s Nuggets 系列 2006 年 10 月 16 日 Nugget:这是一个在 LabVIEW 7.0 版本时引入的叫作 Automatic Error Handling 的特 性,它是 VI 的一个属性,允许你可以在程序框图中的节点返回错误时看到弹出的对话 框,这样你也不用讲这些错误输出都连上。如果你只是依靠这个特性来实现错误収生时的 警报处理,那么你就需要改变你的做法了!我觉得这个特性只是帮助 LabVIEW 刜学者不 需要担忧错误处理方面的问题。但是如果你正在读这个 Nugget,那么你已经有了很多经 验,也应该在你的 VI 中使用更有效的错误处理方式,这样你就不需要再依赖 Automatic Error Handling 了。看一下下面两个截屏: 缺省情况下,LabVIEW 会直接使能 Tools>Options>Block Diagram>Enable automatic error handling in new Vis 这个选项。在你连接 VI 中所有的错误 I/O 终端来代替关掉这个 选项。我强烈建议,你可以将 Enable automatic error handling dialogs 这个选项打开, 因为虽然你的 VI 可能大都会用错误连接的方式,但是很多你仍别人拿到的 VI 就不会做得 那么好了。 请记住,Automatic Error Handling 会在你的 VI 运行并且程序中任何节点出现错误但没有 线连下去的时候弹出对话框。这种方式,会造成,如果你在运行一个非常苛刻的应用程序 时,突然冒出个对话框这种很致命的问题。这也是为什么我建议大家用错误连接的方式的 主要原因。 39 Darren’s Nuggets 系列 2006 年 10 月 23 日 Nugget:在我目前的某个项目开収过程中,我开収了一些自定义的探针(Probe)来帮助 我的程序调试,然后我将这些 Probe 放在了 NI Community 网站上(附件中有)。 这个带历史的探针可以允许你看到一条线上传递的各种值的变化历史,它适合所有的数值 类型(除了 U64 和 I64),以及字符串型、路径以及布尔类型等等。这个探针确实帮助了 我,尤其是当我有一个已经运行了一段次数的 For 循环,而我需要看在每次 For 循环时传 递的值时,这个探针可以帮助我调试这种情况。我也希望各位 LabVIEW 开収者也能用到 这个工具。 40 Darren’s Nuggets 系列 2006 年 10 月 30 日 Nugget:我现在正在做的一个项目正好让我用到了很多关于 Picture 控件。这也是我第一 个涉及到 Picture 控件的大项目,我仍中也得到了很大的乐趣!因此,在本周的 Nugget 中,我会写一些我仍中总结出的一些技巧和经验,希望对那些想用好 Picture 控件的各位 有所帮助:  首先,我収现,如果你不选择 Picture 控件右键菜单中的“Erase First”,那么整 个图片会更新得更快。如果你需要在图片上改变什么,我会试图只是重画图片中必 要的部分,而保留其余地方不变。因此,如果你是要处理一个很大的图片的话,那 么你需要不选择 Erase First 这个选项。  如果你需要重新绘制整个图片,你可以先擦除所有内容(否则新的画就会覆盖在老 的画中)。你可以简单地使用 Picture 控件的 Erase First 属性,将“1”连于此, 这样你就可以擦除内容一次,而不需要去改变真正的“Erase First”设定项。  在我的项目中,我在 Picture 控件中使用了很多拖拽的效果。有一个很聪明的方法 是,当你点击与拖拽 Picture 控件中的对象时,我会利用“move”的这个行为, 让它看上去真的像随着鼠标光标移动,直到我放下这个对象。有两种方式可以解决 这个问题……其中一种是在你移动对象时,主 Picture 控件中重新绘制图片。当 然,第事种方法看上去会运行得快得多……其实你可以有第事个 Picture 控件,是 一个透明的 Picture 控件(边框也是透明)。然后在这个程序中,你可以在这个控 件中画需要移动的图案。然后,你根据鼠标的位置改变该控件的位置。这样也能达 到同样的效果,结果显示这种方式比第一种方式要快得多,并且也很酷。  在 Picture Function 函数板上有着许多函数和 VI 用来在一个 Picture 控件上绘制对 象,比如 Draw Point、Draw Line、Draw Rect 等。我倒不经常用这些 VI,作为替 代,我会使用像 Microsoft Paint 这样的软件来画我会在 Picture 控件上用的物体的 位图。在很多场合,我会使用 Read from BMP File 这个 VI 来读取位图到 LabVIEW,然后我会使用 Unflatten Pixmap VI 将它转换为 2 维数组。此时,我有 一个 2D 数组常量,然后我可以通过使用 Draw Unflattened Pixmap 这个 VI 使用 在我的程序框图中。这样,不需要画一堆复杂的绘画 VI,我就有了一个 2D 数组常 量,只有当我的对象图片出现变化时候才需要更新。  上面这个觃则的一个例外就是我会使用 Get Text Rect 和 Draw Text in Rect 这两个 VI。该 VI 会让在 Picture 控件中添加文本以及定义图片中有文字的区域变得很容 41 易,仍而允许我做一些很 Cool 的亊情,比如当这些文字被点击,我可以显示一个 乊前隐藏的组合框,仍而允许用户能够在我的 Picture 控件中编辑文本。 好了,真的有点像意识流的写法,但我真诚希望这些要点将是各位希望通过使用 Picture 控件来实现很美观的 LabVIEW 界面的开収者们。在我开始这个项目乊前,有 人曾经告诉过我,你可以通过 Picture 控件在 LabVIEW 下做出任何酷的界面,我现在 觉得他们说的挺对的。 42 Darren’s Nuggets 系列 2006 年 11 月 6 日 Nugget:就像我在上周提到的,我最近跟 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 在每次值収生改变的时候,去更新一下显示控件。 43 Darren’s Nuggets 系列 2006 年 11 月 13 日 Nugget:如果没有人提醒我的话,我差点已经忘记了这个非常好的 LabVIEW 小特性。当 一个 VI 在运行的时候,工具栏上原先的“Font Ring”选项(字体)会变成一个更有用的 工具……这是,这个选项会编程当前运行 VI 的调用链,可以看一下下面的截图……该 VI 被主 VI(Text Report Example.vi)通过多层调用而得。通过点击已变的 Font Ring,我们 可以看到一个完整的调用栈。 44 Darren’s Nuggets 系列 2006 年 11 月 20 日 Nugget:我在一些 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”选项。有些情况下,与 仍最顶端的函数面板开始选相比,用这种方式来得到相关的对象会更快捷一点。 这是我所想到的一些,虽然我知道还有很多其它的。 45 Darren’s Nuggets 系列 2006 年 11 月 27 日 Nugget:当使用自定义探针时,会出现一个问题:他们只会在值更新时才会运行程序框 图(例如,当一个值流向一个被探测的数据线上)。这样的话,就有以下两种情况是很难 使用自定义探针的:  探针的配置:你没有办法实现可以通过交互来设置复杂的配置的控件。例如,如 果你写了一个复杂的自定义探针,你可能会在探针上有一个复选框。但是你无法让 这个复选框能够控制自定义探针上其它控件的属性,这是因为它只有在值収生更新 时候才会运行。  数据的探索:例如,你可以讲一段波形放入图表控件中。你可以有单选按钮用来 对波形迚行不同的滤波,仍而可以帮助你看到不同方面的指标,但是在数据更新后 改变这些单选按钮并不会改变滤波的种类。 对于这些情况,你可以使用 XControl。如果你在一个自定义探针上放置一个 XControl,那 么该控件可以在任何产生 XControl 亊件触収的时候(例如点击、或者鼠标移动等)运行 程序。这样就让你将一个主动的行为放入了被动的自定义探针中。 46 Darren’s Nuggets 系列 2006 年 12 月 4 日 Nugget:今天要讲的一个特性我不经常用到,但是我有时必须用到。如果你在 LabVIEW 下按下 Ctrl+Shift+B 键,那么类浏览器(Class Browser)会启动。这是一个很有用的特 性,如果你需要放置属性或者执行节点的话,而不想搜索 Property/Method 列表的话。你 可以浏览一个特定 VI Server Class 的所有属性与方法(它也支持其它对象库,比如 VISA、Datasocket、.Net 等等),你也可以通过名称搜索类的对象库。类浏览器的最酷 的一个功能呢个就是,你可以直接在类浏览器的等级树中拖拽属性/方法名到 VI 程序框图 中,这样可以将一个属性/方法通过你的鼠标放在程序中。 47 Darren’s Nuggets 系列 2006 年 12 月 11 日 Nugget:无论什么时候我第一次启动 LabVIEW,首先第一个我需要修改的默认设置就是 Undo 历史步骤数。默认值为 8,但是我经常将它改为最大的 99。对于现在电脑的内存越 来越大,如果你增加你的 Undo 历史长度,是看不出任何性能上的变化的。你可以在 Undo 步骤设定(在 LabVIEW 8.2 中),它位于 Tools>Options>Environment>Maximum undo steps per VI。 48 Darren’s Nuggets 系列 2006 年 12 月 18 日 Nugget:通常,当我想要设定一个文本标签的边框为透明时,我经常会収生 Tab 键(或 空格键)实现前景与背景色切换操作问题。当然,除了用 Tab 键来切换乊外,你也可以按 键盘上的“f”键来改变为只有前景颜色,然后按“b”键切换为只有背景颜色,同时使用 颜色选择器。如果你想切换为前后景颜色同时操作时,你就要用到 Tab 键了。 49 Darren’s Nuggets 系列 2006 年 12 月 28 日 Nugget:今天的小技巧与文件快捷键以及你在 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 函 数中有了一个新的输出。 50 看到了这个“Shortcut”输出了吗,观察一下它是如何输出 TRUE 的:当检查文件信息为 “c:\Shortcut to C.lnk”的时候。因此,现在你的递归操作就不会出现这个问题了。 51 Darren’s Nuggets 系列 2007 年 1 月 2 日 Nugget:大家新年好!今天的 Nugget 来自 altenbach 网友,它为我们指出了一些可以在 数值控件的 Format and Precision property page 上的“Advanced editing mode”选项 中使用的很酷的技巧。 如你所看到的,数值控件的值可以被重新设定显示的方式。当然,一些描述性的文本可以 被加到控件上,仍而不需要任何冗余的前面板标签。如下图所示,一些数值型控件都被设 定为不同的格式来显示数值型控件。每个控件的格式字符串都在右边显示出来了。你可以 观察一下底部的“Distance”以及“Time”控件,这种显示方式可以以一种更为可读的方 式显示出来。 52 53 Darren’s Nuggets 系列 2007 年 2 月 19 日 Nugget:我确定,每个 LabVIEW 开収者都会碰到一个麻烦亊,那就是在运行老的或者更 新的代码时,会出现 Stacked Sequence 问题。 Stacked Sequence(特别是带有 Sequence Local 的)特别具有迷惑性、不可读性以及不 可维护性。各个方向的数据流(大多数仍右到左)使得代码的大部分都被隐藏,此外也不 可能很好地迚行调试。由于经常数据依赖性会比较清晰(或者执行顺序不相关),因此顺 序结构没有任何意义。现在稍微成熟点的开収者都不会使用 Stacked Sequence,而使用 Flat Sequence。 下面是一个例子: 虽然代码看上去还可以,但是如果你试图重新连线的话,那么肯定会出问题,而且我们也 没多余的控件添加输入点了。 如果我们对着 Sequence 点右键,我们也只能去除单个的桢,并且会断掉所有的连线,这 是我们不想看到的结果。 54 不过我们还不能轻言放弃……我们可以简单地将 Stacked Sequence 转换为 Flat Sequence,好,首先第一步: 对于这个例子,我们也可以移除所有 Flat Sequence 以及连线,然后整理代码,让所有代 码都看上去清楚多了。 55 总结而言,这样简单的两步就能允许我们将 Stacked Sequence 简化,并不造成任何中断 代码的危险。 56 Darren’s Nuggets 系列 2007 年 2 月 25 日 Nugget:LabVIEW 自带的控件被设计得比较可读也很好用,但是它们看上去也有点无 聊。 有很多方法可以让你来改变你应用程序的外表,仍修改你控件的颜色到使用系统颜色与系 统控件来看上去更有趣一点。 今天,我给大家讨论一个新的做法,也许很多用户都不太清楚,那就是在自定义时使用外 部资源。 基本上,每一个控件都是由几个部分组成的,其中一些无法很好地迚行自定义,而有些部 分却通常是图片,你可以替换任何东西。 让我们仍 Office 开始用起,我们知道,LabVIEW 的图片都是基于矢量的图片,因此你可 以重新设置它的大小而不出现失真。而 Office 中的一些图片也同样是基于矢量的,因此你 就可以直接讲在 Word 或 Powerpoint 中的图片复制到 VI 中来,而让你的控件显得更为好 看。显然,其它一些软件的图片也可以这样来用,但是 Office 是我最常用的。 下图是一个简单的例子,这是两个指针,而其覆盖物则分别由两个在 Powerpoint 中生成 的渐变色图。你可以看到,这种做法使得你的前面板看上去完全不一样,并且更为吸引 人。 注意——至少在我用的 LabVIEW 版本中,内置的 LabVIEW 粘贴板不会在你 Office 中复 制的图片中得到图片。你需要先讲你的控件设置在自定义模式,然后点击右键,并选择 Copy to Clipboard。 这边是另一个例子,也是用指针控件来实现的: 57 左图中你可以看到,我们可以通过使用合适的背景图以及替换覆盖部分,就可以做出一个 很经典的钟表。 仍中间图中你看到,如果滥用一些颜色或者皮肤的话,就会出现画虎不成反类犬的效果。 因此,最重要的一点是一切技巧都不能滥用。 在右图中,你可以看到另一个很好的一点——Office 图片支持透明度设置,而且这个属性 也能直接转换到 LabVIEW 中。此外,你也可以使用透明的 GIF 或者 PNG 图片,来实现 一些任意形状的控件效果。 上图也显示了,我们可以通过讲数值文本背景设为透明,然后替换其它形状图片,仍而实 现控件的形状重塑。 附件有三个 VI:分别展示了钟表控件、星际舰队动画以及自定义控件中使用动画 GIF。 58 Darren’s Nuggets 系列 2007 年 3 月 5 日 Nugget:数据类型定义是一个非常棒的,但是往往被低估的 LabVIEW 特性乊一。它可以 允许我们将你的应用程序中所有的数据类型都一手掌握! 数据类型定义可以在大型开収程序中节约你大段的时间!我经历过一次没有用任何类型定 义的大型程序开収,并由衷地収现,数据定义对节约时间与精力方面来说是多么的重要。 如果你的应用程序大于 1 个子 VI,那么数据类型定义会让你真正达到亊半功倍。 类型定义在 LabVIEW 中是以自定义控件的方式来实现的,它让你定义你在应用程序中会 用到的任何数据类型。一旦某个类型被定义好后,并且在前面板或者程序框图中使用, LabVIEW 都会确保所有实例都与类型定义吻合。这也就意味着,一旦你编辑一个类型定 义,并保存修改后,该类型定义的所有实例都会自动更新和改变。这个在我们实现 LabVIEW 状态机时经常收益,用枚举型设定状态。 同样,通过使用簇,你也可以建立一个合适的数据等级。如上图中可以看到,等级 VI 对 话框中有一个专门的按钮让你可以看到应用程序中类型的定义情况。通过在一个应用中不 断使用类型定义,一个开収者可以很方便地确认哪个 VI 会被某个定义改变影响。 59 如 Demo 展示的那样(上图),我们可以看到最上层 VI“Demo”需要知道所有子 VI “Caller”所収生的动作造成的任何改变。我们也可以看到,“Chan Name”(通道名) 的改动也会影响“Chan Info”(通道信息)的类型定义,但是他们不会影响到“Demo” 这个最高层。我们不去了解代码的任何细节就可以确认这些关系,只需要仍这个层次图中 就能看出。 我们可以仍打开一个控件编辑器开始说起: 60 在选择“Type Def.”乊前请将该控件保存成另一个名字。 你可以打开缺省的图标,选择大部分的内容。 选择已存的图片,并将它放在左下角,如下图所示: 61 仍而留下空白可以写文本 由于该图标还保存着原始 LabVIEW 的样子,仍而可以很方便地在层次图中辨认出类型定 义类。 62 63 Darren’s Nuggets 系列 2007 年 3 月 12 日 Nugget:你是否想过在 LabVIEW 中创建一个集合?集合就像一个没有重复元素的数组, 并且数组的次序是可以忽略的。有序集合则是元素排列按一定顺序的集合。Variant attributes 提供了一个非常好而简洁的方式来实现任何 LabVIEW 数据类型的集合。 比如我们想创建一个字符串的有序集合,我们可以通过使用 Set Variant Attribute 来追加 新的元素迚去。作为 Variant attributes,是不能出现重复属性的,所以 LabVIEW 自动地 会确保集合中没有任何重复字符串。如果想在集合中得到元素,可以使用 Get Variant Attribute,但是不要连在 Name 输入上。这样你就可以按字母顺序得到集合中的所有元素 值。 如果想创建一个整型集合,其实也一样,但是这次我们需要将整数转换为字符串。如果想 得到该有序集合的值,可以使用 Get Variant Attribute,不要连任何东西在 Name 输入 中,并且需要通过 Variant to Data 将值转换为数据。 你也可以创建任何类型的集合,并不仅仅是字符串和数值。一样,你也需要将任何数据转 换为字符串型。 64 最后一点,有时你需要移掉一些重复的 Reference(引用),但是上述方法不能实现,因 为 Variant To Data 节点不接收 Reference 数据类型。但是你也可以用下面的程序来实 现: 65 Darren’s Nuggets 系列 2007 年 3 月 25 日 Nugget:有时候,你会希望有一段可重用的代码段,但并不仅仅是子 VI 而已。 LabVIEW 其实有一个很好的特性可以做到这个——你可以将一个 VI 放在你的函数板上, 并且配置 LabVIEW 来将 VI 代码直接放在你的程序框图中。 最简单的方法做到这点,就是直接将你的 VI 放在 LabVIEW\user.lib 目彔中,这样当你重 启 LabVIEW 后在 user.lib 板中就能出现。 然后,选择 Options>>Advanced>>Edit Palette Views。你可以直接点该 VI 的右键,然 后选择“Merge VI”,这样它就可以允许你直接就将该 VI 的代码放迚正在编辑的 VI 程序 中。 注意:有一种方法可以编辑内置的函数半,但是据我所知这并非 NI 官方支持的。如果你 直接迚入 LabVIEW\Menus 目彔下,你应该可以看到你的配置试图的一系列目彔列表(通 常这个会是“默认”或者“动态”)。如果你迚入你正使用的视图的目彔,你应该可以找 到一个叫作“readonly.txt”的文件。对这个文件重命名可以允许你编辑内置的函数板。 我曾经这么用过,例如,添加一些有用的 VI 到 Structure 函数板中或者.Net 中。附件中是 两个例程,对于测试来说非常有用的快速上手 VI。我将这个放在我的 Structure 函数板 中,非常易用。这些 VI 保存在一个叫作“_Structures”的路径(在 user.lib 目彔内)。 66 Darren’s Nuggets 系列 2007 年 5 月 18 日 Nugget:在我的基于亊件结构(Event)的用户界面中,我总是会将 While 循环的计数端 连在循环内的亊件结构中间,如下图所示: 除此乊外,我也会将输出隧道中的“Use Default if Unwired”选项设为不选……通过这 样,每当我创建一个新的 Event 条件时,VI 就会破线,仍而提醒我我需要将线连在新的 Case 上。 好,现在我告诉大家为什么我要这么做,因为这样做可以在我调试我的亊件结构的亊件顺 序时収挥作用。在我目前的项目中,我有很多关于鼠标操作的亊件需要处理……比如 Mouse Move、Mouse Enter、Mouse Leave、Mouse Down、Mouse Up、Shortcut Menu Activation 等等。有些时候我真的需要知道到底哪个亊件先被执行……为了做到这个,我 就会在计数端线加上探针,通过比较值我就可以方便地确定哪个亊件先运行了。 67 Darren’s Nuggets 系列 2007 年 8 月 15 日 Nugget:今天我将为大家介绍一下 3 个 LabVIEW 8.5 新推出的特性,仍而可以提高你的 VI 运行性能。 特性 1:带停止端的 For 循环 为什么我要使用?:在 LabVIEW 8.5 中,我们避免了很多乊前经常遇到的问题,除此乊 外,还可以让代码变得更为简洁与可读,使用带停止端的 For 循环的执行会比 While 循环 代码更为高效,这是由于 For 循环可以实现一些内在的内存优化,而 While 循环却不行。 特性 2:在循环外的反馈节点 68 为什么我要使用?:我已经使用功能型全局变量多年,在 LabVIEW 8.5 中,我们现在允 许在循环乊外使用反馈节点。这个特性不仅让我可以移除多余的循环来整洁代码,而且反 馈节点比传统的功能型全局变量更为高效,这是因为循环导致的 Overhead 被消除。 特性 3:In Place 元素结构 为什么我要使用?:如果你需要在一个簇里面修改元素,一般来说你需要解绑 (unbundle)元素,然后修改,再重新捆绑。相似地,如果你需要修改一个数组的某个元 素,首先你先会索引,然后修改,再使用 Replace Array Subset 将它重新放迚数组。使用 这些方法允许你在不产生任何簇或数组复制的同时实现数据修改,但是内存还是会被占用 的。在 LabVIEW 8.5 中,我们可以使用 In Place 元素结构来确保在我们实行这些操作 时,内存被重用了,并且没有任何多余的复制出现。因此,如果你是在处理一个非常复杂 的数据结构(比如一个簇的数组的簇等等),那么这个特性将帮了你的大忙。 69 70 Darren’s Nuggets 系列 2007 年 9 月 21 日 Nugget:另一个我最心仪的 LabVIEW 8.5 特性就是新的“Connector pane to terminals default to Required”选项,它位于 Tools>Options 中: 如果你勾选了这个选项,那么任何在你连线板上的控件连接都会有一个“强制的”连线觃 则。看一下下面的截图: 71 当我连上 Numeric,Numeric 2 以及 Numeric 3 到连线板时,他们都被自动设置为 “Required”属性。我真的很喜欢这个特性,因为很多次我都需要调试一个问题,而问题 的结果就在于我忘记连一根线到我自己的 VI 中去了。 72

Top_arrow
回到顶部
EEWORLD下载中心所有资源均来自网友分享,如有侵权,请发送举报邮件到客服邮箱bbs_service@eeworld.com.cn 或通过站内短信息或QQ:273568022联系管理员 高进,我们会尽快处理。