labview从入门到出家3--制作和调用子VI
当程序越写越大的时候,我们会发现代码界面会比较乱(线太多),那要怎么做可以让代码更简洁一点,我只管直接调用某个功能函数,而不需要在一个VI上面去实现这个功能函数呢?——子VI。好比C语言里面的Main函数,只管调用实现功能的函数,让主代码整体逻辑清晰明了,而复杂的处理和运算过程就交给里面的函数去实现。
这里拿个简单的例子,一通百通。如之前的加法程序,只有一个VI,然后VI里面的逻辑就是为了实现加法的功能,如果我们要增加减法,乘法和除法等运算,就要把所有这些逻辑全部写一个VI里面(这里是因为程序实现逻辑简单,所以视觉效果可能没那么好,当要实现一个逻辑复杂的功能时,界面的可阅读和美观性就凸显出来了)。
1、主程序的功能是选择一个计算方式(加减乘除),按下确定按键后执行对应的计算功能,我们先搭建好下面主程序的框架。跟第二章中新建工程的操作一样,我们先新建工程,并新建一个名为calc的VI。

3、添加枚举变量,右键 编程->数值->枚举变量;点击枚举变量右键->>编辑项;

双击项,添加加减乘除四个项,并点击确定。

添加完后右键枚举变量->转换为输入控件,这时在前面板可以看到这个控件了(变量只有转换成输入输出控件的时候,才能在前面板显示出来,否则就是一个常量,用户无法在界面上对该变量进行操作)。连接该枚举变量到条件框,条件框自动识别枚举中的变量条件。


左键点击黑色的下三角,我们发现只有两个条件项,因为条件框默认只有两个条件,我们需要手动添加。

右键下三角->为每个值添加分支,再点击下三角时,就出现四个条件项啦,每个条件项对应一个条件分支框图。这时就可以上我们的加减乘除的子VI了。

4、我们先再项目工程的文件夹下新建一个subvi文件夹专门用来放工程的子VI,并在项目中新建VI,命名为add

相同的操作,新建多另外三个VI,分别命名为sub,multi,devi。右键添加文件夹(自动更新),在弹出的文件夹选项中选择我们新建的subvi文件夹。

我们会发现项目中多了一个subvi的文件夹,里面包含了我们刚新建的四个子VI。添加文件有四个选项,其中文件和文件(快照)不会实时更新我们的VI,需要手动更新,一般都添加“文件夹(自动更新)”,这样我们如果更改了子VI后,工程会自动更新。

5、随后双击指定的子VI,进入对应的程序框图实现各个子VI的功能:

保存各个子VI,随后进入到各个子VI的前面板。
调用子VI相当于C语言中调用子函数一样,如果子函数有输入输出,则需要声明输入的参数和返回一个输出,Labview的参数输入和返回值的声明如下图所示,进入前面板后,前面板右上角有一个格子状的图标,这个图标就是用来向外界声明输入参数和输出返回值的,一般我们将左侧的参数格子设为输入,右侧的格子设为输出,将格子绑定输入输出的操作:鼠标移动到图标里面的一个小格后点击一下,再移动到前面板的控件上点击一个对应的控件,这样格子就和控件绑定在一起了,相同的操作绑定另外两个控件,其中C控件是显示控件,是a+b后输出的值,应选择右侧的格子与之绑定。

绑定后如下图所示,为了在调用子函数的时候好识别一些,我们会给自定义图标的样式,方便我们调用和识别,右键选中格子右侧的VI图标,选择编辑图标。

配置如下所示,然后鼠标选择图标框框的一个边角往上拉,覆盖掉之前的图形(后续有专门的一章来描述如何编辑各种图标样式),

然后给图标内部写入文本,方便后续调用时,识别子VI的功能。另外三个子VI的操作相同,如下图所示:

6、回到主VI中,我们准备调用刚编辑好的子VI,在程序框图中右键->编程->选择子VI,添加对应文件夹中我们想要添加的VI,如add.vi。

将子VI分别放置在对应的条件分支框图中,其他子VI操作一致。

7、添加输入输出变量,右键生成a,b输入控件以及c显示控件,将输入变量和输出变量分别连接到各个子VI上。


8、我们发现连接后,连接线和条件框的交接处,左侧和右侧的不一样。左侧是实心的,右侧是空心的。这是因为这个节点还有其他分支没有连上,如果连完将变成实心。


9、目前基本功能是实现了,但是我们要的点击一个按键后才进行计算,而不是一输入参数就计算。操作方式跟第二章的一致,直接外接一个布尔控件的条件结构就可以了。在布尔控件的true条件分支下执行加减乘除的计算功能。最后调整一下界面,我们调用子VI的功能就完成啦!

9、目前基本功能是实现了,但是我们要的点击一个按键后才进行计算,而不是一输入参数就计算。操作方式跟第二章的一致,直接外接一个布尔控件的条件结构就可以了。在布尔控件的true条件分支下执行加减乘除的计算功能。最后调整一下界面,我们调用子VI的功能就完成啦!

不需要一头扎进Labview书籍,前期最主要的是培养兴趣和了解labview在我们以后发展的定位,等有了兴趣,有了基础,再借助书籍让自己进一步升华即可。前期,跟着老曹的入门目录学习就可以了。下一章给大家介绍一个功能强大的结构--事件结构,可以理解为单片机里面的中断事件。
原创不易,一键三连啦,若有不对或者讲解不到位的地方,欢迎在下方评论,我会及时更改!
labview从入门到出家3--制作和调用子VI的更多相关文章
- labview从入门到出家6(进阶篇)--移位寄存器的使用
前面介绍了如何熟悉和使用Labview自带的库函数以及调试方式,大家后期基本可以凭借这两个方式从入门到出家了,哈哈,后面就靠各位同仁99%的努力了.这篇为啥要讲移位寄存器呢,主要是之前做的项目和经验告 ...
- labview从入门到出家5(进阶篇)--程序调试以及labview函数库的运用
跟了前面几章的操作流程,相信大家对labview有了一定的认识.其实只要了解了labview的编程思路,再熟悉地运用各个变量,函数以及属性,那么我们就可以打开labview的大门了.跟其他编程语言一样 ...
- labview从入门到出家8(进阶篇)--简单好用的状态机
labview的状态机类似于一个软件框架的基本单元,好的软件框架和软件思路采用一个好的状态机,就如虎添翼了.这章给大家讲一个本人常用的一个状态机,基本上以前的项目都是建立在这个状态机上完成的,当然网上 ...
- labview从入门到出家7(进阶篇)--队列的使用
本节简单讲解队列在Labview中的使用,队列你可以认为就是一组先进先出的数据列表,在Labview中常用来缓存和传递数据.用了这么久的队列,个人认为有个方便的地方在于数据传递的把控,不管是局部变量还 ...
- labview从入门到出家1--第一个加法程序
概述: Labview在众多编程语言中排名靠后,显然在当今互联网,物联网时代并非主流语言.但是俗话说行行 出状元,即便不是立身于某个主流的领域,用好了依旧可以独领风骚,而且Labview对于硬件出身的 ...
- labview从入门到出家9(进阶篇)--串口通讯
Labview在工控领域,如产线,实验室等环境用得较多,其中与仪器通讯控制的方式有串口(RS232,RS485,TTL),GPIB,网口,CAN等,其中串口在仪器还有单片机控制中用来调试居多.(很 ...
- labview从入门到出家2--将“加法程序”制作成“exe应用程序”
1.上一章主要讲了如何跑我们的第一个加法程序(这里向第一个程序的鼻祖"hello world"致敬),这一章我们直接进入主题,将我们写的程序生成exe文件放桌面运行. 2.要生成e ...
- labview从入门到出家4--用事件结构实现运算功能
使用事件结构可以快速定位响应界面的操作事件,如按下,拖动,双击的事件.基本上我们所要实现的所有功能,都可以通过条件结构+事件结构去实现,比如后面进阶篇将会讲到的状态机就是通过条件结构和事件结构组成的. ...
- FFmpeg从入门到出家(HEVC在RTMP中的扩展)
由金山云视频云技术团队提供:FFmpeg从入门到出家第三季: 为推进HEVC视频编码格式在直播方案中的落地,经过CDN联盟讨论,并和主流云服务厂商达成一致,规范了HEVC在RTMP/FLV中的扩展,具 ...
随机推荐
- 【Azure 环境】使用Microsoft Graph PS SDK 登录到中国区Azure, 命令Connect-MgGraph -Environment China xxxxxxxxx 遇见登录错误
问题描述 通过PowerShell 连接到Microsoft Graph 中国区Azure,一直出现AADSTS700016错误, 消息显示 the specific application was ...
- VDO虚拟数据优化
VDOVirtual Data Optimize 虚拟数据优化 是一种通过压缩或删除存储设备上的数据来优化存储空间的技术. VDO 是红帽公司收购了 Permabit 公司后获取的新技术,并与2019 ...
- 如何用C/C++实现去除字符串头和尾指定的字符
编程时我们经常需要对字符串进行操作,其中有一项操作就是去除字符串的头(尾)指定的字符,比如空格.通常我们会使用封装好的库函数或者类函数的Trim方法来实现,如果自己动手写一个TrimHead和Trim ...
- 【前端干货】别再羡慕别人的Excel啦,教你点击按钮直接打开侧边栏!
负责技术支持的葡萄又来啦. 三日不见,我们的客户又为我们发来新的问题. 这次我们需要实现的场景是在前端表格环境中,像模板按钮那样,点击之后弹出一个侧边栏,然后通过点击不同的单元格显示不同的内容. 挤接 ...
- Vert.X CompositeFuture 用法
CompositeFuture 是一种特殊的 Future,它可以包装一个 Future 列表,从而让一组异步操作并行执行:然后协调这一组操作的结果,作为 CompositeFuture 的结果.本文 ...
- 用python实现matlib的 生成高斯模糊核
最近在做一个关于模糊图片恢复的数学建模,遇到了一个大问题,特记录一下. 在matlib中有 PSF = fspecial('motion', LEN, THETA); 来生成模糊核函数,但在pyt ...
- vue实例vm的方法
import wbMessage from './wb-message' let Constructor = Vue.extend(wbMessage) let vm = new Constructo ...
- JZ009乘积小于k的子数组
title: 乘积小于k的子数组 题目描述 题目链接:乘积小于k的子数组.剑指offer009 解题思路 注意: 一开始的乘积k值就是小的,随着右边窗口移动才会不断增大 怎么样的条件才能更新左窗口:当 ...
- docker 灵活的构建 php 环境
地址: https://github.com/ydtg1993/server 使用docker搭建灵活的线上php环境 有时候你可能不太需要一些别人已经集成了的包或者镜像 ...
- 一个程序的自我修养「GitHub 热点速览 v.22.19」
一个程序要诞生涉及前后端技术,比如,你可以用可视化网页搭建工具 tmagic-editor 完成前端部分,而后端部分的数据库以及数据处理可能就要用到 jsonhero-web 和 directus.知 ...