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中的扩展,具 ...
随机推荐
- 真实本人亲测Elasticsearch未授权访问漏洞——利用及修复【踩坑指南到脱坑!】
如要转载请注明出处谢谢: https://www.cnblogs.com/vitalemontea/p/16105490.html 1.前言 某天"发现"了个漏洞,咳咳,原本以为这 ...
- vmware ubuntu 忘记密码
1.进入recovery模式 修改root密码 1.启动ubuntu系统,一开始在有进度条的时候按下shift键,出现GRUB选择菜单,选择Advanced options for Ubuntu 按回 ...
- iptables系列教程(三)| iptables 实战篇
一个执着于技术的公众号 实战1 服务器禁止ping iptables -A INPUT -p icmp --icmp-type 8 -s 0/0 -j DROP // 禁止任何人ping通本机 &qu ...
- linux fedora35 配置jdk,安装mysql,安装tomcat
配置jdk18很简单,下载jdk,只需要.tar.gz结尾的文件就行,https://download.oracle.com/java/18/latest/jdk-18_linux-x64_bin.t ...
- Azure DevOps (十三) 通过Azure Devops部署一个Go的Web应用
前几篇文章中,我们分别实现通过azure来部署.NET和Springboot的应用,今天我们来研究一下如何部署一套Go的Web应用上去. 文章配套视频专栏: https://space.bilibil ...
- 镜头随人物而动,视频编辑服务让用户稳站C位
现如今,视频是用户记录生活最热门的方式,各种App在发布视频界面都提供了视频简单剪辑的功能.除了增加音乐.滤镜.贴纸这些基础功能以外,用户越来越追求镜头感,这往往需要通过专业的视频剪辑软件手动打上关键 ...
- 文件操作(Java)
学习内容:文件操作 1.输入流:InputStream类是字节输入流的抽象类,常用的一些方法有: raed()方法:从输入流中读取数据的下一个字节 reset()方法:将输入指针返回到当 ...
- 学习Linux须知1.0之Linux相关概念、工具(yum、vim)、防火墙等
温馨提示:重点掌握的前面都标注了 ☆ 一.Linux 是什么? Linux 是一个操作系统. 我们的 Linux 主要是系统调用和内核那两层. 当然直观地看,我们使用的操作系统还包含一些在其上运行的应 ...
- AMS 新闻视频广告的云原生容器化之路
作者 卓晓光,腾讯广告高级开发工程师,负责新闻视频广告整体后台架构设计,有十余年高性能高可用海量后台服务开发和实践经验.目前正带领团队完成云原生技术栈的全面转型. 吴文祺,腾讯广告开发工程师,负责新闻 ...
- java-去除html中的标签或者元素属性(正则表达式/jsoup)
业务场景: 如一篇使用富文本编辑器编辑的新闻稿,需要在列表页面截取前200字作为摘要,此时需要去除html标签,截取真正的文本部分. /** * 删除Html标签 */public static St ...