版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
LabVIEW面向对象程序设计IntelligentElectronicsInstituteHuazhongUniversityofScience&Technology2目录面向对象LabVIEW与面向对象程序设计LabVIEW对象基本实现LabVIEW对象高级技巧实例介绍提示与建议习题36.1面向对象对象与类的概念对象是系统中用来描述客观事物的一个实体,是构成系统的基本单位,由属性和对这些属性进行的操作等构成;类是对象的抽象及描述,是具有共同属性和操作的多个对象的统一描述体,类也是对象,是一种集合对象;在类的描述中,每个类要有一个名字,要表示一组对象的共同特征,还必须给出一个生成对象的实例的具体方法;类中的每个对象都是该类的对象实例,系统运行时通过类定义属性初始化可以生成该类的对象实例。6.1面向对象属性与方法的概念对象是属性及方法的封装体;对象的属性是指描述对象的数据,这些数据可以是系统或用户定义的数据类型,也可以是一个对象的数据类型;对象的方法是指定义在对象属性上的一组操作的集合;方法是为响应消息而完成的算法,表示对象内部实现的细节,对象方法集合体现了对象的行为能力;对象的属性和方法是对象定义的组成要素,它们统称为对象的特征。46.1面向对象面向对象中的三要素:在面向对象的程序设计中,封装就是把相关的数据和代码结合成一个有机的整体,形成数据和操作代码的封装体,对外只提供一个可以控制的接口,内部大部分的实现细节对外隐蔽,达到对数据访问权的合理控制;在面向对象程序设计中,继承表达的是类之间的关系,这种关系使得一个类可以继承另一类的属性和方法,从而提供了通过现有的类创建新类的方法,也提高了软件复用的程度;多态是面向对象程序设计的重要特性之一,是指不同的对象收到相同的消息时产生不同的操作行为,或者说同一个消息可以根据发送消息的对象的不同而采用多种不同的操作行为。5封装继承多态6.2LabVIEW与面向对象程序设计LabVIEW引入面向对象编程时的术语LabVIEW依然使用家族关系术语:父与子、兄弟与堂兄弟等,这些都是用户已经熟悉的术语,当提到某个类的父类时,都可以理解这两个类之间的关系;LabVIEW类成员的限定性术语:依然采用“私有的”、“共有的”和“受保护的”等词汇。66.2LabVIEW与面向对象程序设计继承LabVIEW在实现继承特性时坚持这样一条原则:LabVIEW用户能够实现类的继承,可以选择一个已有类作为父类,创建一个子类,并且可以覆盖父类中的方法;LabVIEW提供了(Object)类,作为所有LabVIEW类的祖先;LabVIEW目前只支持公共继承,而不支持私有继承和多继承。76.2LabVIEW与面向对象程序设计封装LabVIEW实现了类的封装,但对封装特征进行了选择;LabVIEW类只包含对私有数据的支持,不提供公共数据和受保护的数据两种属性;LabVIEW类中的方法,不仅可以是私有的,还可以是公共的或受保护的。86.2LabVIEW与面向对象程序设计多态多态性表现有两种,即编译时的多态性和运行时的多态性。编译时的多态性是用函数的重载来实现的,运行时的多态性是用虚函数来实现的,而这两种方式在LabVIEW的类中都没有实现。首先,LabVIEW类不支持重载,但这种多态性的思想在LabVIEW的早期版本中就一直存在并发挥着重要作用,主要表现为多态的函数、VI和单位;其次,对于虚函数而言,“虚拟”和“虚拟分配”的概念在LabVIEW中也面临一些问题,LabVIEW面向对象编程选择了“动态”和“动态分配”来代替这两个术语。96.3LabVIEW对象基本实现创建类通过菜单“File→New→Class”或者在项目浏览器的右键快捷菜单中选择“New→Class”项,都可以创建LabVIEW类;创建类时,LabVIEW将创建一个新的类库文件(.lvclass),该文件可以记录类的私有数据控件(PrivateDataControl)和所有被创建的成员VI的信息,包括VI列表及VI的属性等;类的数据被定义在私有数据控件中,私有数据控件是一个数据簇,与类库文件是一一对应的,并保存在类库文件中,私有数据控件的名称以“.ctl”作为扩展名。106.3LabVIEW对象基本实现私有数据控件示例11类库文件中的私有数据控件6.3LabVIEW对象基本实现编辑私有数据成员在项目浏览器窗口双击类的私有数据控件,可以对类中的数据成员进行编辑,将需要的控件放置到该类的定义私有数据控件中,作为类私有数据簇中的成员。12私有数据成员
6.3LabVIEW对象基本实现
设置继承在LabVIEW中,通过“继承”可在现有类的基础上创建一个新类;当一个新类被设置为继承另一个LabVIEW类时,这个新类就可以使用它所继承的类中“公共”及“保护”型的成员VI;在LabVIEW中,所有的类都默认继承LabVIEWObject的基本类。136.3LabVIEW对象基本实现设置继承示例14默认继承关系6.3LabVIEW对象基本实现改变类的继承关系在类名称上右击,进入属性设置对话框,选择“继承”(Inheritance),然后单击“更改继承”(ChangeInheritance),可改变类的继承关系。15更改后的继承关系6.3LabVIEW对象基本实现创建方法在类名称上右击,选择需要创建VI的类型:普通成员VI、动态成员VI或重写VI(OverrideVI)。166.3LabVIEW对象基本实现新建静态成员VI新建静态成员VI后,会打开一个空面板的VI,用户可以根据应用需要添加程序代码;静态方法只有单个VI,在子类中无法创建与父类静态成员VI相同名称的成员VI。176.3LabVIEW对象基本实现新建动态成员VI新建动态成员VI后,会打开一个含有部分代码的VI,其中包括错误输入簇、错误输出簇、用于错误处理的条件结构,以及输入LabVIEW类和输出LabVIEW类;动态成员VI主要出现在具有继承关系的LabVIEW类中,只有当子类需要继承并重写父类中的某些VI时,这些VI才有必要设置为动态成员VI。18“大四学生”类中获取成绩的程序框图6.3LabVIEW对象基本实现创建重写成员VI重写成员VI是对祖先类中动态VI的重写,必须与祖先类中的同名成员VI具有相同的重入设置、首选执行设置、优先级设置、连线板接线端、连线板模式和访问范围;创建重写成员VI时,LabVIEW会自动调用父类方法的节点、动态输入和输出类接线端及其他匹配祖先类VI所需的接线端并放置在程序框图中;当选择创建时若不存在可重写的祖先类成员VI,LabVIEW将禁用重写成员VI的选项。196.3LabVIEW对象基本实现右击“保研生”类,选择“新建”下拉列中的“用于重写的VI”,会出现一个提示框用于选择需要重写的动态VI。我们选择“大四学生”类下的“获取成绩.vi”,LabVIEW会自动生成一个“保研生”类下的“获取成绩.vi”。20“保研生”类中获取成绩的程序框图6.3LabVIEW对象基本实现输入或输出接线端对于动态VI,右键单击连线板上的输入或输出接线端,会发现其连接为动态分配模式。21“保研生”类中获取成绩的输入端口6.3LabVIEW对象基本实现动态分派程序在编写程序时,动态成员VI在程序背面板上就像一般的子VI一样,不过当运行时,输入端口传递进来的数据就决定了调用哪个类中的成员VI。226.3LabVIEW对象基本实现访问范围设置LabVIEW类只包含私有成员数据,但可以为类的成员VI指定访问范围。成员VI的访问范围选项包含如下设置:公共(Public),任何VI都可以调用该成员VI;保护(Protected),仅该成员VI所在类及其子类中的VI可以调用该成员VI,在项目浏览器窗口中受保护的成员VI图标中有一个暗黄色的钥匙符号;私有(Private),仅该成员VI所在类中的VI可以调用该成员VI,在项目浏览器窗口中私有型的成员VI图标中有一个红色的钥匙符号。236.3LabVIEW对象基本实现在类上右击,选择属性后可以设置一个VI的访问范围246.3LabVIEW对象基本实现使用类在创建LabVIEW类的实例时,用户可直接将这个类的类库文件(.lvclass)作为控件或常量放置在相应程序的前面板或程序框图中;在LabVIEW类中,所有的私有数据被定义为一个簇,通过在成员VI的程序框图中调用函数来访问和操作这些数据;对LabVIEW类进行捆绑或解除捆绑时,节点上仅显示当前类私有数据的接线端,而不显示从父类继承的数据的接线端。25使用类获取大一成绩程序框图6.4LabVIEW对象高级技巧构造函数与析构函数在一般的面向对象程序设计语言中,对象在创建和销毁时会自动调用两个函数:构造函数和析构函数;构造函数的作用是在对象被创建时利用特定的值构造对象,将对象初始化为一个特定的状态,使对象具有自己的特征;析构函数则用来完成对象被删除前的一些清理工作,析构函数调用完成之后,对象将被销毁,相应的内存空间也被释放;在LabVIEW的面向对象编程中,构造和析构是隐含的,不需要用户编写或调用。266.4LabVIEW对象高级技巧内存分布在LabVIEW中,类的高效存储是一个挑战性的问题。一个类的数据包括从父类继承来的数据簇和自身的私有数据簇。276.4LabVIEW对象高级技巧在类实现时,LabVIEW需要为一个类分配数据空间286.4LabVIEW对象高级技巧动态分配动态分配是LabVIEW的一个特色,一个看似单个VI调用的节点在运行时实际上调用的是一组VI中的某个,这取决于运行时动态分配输入端连线上的值;每一个在连线上传递的对象都含有指向其类信息的指针,这个类信息包含了一个“动态分配表”,它是一个VI引用表;每个类首先复制了其父类的动态分配表,同时它用自身重写的VI方法替换父类中对应的方法,然后将没有重写的父类动态分配VI添加到表中。296.4LabVIEW对象高级技巧动态分配的示例306.4LabVIEW对象高级技巧XcontrolXControl可用于在LabVIEW中设计和创建复杂的控件,并且它的运行方式由后台运行的VI决定;XControl包括控件的动作;在VI中使用XControl可简化该VI的程序框图。316.4LabVIEW对象高级技巧XControl的创建和应用创建XControl:两种方法一是选择菜单项“File→New→OtherFiles→XControl”;二是在项目浏览器的右击快捷菜单中选择“新建→XControl”。326.4LabVIEW对象高级技巧新建Xcontrol33新建的Xcontrol界面6.4LabVIEW对象高级技巧Xcontrol示例:双重温度计34SimpleDualModeThermometerXControl.xctl6.4LabVIEW对象高级技巧每个XControl包含必须以下四个模块:数据(Data)——这是一个自定义类型控件,定义了XControl的数据类型;状态(State)——也称为显示状态,是一种自定义类型控件,定义了所有影响控件外观的信息(除XControl的数据外);外观(Facade)——外观VI的编写在XControl的设计中最为重要,它的前面板决定了XControl的外观,它的程序框图描述了XControl的功能;初始化(Init)——第一次将XControl放在前面板,或当包含XControl的VI被加载到内存时,LabVIEW将调用Init模块。356.4LabVIEW对象高级技巧除了4个必须模块以外,在XControl中还可以创建属性、方法、VI、文件夹等;右击XControl,在“新建”目录下单击“属性”项创建属性,首先需要将属性命名并选择该属性的读/写模式,然后再编写属性的VI;将XControl拖放到前面板时,它就已经开始工作了,打开XControl的外观VI,其为运行状态,不可编辑,只有当所有调用了该XControl的VI全部关闭之后,才可以编辑外观VI;调用XControl的属性和方法与一般控件类似。366.4LabVIEW对象高级技巧SimpleDualModeThermometerXControl的应用示例前面板376.4LabVIEW对象高级技巧程序框图386.4LabVIEW对象高级技巧多态技术:多态函数在LabVIEW中,多态函数是指能够自动适应不同类型输入数据的函数;多态函数广泛出现在各种不同数据类型的操作中,包括数值函数、布尔函数、数组函数、簇函数、字符串函数及比较函数等操作。396.4LabVIEW对象高级技巧多态的加法函数406.4LabVIEW对象高级技巧多态技术:多态 VILabVIEW提供了一些具有多态性的系统子VI;多态VI可在一个输入或输出端接收不同的数据类型;多态VI是具有相同模式连线板的子VI的集合,该集合中的每个VI均为多态VI的一个程序实例。416.4LabVIEW对象高级技巧创建多态VI创建多态VI时需考虑以下几个方面:多态VI中所包含的所有VI必须具有相同的连线板模式;多态VI每个实例连线板上的输入/输出端口必须与多态VI连线板上的输入/输出端口相对应;用来创建多态VI的VI不必包含相同的子VI和函数,每个VI的前面板也不必包含相同的对象,但是每个前面板上控件的数目至少应与组成多态VI连线板中的控件数目一致;在创建多态VI时隐藏多态VI选择器,就可以由连接到多态VI输入端的数据类型来自动选择使用哪个实例。426.4LabVIEW对象高级技巧创建多态VI示例首先在LabVIEW的File菜单中选择“新建→多态VI”43多态VI的初始界面6.4LabVIEW对象高级技巧然后创建两个将变体形数据转化为String数组的VI。44将二维变体形数据转化为二维String数组6.4LabVIEW对象高级技巧45将一维变体形数据转化为一维String数组6.4LabVIEW对象高级技巧最后在多态VI的初始界面中将这两个VI添加到“实例VI”(InstanceVIs)中,编辑好图标,并保存为DB_VarToData.vi,该VI即为一个多态VI。46变体形数据转化为String数组的多态VI6.4LabVIEW对象高级技巧锁定在LabVIEW中,可以通过锁定LabVIEW类来保护类的私有数据信息;锁定类可阻止LabVIEW类用户访问应用程序内部的成员VI,从而预防将错误引入应用程序。476.4LabVIEW对象高级技巧锁定类的设置48在类属性对话框中锁定类6.4LabVIEW对象高级技巧类未锁定与锁定时即时帮助的区别如果一个LabVIEW类未被锁定,则当光标在类的连线上移动时,即时帮助窗口将显示该类的私有数据,以及该类所有未锁定的父类的私有数据;当光标在锁定的类的连线上移动时,即时帮助窗口中仅显示连线数据类型。496.4LabVIEW对象高级技巧50类未锁定的即时帮助类锁定的即时帮助6.4LabVIEW对象高级技巧添加对类的描述在类的属性框中单击选择“说明信息”(Documentation)选项,在“说明”(Description)中可以添加对类的描述。516.4LabVIEW对象高级技巧探针探针是LabVIEW程序调试的主要工具之一;在LabVIEW类连线上可以使用通用探针来调试数据,通用探针显示了运行时该类的类名、类私有数据和该类父类的私有数据;用户可以根据需要为LabVIEW类创建自定义默认探针来实现更有效的数据调试。526.4LabVIEW对象高级技巧未锁定与锁定的探针的区别53未锁定的探针锁定的探针6.4LabVIEW对象高级技巧创建自定义探针在希望使用自定义探针的连线上右击,选择“自定义探针”(CustomProbe)项,下拉列表中可以选择已有的自定义探针,或通用探针(GenericProbe),或控件,或者新建一个自定义探针。546.4LabVIEW对象高级技巧TruckCustomProbe.vi的程序框图556.4LabVIEW对象高级技巧自定义探针的使用566.5实例介绍通过LabVIEWExample的一个电路板检测(BoardTesting.lvproj)的实例来进一步说明面向对象编程的设计思路,以及其相比于传统面向任务编程的优势。576.5实例介绍测试要求某公司生产了三种计算机板卡,分别为低端数据采集卡(BasicDAQBoard)、高端数据采集卡(EliteDAQBoard)和GPIB板卡(GPIBBoard);该公司为了检测三条流水线上每一块板卡的元件是否摆放正确,在每一条流水线上都放置了一个摄像头,将板卡的图片发送到同一台计算机上,计算机通过检测程序来判断板卡的各个元件是否摆放正确。586.5实例介绍三种板卡的元件摆放方式59低端数据采集卡高端数据采集卡GPIB板卡6.5实例介绍解决方案针对上述测试要求,可以采用面向任务和面向对象两种解决方案。606.5实例介绍面向任务的解决方案(TestBoards_TASK.vi)61模拟产生来自摄像头的板卡图像获取板卡类型及板卡图像对每种板卡用单独的VI进行测试获取测试板卡的ID号获取测试板卡的类型输出测试结果6.5实例介绍面向任务的解决方案(TestA.vi)626.5实例介绍面向对象的解决方案(TestBoards_OBJECT.vi)程序使用三个子VI替代了面向任务的解决方案中相对复杂的Case结构。63根据输入的板卡类型产生相应的对象检测输入的对象获取测试板卡的ID号及类型6.5实例介绍面向对象的解决方案(CheckImageMatchesDesign.vi)646.5实例介绍面向对象的优势面向对象的方法是将系统分解
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 农工工作制度
- 半天工作制度
- 产房里工作制度
- 制卡工作制度
- 乡统战工作制度
- 农广校工作制度
- 2026 年中职港口与航运管理(港口航运)试题及答案
- 雪天出行安全提示
- 软乳膏剂设备验证方案
- 患者服务与安全
- 2026年宁夏公务员考试《行测》试题及答案
- 2025年怀柔区事业编考试真题及答案
- 癫痫预测模型的泛化能力提升策略研究
- 小学统计与概率培训课件
- 2026届陕西省高三二模高考数学模拟试卷试题(含答案详解)
- 2025年保密知识测试试题库及答案
- 知情同意与拒绝治疗
- 【2025年】军事知识竞赛题库及答案
- 血液透析患者的血压管理
- 中国2型糖尿病防治指南(2024年版)解读
- 2025年西藏自治区中考地理试卷(含答案)
评论
0/150
提交评论