tst

Picture


       有时候,你会希望有一段可重用的代码段,但并不仅仅是子
VI 而已。
LabVIEW其实有一个很好的特性可以做到这个——你可以将一个VI放在你的函数板上,并且配置LabVIEW来将VI代码直接放在你的程序框图中。

        最简单的方法做到这点,就是直接将你的VI放在LabVIEW\user.lib目录中,这样当你重启LabVIEW后在user.lib板中就能出现。

         然后,选择Options>>Advanced>>Edit Palette Views。你可以直接点该VI的右键,然后选择“Merge VI”,这样它就可以允许你直接就将该VI的代码放进正在编辑的VI程序中。

Picture

注意
:有一种方法可以编辑内置的函数半,但是据我所知这并非NI 官方支持的。如果你直接进入LabVIEW\Menus目录下,你应该可以看到你的配置试图的一系列目录列表(通常这个会是“默认”或者“动态”)。如果 你进入你正使用的视图的目录,你应该可以找到一个叫作“readonly.txt”的文件。对这个文件重命名可以允许你编辑内置的函数板。


         我曾经这么用过,例如,添加一些有用的
VI到Structure函数板中或者.Net中。附件中是两个例程,对于测试来说非常有用的快速上手VI。我将这个放在我的Structure函数板中,非常易用。这些VI保存在一个叫作“_Structures”的路径(在user.lib目录内)。

Picture
 

Tomi M

Picture


        你是否想过在
LabVIEW中创建一个集合?集合就像一个没有重复元素的数组,并且数组的次序是可以忽略的。有序集合则是元素排列按一定顺序的集合。Variant attributes提供了一个非常好而简洁的方式来实现任何LabVIEW数据类型的集合。

        比如我们想创建一个字符串的有序集合,我们可以通过使用Set Variant Attribute来追加新的元素进去。作为Variant attributes,是不能出现重复属性的,所以LabVIEW自动地会确保集合中没有任何重复字符串。如果想在集合中得到元素,可以使用Get Variant Attribute,但是不要连在Name输入上。这样你就可以按字母顺序得到集合中的所有元素值。

Picture

        如果想创建一个整型集合,其实也一样,但是这次我们需要将整数转换为字符串。如果想得到该有序集合的值,可以使用
Get Variant Attribute,不要连任何东西在Name输入中,并且需要通过Variant to Data将值转换为数据。

Picture

        你也可以创建任何类型的集合,并不仅仅是字符串和数值。一样,你也需要将任何数据转换为字符串型。

Picture

        最后一点,有时你需要移掉一些重复的
Reference(引用),但是上述方法不能实现,因为Variant To Data节点不接收Reference数据类型。但是你也可以用下面的程序来实现:

Picture
Picture
 

Ben

Picture


        数据类型定义是一个非常棒的,但是往往被低估的
LabVIEW特性之一。它可以允许我们将你的应用程序中所有的数据类型都一手掌握!

Picture

        数据类型定义可以在大型开发程序中节约你大段的时间!我经历过一次没有用任何类型定义的大型程序开发,并由衷地发现,数据定义对节约时间与精力方面来说是多么的重要。如果你的应用程序大于
1个子VI,那么数据类型定义会让你真正达到事半功倍。

        类型定义在LabVIEW 中是以自定义控件的方式来实现的,它让你定义你在应用程序中会用到的任何数据类型。一旦某个类型被定义好后,并且在前面板或者程序框图中使 用,LabVIEW都会确保所有实例都与类型定义吻合。这也就意味着,一旦你编辑一个类型定义,并保存修改后,该类型定义的所有实例都会自动更新和改变。 这个在我们实现LabVIEW状态机时经常收益,用枚举型设定状态。

        同样,通过使用簇,你也可以建立一个合适的数据等级。如上图中可以看到,等级VI对话框中有一个专门的按钮让你可以看到应用程序中类型的定义情况。通过在一个应用中不断使用类型定义,一个开发者可以很方便地确认哪个VI会被某个定义改变影响。
Picture

        如
Demo 展示的那样(上图),我们可以看到最上层VI“Demo”需要知道所有子VI“Caller”所发生的动作造成的任何改变。我们也可以看到,“Chan Name”(通道名)的改动也会影响“Chan Info”(通道信息)的类型定义,但是他们不会影响到“Demo”这个最高层。我们不去了解代码的任何细节就可以确认这些关系,只需要从这个层次图中就 能看出。

         我们可以从打开一个控件编辑器开始说起:

Picture

         在选择“
Type Def.”之前请将该控件保存成另一个名字。

Picture
 
       你可以打开缺省的图标,选择大部分的内容,见下图。

Picture

         选择已存的图片,并将它放在左下角,如下图所示:

Picture
Picture

         由于该图标还保存着原始
LabVIEW的样子,从而可以很方便地在层次图中辨认出类型定义类。

Picture
Picture
 

altenbach

Picture

        我确定,每个LabVIEW开发者都会碰到一个麻烦事,那就是在运行老的或者更新的代码时,会出现Stacked Sequence问题。

       Stacked Sequence(特别是带有Sequence Local的)特别具有迷惑性、不可读性以及不可维护性。各个方向的数据流(大多数从右到左)使得代码的大部分都被隐藏,此外也不可能很好地进行调试。由 于经常数据依赖性会比较清晰(或者执行顺序不相关),因此顺序结构没有任何意义。
       现在稍微成熟点的开发者都不会使用Stacked Sequence,而使用Flat Sequence。

       下面是一个例子:

Picture

        虽然代码看上去还可以,但是如果你试图重新连线的话,那么肯定会出问题,而且我们也没多余的控件添加输入点了。

        如果我们对着Sequence点右键,我们也只能去除单个的桢,并且会断掉所有的连线,这是我们不想看到的结果。

Picture

        不过我们还不能轻言放弃……我们可以简单地将
Stacked Sequence转换为Flat Sequence,好,首先第一步:

Picture

        对于这个例子,我们也可以移除所有
Flat Sequence以及连线,然后整理代码,让所有代码都看上去清楚多了。

Picture

         总结而言,这样简单的两步就能允许我们将
Stacked Sequence简化,并不造成任何中断代码的危险。


Picture
 

tst

Picture


        LabVIEW自带的控件被设计得比较可读也很好用,但是它们看上去也有点无聊。


       有很多方法可以让你来改变你应用程序的外表,从修改你控件的颜色到使用系统颜色与系统控件来看上去更有趣一点。

       今天,我给大家讨论一个新的做法,也许很多用户都不太清楚,那就是在自定义时使用外部资源。
基本上,每一个控件都是由几个部分组成的,其中一些无法很好地进行自定义,而有些部分却通常是图片,你可以替换任何东西。
        让我们从Office 开始用起,我们知道,LabVIEW的图片都是基于矢量的图片,因此你可以重新设置它的大小而不出现失真。而Office中的一些图片也同样是基于矢量 的,因此你就可以直接讲在Word或Powerpoint中的图片复制到VI中来,而让你的控件显得更为好看。显然,其它一些软件的图片也可以这样来用, 但是Office是我最常用的。

       下图是一个简单的例子,这是两个指针,而其覆盖物则分别由两个在Powerpoint中生成的渐变色图。你可以看到,这种做法使得你的前面板看上去完全不一样,并且更为吸引人。

Picture

注意
——至少在我用的LabVIEW版本中,内置的LabVIEW粘贴板不会在你Office中复制的图片中得到图片。你需要先讲你的控件设置在自定义模式,然后点击右键,并选择Copy to Clipboard。


这边是另一个例子,也是用指针控件来实现的:

Picture

        左图中你可以看到,我们可以通过使用合适的背景图以及替换覆盖部分,就可以做出一个很经典的钟表。

        从中间图中你看到,如果滥用一些颜色或者皮肤的话,就会出现画虎不成反类犬的效果。因此,最重要的一点是一切技巧都不能滥用。
        在右图中,你可以看到另一个很好的一点—--Office图片支持透明度设置,而且这个属性也能直接转换到LabVIEW中。此外,你也可以使用透明的GIF或者PNG图片,来实现一些任意形状的控件效果。

Picture
       上图也显示了,我们可以通过讲数值文本背景设为透明,然后替换其它形状图片,从而实现控件的形状重塑。
        附件有三个VI:分别展示了钟表控件、星际舰队动画以及自定义控件中使用动画GIF。
Picture