我和LabVIEWword版——一个NI工程师十年的编程经验51-9481.LabVIEW 中的类.doc

我和LabVIEWword版——一个NI工程师十年的编程经验51-9481.LabVIEW 中的类.doc

ID:36003331

大小:215.50 KB

页数:5页

时间:2019-05-02

我和LabVIEWword版——一个NI工程师十年的编程经验51-9481.LabVIEW 中的类.doc_第1页
我和LabVIEWword版——一个NI工程师十年的编程经验51-9481.LabVIEW 中的类.doc_第2页
我和LabVIEWword版——一个NI工程师十年的编程经验51-9481.LabVIEW 中的类.doc_第3页
我和LabVIEWword版——一个NI工程师十年的编程经验51-9481.LabVIEW 中的类.doc_第4页
我和LabVIEWword版——一个NI工程师十年的编程经验51-9481.LabVIEW 中的类.doc_第5页
资源描述:

《我和LabVIEWword版——一个NI工程师十年的编程经验51-9481.LabVIEW 中的类.doc》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库

1、LabVIEW中的类一、创建一个空的类在LabVIEW工程窗口里,鼠标右键菜单的新建栏中有一项,是创建类。类的结构和LabVIEW工程库是比较相近的:类的名字也作为名字空间;也可以为类中的VI设置访问权限等。类在硬盘上被保存在一个.lvclass文件中。这个文件其实是一个XML格式的文本文件,它的格式与.lvlib类似。类是一个抽象的定义,符合这个类的实体,叫做类的实例。这有点类似数据类型和数据之间的关系。我们先来创建一个名叫Animal的类吧,用它来描述一些动物的属性和行为。现实中,通过特定的属性和方法(行为)来定义某一类事物;与之对应的LabVIEW中的概

2、念是类的数据和VI。动物类是一个类,符合这个概念的任何一个实体比如某一只小猫,一条小狗就是这个类的实例。程序中处理的都是这些实例。图1:创建类的菜单二、类的属性在工程窗口中可以看到,每个类包含数个VI和一个与类同名的.ctl项。尽管它的面板与设置方法与用户自定义控件类似,但它实际上并不是一个独立的用户自定义控件。此外,类的.ctl项必须是一个Cluster。Cluster中的元素就是这个类所使用的数据,相当于C语言的类中的变量。通过改变Cluster中的元素的默认值,你可以在这里设置类的属性的初始值。与C语言不同之处是,LabVIEW类中数据只能是私有的。公有

3、数据是最容易被滥用的。为了自己使用方便,非常专业的编程人员常常倾向于把类中的数据都设置为公有,可以方便随时随地访问它。但这样一来就完全破坏了类的封装性,不加控制地访问类中的数据增加了模块间的耦合度,使得可读性和可维护性都大大降低。通过类的方法访问类中数据就安全得多。比如我们可以在方法中添加对写入数据的合法性检查,在数据越界时报错等。这样也有利于调试。比如我们需要跟踪某个类的数据的变化,如果数据是公有的,程序运行时就无办法预知它是在那里被改变的。若数据是私有的,我们就可以确定它只在类中设置它的VI中被改变。只要在这个VI上加个断点,就可以在调试时,令程序在数据被

4、改变之前暂停运行。LabVIEW相当一部分用户是非计算机专业的人员。对于他们来说,概念越简单越好。类的数据强制为私有类型,可以避免他们接触更多的程序设计概念,而直接引导他们使用最佳的程序设计方法。这样的设计方法唯一不足之处是:即便是的确需要被类之外的VI直接访问的数据,也必须给他们创建一个公用的方法,通过这个方法间接访问这个数据。幸好,类的右键菜单中有一项专门为数据创建访问VI的选项(VIforDataMemberAccess...)。通过它,可以便捷地创建出数据访问VI以供使用。现在,回到我的Animal类:它有两个属性,分别是动物的年龄和颜色。于是我在Cl

5、uster中放了两个分别表示年龄和颜色的控件。图2:添加类的数据(类的属性)三、类的方法鼠标右键点击在类上,就可以为类创建VI,也就是类的方法。图3:创建新方法在上图新建这一栏下可以看到很多条目:VI,就是指创建一个普通的VI。VirtualFolder,是文件夹。如果类中的方法很多,可以把它们归类到不同的文件夹中,便于管理。VIfromDynamicDispatchTemplate,所创建出来的VI类似于C语言中的虚函数。应用程序再调用这个VI的时候,可能实际执行的是某个子类中的同名方法。VIfromStaticDispatchTemplate,所创建的VI

6、比普通VI多了类方法最常用的代码框架。程序员可以省去一些自己画错误处理选择框的时间。它与VIfromDynamicDispatchTemplate唯一的区别在于:类输入输出接线端子(这个例子中是“Animalin/out”)不是动态调度的。(参见图4:动态调度的接线端子)VIforDataMemberAccess...,因为类的数据全部是私有的,所以需要借助公有VI来访问他们。这个选项可以帮你快速建立读写类中数据的VI。VIforOverride...,这个选项是专门给子类用的。用来创建覆盖父类方法的VI。Control,创建用户自定义控件,这一条与类的概念不

7、相关,仅为了方便用户。图4:动态调度的接线端子在类的类的属性面板中可以设置类中每个VI是公有的还是私有的。这与工程库中VI的设置是类似的。可能你已经发现了,与其它语言不同,LabVIEW中的类没有构造和析构函数。构造函数在一个类的实例(数据为这个类的一个变量)生成时被自动调用,析构函数在它被销毁时自动调用。在C语言中,你可以明确地知道一个变量的生存周期。全局变量在程序启动时被创建,程序结束时被销毁;函数的局部变量在函数被调用时创建,退出函数时销毁,等等。这些都是程序在运行时的行为。但是在LabVIEW中,变量的生存周期不一定是在运行过程中。LabVIEW的变量

8、通常对应有一个前面板上的控件,控件包含

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。