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中的扩展,具 ...
随机推荐
- jdk1.8中hashmap的扩容resize
当hashmap第一次插入元素.元素个数达到容量阀值threshold时,都会扩容resize(),源码: (假设hashmap扩容前的node数组为旧横向node数组,扩容后的node数组为新横向n ...
- pwn 之 沙箱机制
0x00: 简介 沙箱机制,英文sandbox,是计算机领域的虚拟技术,常见于安全方向.一般说来,我们会将不受信任的软件放在沙箱中运行,一旦该软件有恶意行为,则禁止该程序的进一步运行,不会对真实系统造 ...
- 一文了解RPC框架原理
点击上方"开源Linux",选择"设为星标" 回复"学习"获取独家整理的学习资料! 1.RPC框架的概念 RPC(Remote Proced ...
- vue - Vue脚手架/TodoList案例
今天做了一个案例,可以好好做做能够将之前的内容结合起来,最主要的是能对组件化编码流程有一个大概的清晰认知,这一套做下来,明天自己再做一遍复习一下,其实组件化流程倒是基本上没什么问题了,主要是很多vue ...
- 手脱无名壳tslgame_rl
1.使用Detect It Easy查壳,该壳未显示出壳信息,至于为何有壳,我们使用IDA打开,查看其的导入表,其中没有太多函数使用: 2.我们使用x32dbg打开,运行至入口点,此处没有pushad ...
- 在vue-cli中安装scss,且可以全局引入scss的步骤
简历魔板__个人简历模板在线生成 在写vue的css样式时,觉得需要css预处理器让自己的css更加简洁.适应性更强.可读性更佳,更易于代码的维护,于是在vue-cli脚手架采用scss.写过的人都知 ...
- 国产开源优秀新一代MPP数据库StarRocks入门之旅-数仓新利器(上)
概述 背景 Apache Doris官方地址 https://doris.apache.org/ Apache Doris GitHub源码地址 https://github.com/apache/i ...
- 对象、Map、Set、WeakMap、WeakSet
对象.Map.Set.WeakMap.WeakSet 本文写于 2020 年 11 月 24 日 总的来说,Set 和 Map 主要的应用场景分别在于数据重组和数据储存.Set 是一种叫做「集合」的数 ...
- SUSE系统---keepalived的搭建
作为博客第一篇,先小尝初试一下搭建keepalived,因为项目需要搭建集群,为了满足需要,需要服务器对外暴露个虚拟IP,进行集群部署. 第一步:先把keepalived.tra.gz压缩包放到相应目 ...
- 揭秘华为云GaussDB(for Influx):数据直方图
摘要:本文带您了解直方图在不同产品中的实现,以及GaussDB(for Influx)中直方图的使用方法. 本文分享自华为云社区<华为云GaussDB(for Influx)揭秘第九期:最佳实践 ...