当程序越写越大的时候,我们会发现代码界面会比较乱(线太多),那要怎么做可以让代码更简洁一点,我只管直接调用某个功能函数,而不需要在一个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在我们以后发展的定位,等有了兴趣,有了基础,再借助书籍让自己进一步升华即可。前期,跟着老曹的入门目录学习就可以了。下一章给大家介绍一个功能强大的结构--事件结构,可以理解为单片机里面的中断事件。

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

labview从入门到出家3--制作和调用子VI的更多相关文章

  1. labview从入门到出家6(进阶篇)--移位寄存器的使用

    前面介绍了如何熟悉和使用Labview自带的库函数以及调试方式,大家后期基本可以凭借这两个方式从入门到出家了,哈哈,后面就靠各位同仁99%的努力了.这篇为啥要讲移位寄存器呢,主要是之前做的项目和经验告 ...

  2. labview从入门到出家5(进阶篇)--程序调试以及labview函数库的运用

    跟了前面几章的操作流程,相信大家对labview有了一定的认识.其实只要了解了labview的编程思路,再熟悉地运用各个变量,函数以及属性,那么我们就可以打开labview的大门了.跟其他编程语言一样 ...

  3. labview从入门到出家8(进阶篇)--简单好用的状态机

    labview的状态机类似于一个软件框架的基本单元,好的软件框架和软件思路采用一个好的状态机,就如虎添翼了.这章给大家讲一个本人常用的一个状态机,基本上以前的项目都是建立在这个状态机上完成的,当然网上 ...

  4. labview从入门到出家7(进阶篇)--队列的使用

    本节简单讲解队列在Labview中的使用,队列你可以认为就是一组先进先出的数据列表,在Labview中常用来缓存和传递数据.用了这么久的队列,个人认为有个方便的地方在于数据传递的把控,不管是局部变量还 ...

  5. labview从入门到出家1--第一个加法程序

    概述: Labview在众多编程语言中排名靠后,显然在当今互联网,物联网时代并非主流语言.但是俗话说行行 出状元,即便不是立身于某个主流的领域,用好了依旧可以独领风骚,而且Labview对于硬件出身的 ...

  6. labview从入门到出家9(进阶篇)--串口通讯

    ​ Labview在工控领域,如产线,实验室等环境用得较多,其中与仪器通讯控制的方式有串口(RS232,RS485,TTL),GPIB,网口,CAN等,其中串口在仪器还有单片机控制中用来调试居多.(很 ...

  7. labview从入门到出家2--将“加法程序”制作成“exe应用程序”

    1.上一章主要讲了如何跑我们的第一个加法程序(这里向第一个程序的鼻祖"hello world"致敬),这一章我们直接进入主题,将我们写的程序生成exe文件放桌面运行. 2.要生成e ...

  8. labview从入门到出家4--用事件结构实现运算功能

    使用事件结构可以快速定位响应界面的操作事件,如按下,拖动,双击的事件.基本上我们所要实现的所有功能,都可以通过条件结构+事件结构去实现,比如后面进阶篇将会讲到的状态机就是通过条件结构和事件结构组成的. ...

  9. FFmpeg从入门到出家(HEVC在RTMP中的扩展)

    由金山云视频云技术团队提供:FFmpeg从入门到出家第三季: 为推进HEVC视频编码格式在直播方案中的落地,经过CDN联盟讨论,并和主流云服务厂商达成一致,规范了HEVC在RTMP/FLV中的扩展,具 ...

随机推荐

  1. jmeter工具初探

    jmeter工具初探 一.jmeter工具介绍 1.一种免费的java开源工具,可以进行二次开发 2.运行环境:java运行环境,需要安装JDK,配置JAVAHOME 环境变量 3.下载jmeter: ...

  2. 从零开始学YC-Framework之初步

    本文主要内容为如下几个方面? YC-Framework的取名出于什么考虑? YC-Framework的特点有哪些? YC-Framework的模块由哪些组成? 为什么要开发YC-Framework? ...

  3. Error:java: Can‘t generate mapping method with primitive return type.报错

    原因:Spring项目中使用了JPA以及Mybatis–mapper文件注解引错包导致编译错误 解决: 错误:import org.mapstruct.Mapper;正确路径:import org.a ...

  4. drf-Serializers

    What is serializers? serializers主要作用是将原生的Python数据类型(如 model querysets )转换为web中通用的JSON,XML或其他内容类型. DR ...

  5. 用 Python 远程控制 Windows 服务器,太好用了!

    在很多企业会使用闲置的 Windows 机器作为临时服务器,有时候我们想远程调用里面的程序或查看日志文件 Windows 内置的服务「 winrm 」可以满足我们的需求 它是一种基于标准简单对象访问协 ...

  6. 聊聊FLINK-25631贡献

    从入行做数据库开发,到2018年过渡到大数据开发,可以说我已经与sql朝夕相处了七八年了,经常惊讶于简单的语法就能产生复杂的操作,而且还能根据索引等统计信息自动优化,不禁很想实现自己的sql语法,却不 ...

  7. 一个关于 useState 的误解

    一个关于 useState 的误解 本文写于 2020 年 11 月 17 日 前两天有人问了我一个问题,他有一段这样的代码: function App() { const [n, setN] = u ...

  8. spring-boot rest controller 使用枚举作为参数,重写反序列化实现任意值转枚举类型

    目录 BaseEnum MyEnum StringToEnumConverterFactory FormatterConfig DTO RestController 参考 BaseEnum packa ...

  9. .net6.0 中一个接口多个实现的服务注册与注入

    1.现有一个数据库操作接口 如下   它有两个数据操作实现 Sqlserver 和MySql的数据库操作实现类 现在我们需要 将这个两个类 注册到MVC中 注意这里注册的服务类型都是 IDataBas ...

  10. Vmware虚拟机安装及相关配置流程

    1.Vmware虚拟软件安装 1.1下载地址 vmware 12 pro 的版本稳定性较好,所有我们最好选择该版本 下载地址:https://www.onlinedown.net/soft/10053 ...