当程序越写越大的时候,我们会发现代码界面会比较乱(线太多),那要怎么做可以让代码更简洁一点,我只管直接调用某个功能函数,而不需要在一个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的功能就完成啦!

不需要一头扎进Labview书籍,前期最主要的是培养兴趣和了解labview在我们以后发展的定位,等有了兴趣,有了基础,再借助书籍让自己进一步升华即可。前期,跟着老曹的入门目录学习就可以了。下一章给大家介绍一个功能强大的结构--事件结构,可以理解为单片机里面的中断事件。

原创不易,一键三连啦,若有不对或者讲解不到位的地方,欢迎在下方评论,我会及时更改!

最新文章

  1. 后HTML5时代
  2. 魔术方法__sleep 和 __wakeup
  3. [摘抄]iOS App icon、启动页、图标规范
  4. 判断QQ是否在线
  5. [Android] 如何查看apk需要支持的Android版本
  6. 数据字典和动态性能视图<五>
  7. Python开发【第二章】:Python的数据类型
  8. CXF集成spring做webservice接口
  9. C#Winfrom系统打印机调用/设置默认打印机
  10. Solr部署准备
  11. HDU-5532(LIS-nlogn)
  12. asp.net 管道模型+生命处理周期
  13. linux下面的解压缩文件的命令
  14. Azure 认知服务 (5) 计算机视觉API - 使用C#代码实现读取图片中的文字(OCR)功能
  15. key-value存储数据库--Redis
  16. com.jakewharton:butterknife:7.0.1' 点击无效
  17. Django2.0.1开发框架搭建
  18. 序列自动机—— [FJOI2016]所有公共子序列问题
  19. python连接mysql实例分享_python
  20. 【TCP/IP详解 卷一:协议】第二十章 TCP的成块数据流

热门文章

  1. Python打印表格
  2. PAT练习——1094 The Largest Generation (25 point(s))
  3. XCTF练习题---CRYPTO---告诉你个秘密
  4. LintCode-1173 · 反转字符串 III-题解(istringstream简单使用)
  5. iptables系列教程(一)| iptables入门篇
  6. 老生常谈系列之Aop--CGLIB动态代理的底层实现原理
  7. WSL与Windows环境共享
  8. k8s入门之Secret(十)
  9. Hadoop——API操作
  10. MQ 简介