LabVIEW应用开发——VI模块化

news2024/11/23 12:54:18

        我们在写C语言的时候,一些模块化的功能或者多次调用的功能,我们一般会用一个函数封装起来,方便使用并且让代码看起来更加的简洁。这种函数一般都会包含这几个概念,输入参数输出参数返回值。而LabVIEW的VI就可以当作是一个函数,输入参数就是输入控件输出参数就是显示控件,不同于C函数,LabVIEW可以有多个返回值,当然C也能使用指针和引用让函数调用结束后得到多个返回值得效果。

VI的层次结构

        每个VI都可以是一个独立的模块,实现独立的、特殊的、复用性高的的功能。和函数一样,VI都能够被其他的VI调用,被调用的称呼为子VI。一个上位机一般都能够拥有几十个子VI文件,这也是LabVIEW希望我们实现的模块化编程思想,在视图VIEW->VI Hierarchy可以查看层次结构。

 

        在上图我们通过1号位置可以设置层次结构的布局方向,默认为垂直方向布局,可以改为水平方向布局。

        可以看到在层次结构里面,除了工程的vi还有一个Main Application Instance,这里可以理解为这里就是程序的入口,也就是我们常用的main函数,而VI又能调用子VI,就类比函数之间的调用。

子VI的制作

        从前面的章节,我们知道VI是前面板+程序框图组成,但是有这两个是不够的。C函数需要有入参和出参,我们的子VI也需要有参数连接关系。

        接下来我们来制作实现一个s=a²+2ab+b²的示例,参数有a、b、s。

        现在前面板和程序框图弄好了,还需要制作图标,在VI层次结构可以看到。双击右上角图标,在弹出图标编辑器icon Editor中制作自定义图标。

        最后一步,需要制作连线板前面板控件的关系。我们选择连线工具,模型选择三个参数的就行,因为我们只要a、b、s三个参数,左侧两个,右侧一个,表示输入和输出。然后先点击连线板的端子白色小框,在选择一个控件,绑定好的关系会导致端子的颜色改变。重复这个操作,把三个控件都绑定即可。

调用子VI    

        在上面我们新建好了一个子VI,包含前面板程序框图连线板图标,完成一个函数的运算,接下来我们新建一个VI去调用它,拉子VI进来的方法有四种。

1)在程序框图中右击,弹出的函数选板中选择“Select a VI”。

        选择我们上面制作的VI,得到了一个制作的图标,并且可以看到有左侧两个输入,右侧一个输出。 

2)直接在文件夹中找到VI文件,拖入到程序框图中。

3)子VI如果开着,甚至可以直接从子VI中选中图标直接拖到当前VI中,不过不建议这么干。

4)从项目中把VI文件拖进来,我们前面创建的都是单独的VI,还没有项目的概念,后面再补充。

        拖进来后,我们再查看VI层次结构,这时候就发现,当前VI底下多了子VI。

        当前VI同样创建两个输入控件,一个输出控件,两个输入给子VI的输入,子VI输出到输出控件,这样就完成了子VI的调用,而运算在子VI中实现。

VI属性

        最后讲一下VI的属性,在File->VI Properties或者直接快捷键Ctrl+I调出属性窗口。

        这里根据类别Category来设置VI的相关属性,有些信息是只读的不能修改,有些是设置的,比如外观、图标、版本。

1)常规属性General。

        常规属性这里可以设置VI的文件名文件存储的位置当前修订的版本信息Current revision源版本Source version修订历史revision History编辑图标信息,没错,这里也可以修改图标。这里注意两点:

        1、由于LabVIEW有个很大的缺点,就是不同版本的LabVIEW很有可能会打不开非当前版本制作的项目,所以在源版本中我们可以知道是使用了什么版本的LabVIEW制作的,让程序员可以正确的打开它。

        2、只要有对VI文件做了改动,甚至是移动了一下控件,当前修订版本就会往上加1,在版本信息修改中选择重置reset可以把修订版本重置为0。

        3、版本信息的修改,这里比较重要的功能,每次对VI有重大的修改,都要有修改的原因,添加的功能,这是每个程序员必须要养成的习惯。

2)内存使用Memory Usage

        在这里我们可以看到VI的内存使用情况,包括前面板、程序框图、代码空间和数据空间,还有硬盘占用的空间大小。一个程序的内存占用情况,可以决定一个程序的优劣,我们要尽量避免没必要的占用。

3)说明信息Documentation

        和前面板的控件说明一样,调用子VI的时候,如果有设置了说明信息,那么会在即使帮助窗口显示该说明,说明信息可以保存在VI本身,也可以保存在帮助文件中。

        在Help->Show Context Help或者使用快捷键Ctrl+H调出及时帮助窗口。

        单击子VI,在窗口即可看到VI的说明信息。

4)修订历史revision History

        设置提示输入修订信息的触发条件和规则,当满足条件的时候会主动弹出修改历史的窗口,提示程序员要输入修改记录。条件包括每次保存VI、每次关闭VI,还可以选择是否由LabVIEW生成的注释。

5)编辑器选项Editor Options

        这里可以设置当前VI前面板和程序框图的网格尺寸,值得注意的是这里设置网格尺寸只针对当前VI,前面我们讲过在工具栏也有设置该属性的位置,那是针对全部的VI的。

        除了网格尺寸,编辑器选项还可以选择控制控件的样式,包括现代风格Modern style经典风格Classic style跟随系统风格System style银色风格Silver styleNXG风格Silver style。

6)保护选项Protection

        保护选项保护用户不对它非法编辑。一种常规锁定,用户必须在保护界面解锁否则无法编辑前面板和程序框图。还有一种密码锁定,用户如果没有密码打不开VI程序。这里要注意一点,如果你忘记了密码,是没有任何办法可以解锁的。

7)外观窗口Window Appearance

        该界面设置VI的外观方式,在前面章节提到的属性界面也可以设置该属性。外观选项又四种,顶层VI、对话框、默认、自定义。区别在于是否显示主菜单、工具栏和一些窗口最大、最小、关闭按钮等。

8)窗口尺寸Window Size

        该窗口用来设置前面板的最小尺寸,使用”设置当前面板尺寸“按钮即可得到当前面板尺寸,也可以手动输入。

9)窗口运行位置Window Run-Time Position

        该窗口用来设置VI运行的时候相对于桌面的位置和大小,如果设置为不改变Unchanged,那么就保持原来VI窗口原来的位置。也可以设置为居中、最大化、最小化、自定义的方式,如果设置自定义就需要设置前面板和程序框图的位置和大小。

10)执行Execution

        该界面左侧默认勾选允许调试Allow debug,可以进行单步跟踪、设置断点等。

        重入设置Reentrancy,默认为非重入执行Non-reentrant execution,在多线程中,如果出现两个子线程需要调用同一个子VI,就会出现户锁的情况,不允许同时操作该VI,比如涉及到了操作硬件。共享克隆重入执行Shared clone reentrant execution,共享统一的数据空间,多个副本之前共享数据。预分配克隆重入执行Preallcated clone reentrant execution,每个线程运行都是子VI的备份,具有独立的数据空间和代码空间。正常的计算模块VI都是需要允许重入的,不然效率非常低。根据VI的结构和功能适当选择是否重入和重入方式。

        右侧优先级Priority首选执行系统Preferred Execution System这两个一般都不需要设置我们来了解下下面几个复选框。

        启动自动错误处理Enable automatic error handing,默认是选中状态,提示程序运行中当出现一些错误。这里不是VI本身的错误,编译期的错误在连线的时候如果不能运行,就会弹窗提示了。在一些无人值守的场景下,我们可能会把该功能关闭,因为一但弹出对话框,会停止程序的运行,这是不合理的,这种场景下需要程序设置错误捕捉陷阱,根据错误在做处理,类似C的try+catch。

        打开时运行Run when opened,默认未选中,勾选则双击vi或者File导入的时候直接运行,这一般用不上。

        调用时挂起Suspend when called,默认未选中。这个功能主要是调试的时候使用,勾选后,当程序调用这个VI的时候,暂时停止程序,这时候我们通过探针等工具观察VI的运行情况。

        调用时清空显示控件Clear indicators when called,默认未选中。显示控件的值一般都取决于接线端子,这里就是一个清空默认值的情况,防止出现误导。

       启动时自动处理菜单Auto handle menus at launch,默认勾选。

11)打印Print Options

        该界面涉及一些打印的属性,包括是否打印页眉、是否前面板加边框、是否缩放、自定义上下左右边距等。每次VI执行结束自动打印前面板默认不勾选,这个选项一般用于票据系统,输入一些数据之后点击执行,顺便把结果打印出来,其他情况下,一般不会勾选。 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1051309.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

led台灯哪个牌子最好?2022最新的台灯牌子排名

想要选好护眼台灯首先我们要知道什么是护眼台灯,大的方向来看,护眼台灯就是可以保护视力的台灯,深入些讲就是具备让灯发出接近自然光特性的光线,同时光线不会伤害人眼而出现造成眼部不适甚至是视力降低的照明设备。 从细节上看就…

EasyX趣味化编程note2,绘制基本图形

创意化编程,让编程更有趣 今天介绍的仍为比较简单的效果,由浅入深来进行学习 介绍每个函数都会附上代码和运行结果,感兴趣的大家可以复制粘贴运行一下看看效果,也可以自己进行改动,非常好玩且加深印象。 上节课的知识…

wsl2 更新报错问题解决记录

1、问题 win10 中安装的 wsl2,启动 docker desktop 时提示 wsl2 有问题: 于是点击推荐的地址连接到微软,下载 wsl2 的更新文件。之后运行,又报错: 更新被卡住。 2、解决方法 WinR 输入 cmd 打开命令行窗口&#x…

基于Vue+ELement搭建动态树与数据表格实现分页模糊查询

🎉🎉欢迎来到我的CSDN主页!🎉🎉 🏅我是Java方文山,一个在CSDN分享笔记的博主。📚📚 🌟推荐给大家我的专栏《ELement》。🎯🎯 &#x1…

self-XSS漏洞SRC挖掘

本文由掌控安全学院 - 一朵花花酱 投稿 Markdown是一种轻量级标记语言,创始人为约翰格鲁伯(John Gruber)。它允许人们使用易读易写的纯文本格式编写文档,然后转换成有效的 XHTML(或者HTML)文档。这种语言吸…

MySQL数据库基本操作--DDL

文章目录 1. DDL2. 对数据库的常用操作3. 对表结构的常用操作数据类型数值类型字符串类型日期类型 基本操作修改表结构格式 1. DDL DDL(Data Definition Language),数据定义语言,该语言部分包括以下内容: 对数据库的常用操作对表结构的常用…

我与南非的三次邂逅

点击文末“阅读原文”即可参与节目互动 剪辑、音频 / 卷圈 运营 / SandLiu 卷圈 监制 / 姝琦 产品统筹 / bobo 场地支持 / 声湃轩天津录音间 特别感谢 / 南非旅游局、日光派对 本期节目中,我们邀请了一位特别的嘉宾索导,她将带领我们走进南非&…

ide unknown command (empty parse result): / 问题及解决方案

vs studio端口冲突了 在属性 web 修改端口号就能解决 搞定

18661 2020 金属卤化物灯 钪钠系列 性能要求 学习记录

声明 本文是学习GB-T 18661-2020 金属卤化物灯 钪钠系列 性能要求. 而整理的学习笔记,分享出来希望更多人受益,如果存在侵权请及时联系我们 1 范围 本标准规定了钪钠系列金属卤化物灯的分类与命名、主要尺寸、基本参数、技术要求、试验方法、检 验规则、标志、包装、运输和…

CSS详细基础(六)边框样式

本期是CSS基础的最后一篇~ 目录 一.border属性 二.边框属性复合写法 三.CSS修改表格标签 四.内边距属性 五.外边距属性 六.其他杂例 1.盒子元素水平居中 2.清除网页内外元素边距 3.外边距的合并与塌陷 4.padding不会撑大盒子的情况 七.综合案例——新浪导航栏仿真 …

微信小程序写一个将图片对象转成base64字符串的函数

这个我只能比较遗憾的说 小程序中大部分操作文件的API都是异步的 所以这个函数 我们还是要异步返回 其实大家肯定也都喜欢同步的 imageToBase64(image) {return new Promise((resolve, reject) > {const filePath image.path;// 获取图片文件大小wx.getFileInfo({filePath…

马尔萨斯《人口原理》读后

200 多年前的书,很多人都说旧的东西过时了,但我觉得它只是被修正了,内核并不过时。毕竟,静态存量分析这本身就不符合现实,用现在的话说,建模就错了,但马尔萨斯的理论核心并不仅仅是一个模型&…

IO流 之 缓冲流(字节缓冲流和字符缓冲流)

缓冲流对原始流进行了包装,以提高原始流读写数据的性能。 字节缓冲流(BufferedInputStream和BufferedOutputStream) 字节缓冲流在内存中提供了一个默认为8kb的区域,用于缓冲,当流开始时,先读取一个8kb的内…

【Orange Pi】Orange Pi5 Plus 安装记录

官网:Orange Pi - Orangepi 主控芯片:Rockchip RK3588(8nm LP制程)NPU:内嵌的 NPU 支持INT4/INT8/INT16/FP16混合运算,算力高达 6Top支持的操作系统: Orangepi OS(Droid)Orangepi O…

[JAVAee]MyBatis

目录 MyBatis简介 MyBatis的准备工作 框架的添加 连接数据库字符串的配置 MyBatis中XML路径的配置 ​编辑 MyBatis的使用 各层的实现 进行数据库操作 增加操作 拓展 修改操作 删除操作 查询操作 结果映射 单表查询 多表查询 like模糊查询 动态SQL / MyBa…

【超详细】Wireshark教程----Wireshark 分析ICMP报文数据试验

一,试验环境搭建 1-1 试验环境示例图 1-2 环境准备 两台kali主机(虚拟机) kali2022 192.168.220.129/24 kali2022 192.168.220.3/27 1-2-1 网关配置: 编辑-------- 虚拟网路编辑器 更改设置进来以后 ,先选择N…

[Linux]Git

文章摘于GitHub博主geeeeeeeeek 文章目录 1.1 Git 简易指南创建新仓库工作流添加与提交推送改动 1.2 创建代码仓库git init用法讨论裸仓库 例子 git clone用法讨论仓库间协作 例子用法讨论栗子 1.3 保存你的更改git add用法讨论缓存区 栗子 git commit用法讨论记录快照&#xf…

数据统计-EXCEL中常用函数及操作

最近经常需要做一些数据统计工作,整理下EXCEL常用的函数及操作,总结及分享出来,后续会不断更新。 一、VLOOKUP函数 同表查询:VLOOKUP(A2,$A:$G,1,0) 跨表查询: VLOOKUP(A2,Sheet2!$A:$G,1,0) 跨工作薄: 跨…

GD32F10x的输出模式

1. 单片机型号的识别。 2. GPIO的输出模式。 1. 开漏模式 2.推挽模式 3.复用开漏模式 4.复用推挽模式。 开漏模式:(写入位设置,输出数据寄存器来控制MOS) 只有N-MOS管导通。PMOS不导通。 当N-MOS的栅极为0,N-MOS管…

Windows 下安装和配置 Redis (详细图文)

目录 下载 Redis安装 Redis配置 Redis修改密码(可选)配置环境变量注册系统服务 Redis 桌面管理工具附:开源项目微服务商城项目前后端分离项目 下载 Redis 访问 Redis 下载地址:https://github.com/tporadowski/redis/releases 下载 Redis 时&#xff0c…