0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

LabVIEW子VI设计—多态VI与自适应VI

华穗科技 来源:华穗科技 2023-10-23 14:37 次阅读

使用LabVIEW编写程序时,工程师都会将自己程序中的部分代码封装为子VI,而封装的部分可能是某个经典的算法,也可能是调用某个设备的专用代码,还可能是实现某个功能的模块。总之,为了提高程序的整洁度和可阅读性,使用模块化思想去封装子VI是开发过程中十分重要的步骤。

而在封装子VI的过程中有时会遇到功能实现相类似但输入数据类型不同的情况,这时可能需要封装多个子VI以满足所有的需求,LabVIEW其实提供了更适用的方法,今天小编为大家带来的子VI设计中的多态VI和自适应VI就是为此而生,进一步简化程序并提高可阅读性。

一、多态VI 多态VI的概念: 多态VI最早是在LabVIEW 6.0被引入的,它能够在指定的输入以及输出端口上接受不同的数据类型。不同的数据类型可以是指不同的数据表示法或不同的数据维数大小。一个多态VI是一组子VI的集合,这些子VI都有一个共同的特点,它们的连线板模式都是类似的,每一个子VI对应着多态VI中的一个VI实例。LabVIEW中有很多多态VI,比如NI-DAQmx驱动库中的读取、写入、定时、触发等。

多态VI的使用场景:

当我们想要对不同数据类型的数据执行类似或相同的操作的时候,就可以使用多态VI。根据连接在输入接线端上数据的类型不同,多态VI会自动选择对应的实例子VI。多态VI允许用户将它应用到功能类似的不同应用实例中去, 并且这些不同的应用实例处理了不同的数据类型的数据。这样就可以让用户把数据类型不同所造成的VI结构差异在VI的内部就自动处理掉,从而不需要为不同的数据类型放置多个不同的处理VI。

创建多态VI:

1、创建不同的子VI实例,小编创建了几个不同数据类型简单计算的实例,;

f3132862-716c-11ee-939d-92fbcf53809c.png

2、在LabVIEW的新建模板界面选择新建多态VI;

f32e377e-716c-11ee-939d-92fbcf53809c.png

3、在创建的多态VI中选择添加刚才创建的几个实例VI,添加完成后可以给它们分别自定义菜单名称(在程序框图面板右键多态VI>>选择类型中显示的名称)和选择器名称(多态VI选择器显示的名称);

f335bf44-716c-11ee-939d-92fbcf53809c.png  

4、根据需要勾选对应的配置,其中程序框图外观勾选“绘制多态VI图标”和“绘制实例VI图标”会决定多态VI显示的图标。“默认显示选择器”选项决定在使用时图标下方是否显示多态VI选择器(举例说明:NI-DAQmx的定时API就是一个多态VI,而它图标下面的下拉列表框其实就是多态VI选择器)。“允许多态VI自动匹配数据类型”选项可以让多态VI自动识别输入的数据类型并选择对应的实例;

f33970bc-716c-11ee-939d-92fbcf53809c.png

5、多态VI就制作完成后测试其功能。如下图所示,连接不同数据类型时多态VI会自动选择并执行对应的实例,后续如果要扩展其兼容的数据类型,可以向多态VI中添加新的实例VI;

f343c468-716c-11ee-939d-92fbcf53809c.png

二、自适应VI

自适应VI的概念:

自适应VI可以自动适应输入的数据类型,它的所有接线端均为多态。用户每次将输入数据连线至接线端时,自适应VI将自动检查连线的数据类型是否可以接受。如可以接受该类型,自适应VI会将接线端自动调整为该输入数据类型;如果不接受该类型则会显示断线。通过自适应VI可以对任意可接收的数据类型执行相同的操作,而无需为每种数据类型保存单独的VI副本。

自适应VI的使用场景:

自适应VI和多态VI的使用场景相类似,需要对不同数据类型进行相似处理的时候使用,为了提高灵活性,自适应VI也可以支持对某些特定数据类型进行特殊处理。LabVIEW 2020就加入了一些自适应VI,它们的图标都是以橙色为背景,比如数组选板中的“排序二维数组”。

创建自适应VI:

1、在LabVIEW的新建模板界面选择新建自适应VI,也可以新建一个普通VI后将其后缀名更改为.vim,这个VI就会变为一个自适应VI;

f34c15f0-716c-11ee-939d-92fbcf53809c.png

2、使用“类型专用结构”编写自适应VI的功能,如果有特殊数据类型需要做特殊处理,可以单独为其创建分支来处理该数据。小编创建了一个数组求和的自适应VI,该VI可以对一维数组进行求和。其中一维布尔数组要先经过“布尔至0,1转换”之后再求和;一维字符串数组要先进行“分数/指数字符串至数值转换”后再求和。

f34fd6b8-716c-11ee-939d-92fbcf53809c.png

一维数组求和

f35e306e-716c-11ee-939d-92fbcf53809c.png

对布尔数组进行特殊处理

f36b89d0-716c-11ee-939d-92fbcf53809c.png

对字符串数组进行特殊处理

3、自适应VI创建完成后测试其功能。如下图所示,该自适应VI可以自动适配输入的一维数组数据类型并且执行对应功能,如果后续有要扩展的数据类型,也可以直接打开自适应VI为它创建专用的分支。

f379f060-716c-11ee-939d-92fbcf53809c.png

、两者对比

多态VI与自适应VI都可以为不同输入数据类型执行其对应的功能,但他们并不是完全相同的,它们之间也有一些不同点,下面这个表格可以清晰地看到两种VI之间的一些对比:

多态VI 自适应VI
实现方式 带一组预定义的可接受数据类型的实例VI组。 自动计算实现是否接受某种数据类型的单个VI。
连线板 不同实例VI可以自定义不同的连线板。 所有数据类型的连线板相同。
生成 为每种数据类型创建一个实例VI,并将实例VI包含在多态VI中。 创建带.vim文件扩展名的VI,或通过将VI扩展名更改为.vim以将标准VI转换为自适应VI。
自定义 在不同实例VI中实现不同的代码,以此对不同数据类型定义不同行为。 使用类型专用结构在自适应VI中为特定数据类型自定义代码。
自适应类? 否,调用类A方法a的多态VI只接受类A或类A的子孙类。 是,如果自适应VI调用类A方法a,则其可接受任何具有与类A方法a相同名称、连线板模式、接线端方向的公共方法的类。

在封装子VI时,工程师应该在什么情况下选择使用多态VI?在什么情况下使用自适应VI呢?下面这个表格可以带给我们答案:

类型 适用场景
多态VI 1、对于不同的数据类型,操作的实现不同。
2、不同数据类型的连线板不同。
自适应VI 1、可对不同数据类型以相似方式实现操作而无需针对特定数据进行大量自定义。
2、面向对象编程时可以自动适应输入类。






审核编辑:刘清

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 驱动器
    +关注

    关注

    51

    文章

    7310

    浏览量

    142969
  • LabVIEW
    +关注

    关注

    1918

    文章

    3619

    浏览量

    316997
  • 选择器
    +关注

    关注

    0

    文章

    103

    浏览量

    14324

原文标题:知识分享 | LabVIEW子VI设计—多态VI与自适应VI

文章出处:【微信号:华穗科技,微信公众号:华穗科技】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    labview vi 按钮

    我的 labviewvi有个按钮,其他vi调用时前面板不显示这个按钮,(必i须在vi中搞个接
    发表于 05-09 16:45

    【资料】多态VI

    多态VI,刚看到的,分享给大家,希望对新学者有帮助。。。。。。
    发表于 12-11 13:50

    LabVIEW中DAQmxVI断开或这是“无法执行VI”?

    最近弄LabVIEW数据采集的内容,打开了一个老师给的代码给出的错误就是DAQmx Read 多态VI无法执行或者是
    发表于 02-26 15:30

    多态VI已断开,运行该VI前必须解决多态VI的所有错误。

    多态VI已断开,运行该VI前必须解决多态VI的所
    发表于 01-14 20:35

    LabVIEW多态 VI (Polymorphic VIs)的使用

    对不同的数据类型的数据执行类似或相同的操作的时候,多态 VI 就会非常有帮助。 根据连接在输入接线端上的数据的类型的不同, 一个对应的 VI 就会被
    发表于 05-10 21:04

    VI图标和连线板

    当一个VI A.viVI B.vi 中使用,就称A.vi为B.vi的子
    发表于 09-12 10:41 33次下载

    基于Labview的程序设计一个具有一定功能的VI

    基于Labview的程序设计一个具有一定功能的VI。 本次设计是创造一个子VI实现数组的选转,然后调用此子VI再加上条件结构和循环结构实现数组顺时针逆时针的选择和角度的
    发表于 12-21 18:24 0次下载

    Labview之上调用子VI

    Labview之上调用子VI,很好的Labview资料,快来下载学习吧。
    发表于 04-19 09:54 0次下载

    Labview之子VI的建立

    Labview之子VI的建立,很好的Labview资料,快来下载学习吧。
    发表于 04-19 10:23 0次下载

    labview如何调用子vi

    labview如何调用子vi?这种技巧经常用在多个参数顺序测量时,实现波形实时切换,显示当前测试参数的波形。具体步骤为:在主VI中右键,单击选择VI,即可选择需要调用的
    的头像 发表于 11-14 16:10 4.7w次阅读

    LabVIEW编程实用教程之多态VI的创建的视频教程免费下载

    本文档的主要内容详细介绍的是LabVIEW编程实用教程之多态VI的创建的视频教程免费下载。
    发表于 12-27 08:00 15次下载

    LabVIEW编程的实用技巧多态VI的创建视频教程免费下载

    本文档的主要内容详细介绍的是LabVIEW编程的实用技巧多态VI的创建视频教程免费下载。
    发表于 03-07 08:00 8次下载
    <b class='flag-5'>LabVIEW</b>编程的实用技巧<b class='flag-5'>多态</b><b class='flag-5'>VI</b>的创建视频教程免费下载

    LabViEW编程之VI服务器综述

    LabViEW编程之VI服务器综述
    发表于 09-09 10:14 20次下载

    LABVIEW打开调用子VI的几种办法

    总结了LABVIEW打开调用子VI的几种办法,程序写法
    发表于 08-20 15:31 49次下载

    LabVIEW中执行系统命令VI介绍

    LabVIEW自带一个执行系统命令VI(System Exec.vi),位于函数选板的“互连接口”>>“库与可执行程序”>>“执行系统命令”
    的头像 发表于 04-25 11:47 6361次阅读
    <b class='flag-5'>LabVIEW</b>中执行系统命令<b class='flag-5'>VI</b>介绍