前言:

任何计算机语言都离不开程序结构,LabVIEW 作为一种图形化的高级程序幵发语言也不例外。LabVIEW 中的程序结构包括if-else循环,while循环结构,使能结构,公式节点和数学脚本节点等, 因此通过LabVIEW可以非常方便快速地实现任何复杂的程序结构。在LabVIEW 中,无论是循环结构、Case 结构还是条件式节点,它们都表现为一个方框包围起来的图形代码。这个方框就类似于C语言中的两个花括号 。

一、while循环

如果我们需要让循环在满足某种条件时退出或继续运行,这时候就需要借助于 While 循环。它是 LabVIEW 中最经常使用的一种程序结构。

下面我们利用 while 循环写一段最简单的代码:用户输入一个整数,while循环计算出 1 到 该数值的累加和,该段代码如下所示:

在上述代码中使用了反馈节点,因为使用 反馈节点可以让程序更简洁, 就是直接将输出与输入连接起来,这时就会自动出现一个反馈节点的符号。

其中  是循环终止条件的输入端子,默认情况下为 Stop if true,即当输 入布尔条件为 True 时终止循环,为 False 时继续运行。如果右击该端子,该端子变为,这表示当输入布尔条件为 True 时继续运行,为 False 时终止循环。这两种情况是互 为相反的逻辑。具体采用哪一种,则主要由程序的可读性决定。此外,While循环体与外部代码交换数据的方式和For循环是一样的,可以参考 For 循环。

如果以索引方式输入数组的话,While循环的次数并不会由数组大小控制,它仍由布尔值控制。当循环次数超过数组大小时,将以数组最后一个元素作为输入。我们编写代码如下所示:

运行程序后,前面板显示:

LabVIEW 在执行While循环时,如果用户没有给它设定循环时间间隔,那么它将以CPU的极限速度运行。按下Ctrl+Alt+Delete 快捷键打幵任务管理器,可以看到它几乎将CPU全部利用, 正常情况这样做比较危险,因为这样可能会导致整个 LabVIEW 程序看上去跟“死 掉” 一样。
        在很多情况下我们没有必要让 While 循环 以最大的速度运行,所以最好给 While 循环 加上时间间隔。有两种方法:一种是在每个循环中添加一个等待时间,只有在等待完毕后才运行下一个循环。 另一种方法是使用定时循环(Timed Loop)。

因此,在写 While 程序时千万别忘了加上一个定时器,即:

二、For 循环

For 循环用于将某段程序循环执行指定的次数。可以通过两种方法指定循环次数,一种是直接给定,一种是通过输入数组的大小给定。它在 函数面板中的位置如下图所示:

如果输入 For 循环体的数据为数组的话,有两种情况:一种是将整个数组一次性输入循环体, 另一种是让数组元素逐个地输入,并以数组大小确定循环次数。同理,输出也一样,可以一次性将整个数组输出;也可以将元素逐个输出,最后再将所有输出元素组合为同一个数组输出。

一般来说,如果直接将数组与内部数据连接,它默认就是自动索引,即数组元素一个个地输入,输出也是一样的。一般情况下,用户不再需要指定运行的次数,它会自动根据数组大小执行。 当然如果用户硬要指定,那么它按照最小的执行次数执行。即如果数组有5个元素,而用户指定循环次数为10,则实际循环次数为5。索引方式下输入和输出一维数组如下图所示:

程序框图:

前面板:

显然,虽然没有指定 for 循环中 N值 的大小,该循环执行了5次就终止了。因此,它会自动根据数组大小决定执行次数。

如何利用 for 循环来产生二维数组或多维数组,方法很简单,如下图所示:

对应的前面板如下所示:

改变循环次数:

三、事件结构

Labview 提供了事件结构,即仅当 “事件” 发生时,程序才作相应的响应。 通过事件结构,程序可以变得很简单,并降低CPU利用率。当多个事件发生时会形成事件队列, 直到每个事件对应的代码都被执行为止,因此不会有事件被漏掉的情况。

注意:事件结构必须放在 While 循环中,否则没有意义,因为当一个事件完成后,程序 需要去等下一个事件的发生。我们来看一段代码:

接下来我们在选择器标签处右键鼠标,添加事件分支:

添加 “取消按钮” 对应的事件:

添加  “确定按钮” 对应的事件:

添加  “ 旋钮” 对应的事件:

然后我们可以运行代码,在前面板看到结果如下:

旋转 旋钮:

四、条件结构

这一节我们通过一个例子来学习条件结构:利用条件结构和循环结构写一个跑马灯,即要求 5 个灯从左到右不停的轮流点亮,闪烁间隔由滑动条调节,我们新建一个空白 VI ,然后编写代码:

在while循环中放一个时延函数,延时时间由滑动条控制,这个延时时间就是跑马灯的闪烁间隔。然后从循环次数 i 引出,除以 5 取余数加1 作为条件使能结构的输入。最后依次设置每个分支:

当输入为3时的分支执行的代码:

输入为4时对应的分支:

输入为5时对应的分支:

我们看看对应的前面板:

接下来,我们运行程序:

注意: 当条件使能结构有多个分支时,必须设置默认分支,否则程序无法执行,如下:

五、公式节点

公式节点是一种程序结构,通过公式节点,用户不仅可以实现复杂的数学公式,还能通过文本编程写一些基本的逻辑语句,如if...else...、case, while循环之类的语句。可以这么说,公式节点基木上弥补了图形化幵发语言相对于文木语言的缺陷。公式节点的语法与C语言基本相同。

接下来我们来利用公式节点进行编程:

我们添加公式节点函数,在方框的边框上右键鼠标,添加2个输入和3个输出,然后编程算法代码:

显然,公式节点不仅能实现一个公式,还能同时实现多个公式,只需要增加输入输出端子就可以了。而且,语法规则完全遵循C语言。

运行程序可以看到:

更改 a 和 b 的值:

六、实践——温度监测系统

最后,我们来做一个温度监测系统,该系统底层数据是由随机数发生器产生的20〜40 之间的随机数,其代码如下所示:

设置华氏和摄氏两种显示模式,选择华式温度时:

选择摄氏温度时:

然后设定温度上限,当温度超限时,Alarm Counter加1,这里采用了移位寄存器。LabVIEW 提供了移位寄存器,把上一次循环产生的结果 “移动” 到下一次循环的输入。添加移位寄存器的方法如下图所示:

右击 For 循环的边框,选择 添加移位寄存器 选 项,在右击点和另外一侧就会出现一个小黑框,把它与需要连接的数据连接即可。

由于存储在移位寄存器中的数据值直到关闭VI时才从内存中消除。如果没有初始化移位寄存器,就会导致在关闭VI之前前后 两次运行该 VI 的结果截然不同。由于这种情况难于预测,因而可能会使VI的运行结果难以捉摸, 因此,任何情况下都别忘了初始化移位寄存器。

接下来分析整个程序,最外层用 While 循环来控制整个系统的运行:

当用户单击 “幵始采集” 按钮后,系统幵始采集数据,执行 case循环中的 true分支对应的程序,在该分支中,用层叠顺序结构来实现“初始化”,“运行”,“结束”这3个顺序执行状态:

我们执行程序,可以看到前面板如下:

LabVIEW学习笔记(三)——程序结构相关推荐

  1. python编程语法-Python学习笔记(Ⅰ)——Python程序结构与基础语法

    作为微软的粉丝,最后终于向Python低头了,拖了两三个月终于下定决心学习Python了.不过由于之前受到C/C#等语言影响的思维定式,前期有些东西理解起来还是很费了些功夫的. 零.先抄书: 1.Py ...

  2. Python学习笔记(Ⅰ)——Python程序结构与基础语法

    作为微软的粉丝,最后终于向Python低头了,拖了两三个月终于下定决心学习Python了.不过由于之前受到C/C#等语言影响的思维定式,前期有些东西理解起来还是很费了些功夫的. 零.先抄书: 1.Py ...

  3. LabView学习笔记(十):条件结构

    Labview学习笔记: LabView学习笔记(一):基础介绍 LabView学习笔记(二):滤波器实验 LabView学习笔记(三):基本控件 LabView学习笔记(四):动态数据类型 LabV ...

  4. LabView学习笔记(三):基本控件

    Labview学习笔记: LabView学习笔记(一):基础介绍 LabView学习笔记(二):滤波器实验 LabView学习笔记(三):基本控件 LabView学习笔记(四):动态数据类型 LabV ...

  5. LabView学习笔记(八):属性节点

    Labview学习笔记: LabView学习笔记(一):基础介绍 LabView学习笔记(二):滤波器实验 LabView学习笔记(三):基本控件 LabView学习笔记(四):动态数据类型 LabV ...

  6. LabView学习笔记(六):while循环与for循环

    Labview学习笔记: LabView学习笔记(一):基础介绍 LabView学习笔记(二):滤波器实验 LabView学习笔记(三):基本控件 LabView学习笔记(四):动态数据类型 LabV ...

  7. LabView学习笔记(五):数据类型综合实验

    Labview学习笔记: LabView学习笔记(一):基础介绍 LabView学习笔记(二):滤波器实验 LabView学习笔记(三):基本控件 LabView学习笔记(四):动态数据类型 LabV ...

  8. LabView学习笔记(四):动态数据类型

    Labview学习笔记: LabView学习笔记(一):基础介绍 LabView学习笔记(二):滤波器实验 LabView学习笔记(三):基本控件 LabView学习笔记(四):动态数据类型 LabV ...

  9. LabView学习笔记(二):滤波器实验

    Labview学习笔记: LabView学习笔记(一):基础介绍 LabView学习笔记(二):滤波器实验 LabView学习笔记(三):基本控件 LabView学习笔记(四):动态数据类型 LabV ...

  10. labview编程笔记之条件结构

    CSDN话题挑战赛第2期 参赛话题:学习笔记 学习之路,长路漫漫,写学习笔记的过程就是把知识讲给自己听的过程.这个过程中,我们去记录思考的过程,便于日后复习,梳理自己的思路.学习之乐,独乐乐,不如众乐 ...

最新文章

  1. redisTemplate分布式锁演变、redission分布式锁实现!
  2. Galaxy Release_20.09 发布,新增多个数据上传组件
  3. Java代码03-打印一个菱形
  4. 全面解析并实现逻辑回归(Python)
  5. UE4学习-打包失败 缺失UE4Game二进制文件
  6. 新的一年,碎片化学习前端,我推荐这几个公众号~
  7. 凹入表形式打印树形结构_体育场径向环形大悬挑钢结构综合施工技术研究
  8. RHEL4.4安装YUM
  9. uitableview有个属性值 separatorStyle 可用来去掉cell间的白线:
  10. C# 中 动态获得或设置一个对象的值
  11. LeetCode 227. 基本计算器 II 【c++/java详细题解】
  12. 【笔记1-1】基于对话的问答系统CoQA (Conversational Question Answering)
  13. 【Unity后期渲染】Post Processing 后处理插件最全使用说明
  14. spring成神之路第三十八篇:@Scheduled @EnableScheduling 定时器详解
  15. 搭建Web环境初识JSP
  16. Python使用asyncio+aiohttp异步爬取猫眼电影专业版
  17. 傅里叶谱方法-傅里叶谱方法求解基本偏微分方程(一维波动方程、 二维波动方程、一维非线性薛定谔方程)及其Matlab程序实现
  18. 第十一次作业 - Alpha 事后诸葛亮
  19. e-人事管理系统-人事档案-变更管理-人员职务变更
  20. 求解“背包问题”的“粒子群算法”

热门文章

  1. UDP协议格式及特点
  2. 【备忘】微力同步软件的设置和使用
  3. 【总结】字符串的遍历,replace(),replaceAll()方法的使用
  4. jdbc的作用以及它的几个步骤
  5. matlab语音合成技术,matlab语音合成
  6. 一个IT男的迷茫独白
  7. ValidationSummary 控件
  8. 盘点最好用的linux发行版本!
  9. 架构文摘:消息队列设计精要
  10. pytorch train.py与test.py代码流程