Labview执行结构:详细说明
LabVIEW结构的使用
LabVIEW结构的使用条件结构是执行条件语句的一种方法。
这类似于文本编辑语言中常见的If…Then…Else语句。
它位于程序框图中,函数→编程→结构→条件结构。
如图所示:条件结构包含有两个或者更多的子框图,每一个子框图包含一段程序代码,由此对应一个程序分支。
多个子框图就像一摞卡片重叠在一起,任何时候只有一个是可见的,执行哪一个取决于于选择端子外部接口相连的某个整数,布尔数,字符串或者枚举指,用户也可以直接输入所有可能出现的值。
1.选择端口的输入值条件结构选择端口的输入值是由与它相连的输入控件对象决定的,数据类型可以是布尔量,整形,字符串型或者枚举型。
条件结构顶部中间是各分支的选择标识,它自动调整为输入的数据类型,可以在工具模板上使用标签工具直接键入单个数值或某个数据范围。
数值之间用逗号来分开,例如:“..0,2,4..10”表示选择条件为:≤0,2,4,5,6,7,8,9,10。
对于字符型和枚举型数值在条件标识上会自动加上双引号,当键入的选择器标识值与连接选择端口的数值类型不同时,选择器标识变为红色标识有错误。
如图:设置默认分支的方法是,选择一个分支结构,在快捷菜单中执行“本分支设置为默认分支”,它的作用是当选择端口的值与选择器标识值没有一个匹配时,就执行默认分支。
如图:2.条件结构的数据通道条件结构的数据通道就是数据的输入和输出端口。
将结构内外的端子相连后,边框上就会出现一个小矩形框,这就是数据通道,用于传输数据。
向条件结构的一个分支提供数据时,这个数据对于所有的分支都是有效的,也就是其他分支都可以使用这个输入数据。
条件结构的输出通道有些不同,当在一个分支中创建输出通道后,所有分支的同一位置都会出现一个白色小方框,它要求每一个分支都必须为这个通道予以连接,通道变为实心后程序才可以运行。
也可以在通道的快捷菜单中选定“未连线时使用默认”为没有连接的分支定义一个默认输出值,这时输出通道变为灰色。
如图:条件结构应用举例例一:该例的目的是检查一个数是不是正数,如果是就计算该数的平方根值,如果不是则发出警告。
第二章 labview程序结构
第二章程序结构2.1循环结构2.1.1While 循环While 循环可以反复执行循环体的程序,直至到达某个边界条件。
它类似于普通编程语言中的 Do 循环。
While 循环的框图是一个大小可变的方框,用于执行框中的程序,直到条件端子接收到的布尔值为 FALSE。
该循环有如下特点:●计数从0开始(i=0)。
●先执行循环体,而后i+1,如果循环只执行一次,那么循环输出值i=0。
●循环至少要运行一次。
条件端子循环变量图2-1While 循环示意图练习2-1使用While循环和图表目的:用 While 循环和图表获得数据,并实时显示。
创建一个可以产生并在图表中显示随机数的VI。
前面板有一个控制旋钮可在0到10秒之间调节循环时间,还有一个开关可以中止VI的运行。
学习怎样改变开关的动作属性,以便不用每次运行VI时都要打开开关。
操作步骤如下:前面板图2-2练习2-1的前面板1.选择FileºNew,打开一个新的前面板。
2.选择ControlsºBoolean,在前面板中放置一个开关。
设置开关的标签为控制开关。
3.使用标签工具创建 ON 和 OFF 的标签,放置于开关旁。
4.选中ControlsºGraph,在前面板中放置一个波形图(是chart,而不是graph)。
设置它的标签为随机信号。
这个图表用于实时显示随机数。
5.把图表的纵坐标改为0.0 到 1.0。
方法是用标签工具把最大值从10.0改为1.0。
6.选择ControlsºNumeric,在前面板中放置一个旋钮。
设置旋钮的标签为循环延时。
这个旋钮用于控制While 循环的循环时间。
流程图7.开流程图,按照下图创建流程图。
图2-2练习2-1的流程图a.从FunctionsºStructures 中选择 While 循环,把它放置在流程图中。
将其拖至适当大小,将相关对象移到循环圈内。
b.从Functionsº Numeri c中选择随机数(0-1)功能函数放到循环内。
第4章LabVIEW中的程序结构
第4章 LabVIEW中的程序结构
2020/4/2
精通LabVIEW虚拟仪器程序设计与案例实现
循环结构——For循环
移位寄存器初始化
移位寄存器可以存储的 数据类型有:数值型、布尔 型、数组、字符串型等。
“显式初始化” “非初始化”
不同初始化方式运行结果
第4章 LabVIEW中的程序结构
2020/4/2
循环次数和循环计数端
口的数值范围为0~2^31-1 的长整型数,如果给N的赋值 为0,则程序一次也不执行。
第4章 LabVIEW中的程序结构
2020/4/2
精通LabVIEW虚拟仪器程序设计与案例实现
实例——产生数据点数为1000的正弦波
在做算法仿真时,经常需要产 生指定点数的数据波形,最基本的 实现方法就是通过For循环+基本函 数的方式。
第4章 LabVIEW中的程序结构
2020/4/2
精通LabVIEW虚拟仪器程序设计与案例实现
循环结构——For循环
For循环的自动索引
正常情况下For循环是要指 定循环次数程序才能正常执 行的,但如果我们不知道具 体的循环次数,那又该如何 运用For循环呢?
For循环的自动索引功能默认 情况下是自动开启的,在自动索引 开启的状态下,数据进入循环体时 是降维的。
序,则要用到顺序结构。
平铺式顺序结构
LabVIEW中的顺序结构包括: 平铺式顺序结构 层叠式顺序结构
第4章 LabVIEW中的程序结构
层叠式顺序结构
它们的功能是相同的, 只是图形形式不同,也即编 程时所占用的空间不同。
2020/4/2
精通LabVIEW虚拟仪器程序设计与案例实现
平铺式顺序结构的数据流向
LabView从入门到放弃(之循环结构)
LabView从入门到放弃(之循环结构)让我们开始吧~~~结构用于控制程序的执行顺序,改变程序流程。
目录:• While循环• For循环• 循环结构内外数据的交换• 自动索引• 迭代数据的传递While循环While 循环可以反复执行循环体的程序,直至到达一些边界条件。
它类似于普通编程语言中的 Do 循环和 Repeat-Until 循环。
While 循环的框图是一个大小可变的方框,用于执行框中的程序,直到条件端子接收到的布尔值为 FALSE。
while循环流程图该循环有如下特点:计数从 0 开始(i=0);先执行循环体,而后 i+1,如果循环只执行一次,那么循环输出值 i=0;循环至少要运行一次。
执行流程:1、Do:执行循环体内的图形化程序代码,即至少执行1次;2、需在子框图设置循环条件3、循环计数端子加1,循环条件判断,决定是否继续循环;while循环结构功能其中:• 循环次数:计数接线端表示已完成的循环次数。
计数从零开始,第一次循环时,计数接线端返回为0避免产生无限循环• 循环条件:默认:真(T)时停止For循环该循环有如下特点:• for循环是先判断,后执行的。
• 执行循环的次数是确定的。
for循环结构功能循环结构内外之间的数据交换,结构隧道功能(干什么用的?)数据输入到隧道后循环开始;循环终止后数据输出循环;主要用于对数组的操作。
用法(怎么用?)边框上,右键,隧道模式,索引。
如果隧道的自动索引功能被打开,则数组将在每次循环中顺序经隧道送过一个数;该数在原数组中的索引(地址信息),与当次循环计数端子的值相同。
自动索引自动索引有如下特点:• For:隧道默认打开索引;While:默认关闭•可以手工开启或关闭:打开的索引读入或输出的是数组元素,关闭索引读入或输出的是整个数组• For循环的执行次数:即为数组的个数,启用索引的情况下,不用再给循环次数赋值了。
LabVIEW经典结构-组合动作执行模型
LabVIEW经典结构——组合动作执行模型
在LabVIEW应用程序开发中,广泛使用了一种高效的程序结构——组合动作执行模型。
该模型由While、Evnet(事件)、For、Case、enum(枚举)等向种结构和数据类型构成。
执行机理:面向对象的事件结构,响应前面板发生的针对控件的鼠标、键盘的动作,产生事件,并输出一个枚举数组,该数组作为For循环执行的索引,同时数组元素定义了执行的Case。
将各种事件响应进行分解为基本的动作单元,利用枚举数组定义出若干个由动作单元组合而成的动作序列,依据控件事件选择执行枚举数组,顺序完成对应的动作单元。
模型特点:重复利用各基本动作单元,增加代码复用率,程序更加简洁。
通过新建事件,可以定义任意组合的动作序列,灵活高效。
具有很强的模块化设计思想。
图1组合动作执行模型。
LabVIEW中的控制结构和循环
LabVIEW中的控制结构和循环LabVIEW(Laboratory Virtual Instrument Engineering Workbench)是一种图形化编程语言和开发环境,用于测量与控制系统。
在LabVIEW 中,控制结构和循环是实现自动化控制和流程控制的重要组成部分。
一、控制结构1. 顺序结构顺序结构按照程序中的逐行顺序执行。
在LabVIEW中,通过将各个步骤连接起来,即可实现顺序执行。
2. 选择结构选择结构用于根据条件的不同,执行不同的代码块。
在LabVIEW 中,选择结构包括“Case结构”和“Select结构”。
- Case结构:根据条件进行分支选择。
不同的条件对应不同的代码块。
你可以在其中添加多个Case并分别编写代码,这样可以根据不同的条件执行不同的操作。
- Select结构:类似于Case结构,但是它使用数字索引来选择要执行的代码块,而非条件。
3. 循环结构循环结构用于重复执行某个代码块,直到满足退出条件为止。
在LabVIEW中,循环结构包括“For循环”、“While循环”和“Do循环”。
- For循环:用于已知循环次数的情况下重复执行代码块。
你可以设置循环的次数,并且在每次迭代中可以自定义循环变量的起始值、终止值和步长。
- While循环:在满足条件的情况下重复执行代码块。
你可以设置循环的退出条件,并且在每次迭代中可以自定义条件的判定。
- Do循环:先执行代码块,再判断循环条件是否满足。
如果满足,则继续循环执行,直到条件不满足为止。
4. 跳转结构跳转结构用于在程序中实现跳转操作,常见的跳转结构有“跳出循环”和“跳转到指定位置”。
- 跳出循环:当满足特定条件时,可以用于提前终止循环的执行。
一般在循环结构内部设置条件,满足条件时通过跳转结构跳出循环。
- 跳转到指定位置:用于在程序中实现指定位置之间的跳转。
你可以在程序的任意位置插入标记,然后使用跳转结构指定要跳转到的标记位置。
【LabVIEW】程序结构
【LabVIEW】程序结构(包括:while循环、For循环、事件结构、条件结构、公式节点)1、while循环LabVIEW 在执⾏While循环时,如果⽤户没有给它设定循环时间间隔,那么它将以CPU的极限速度运⾏。
按下Ctrl+Alt+Delete 快捷键打幵任务管理器,可以看到它⼏乎将CPU全部利⽤,正常情况这样做⽐较危险,因为这样可能会导致整个LabVIEW 程序看上去跟“死掉” ⼀样。
在很多情况下我们没有必要让 While 循环以最⼤的速度运⾏,所以最好给 While 循环加上时间间隔。
有两种⽅法:⼀种是在每个循环中添加⼀个等待时间,只有在等待完毕后才运⾏下⼀个循环。
另⼀种⽅法是使⽤定时循环(Timed Loop)。
2、事件结构Labview 提供了事件结构,即仅当 “事件” 发⽣时,程序才作相应的响应。
通过事件结构,程序可以变得很简单,并降低CPU利⽤率。
当多个事件发⽣时会形成事件队列,直到每个事件对应的代码都被执⾏为⽌,因此不会有事件被漏掉的情况。
注意:事件结构必须放在 While 循环中,否则没有意义,因为当⼀个事件完成后,程序需要去等下⼀个事件的发⽣。
在跟⽤户进⾏交互的时候,尽量使⽤事件结构。
3、条件结构(1)当条件结构有多个分⽀时,必须设置默认分⽀,否则程序⽆法执⾏。
(是条件结构不是层叠顺序时)(2)隧道在条件结构⼀个分⽀的边框上创建输出隧道时,其他分⽀边框上也会出现输出隧道。
只要有⼀个输出隧道没有连线,则条件结构每个分⽀边框上的输出的隧道都显⽰为⽩⾊正⽅形。
隧道可使⽤数据类型的默认值,不是每个速调都必须连线。
在条件结构上右键单击输出隧道,从快捷菜单中选择未连接时使⽤默认,这样所有未连线的隧道都将使⽤隧道数据类型的默认值。
索引隧道,⼀个循环外的数组通过索引隧道连接到循环结构上,隧道在循环内⼀侧会⾃动取出数组的元素,依顺序每次循环取出⼀个元素。
⽤索引隧道传出数据,可以⾃动把循环内的数据组织成数组。
LabVIEW的基本编程结构和语法
LabVIEW的基本编程结构和语法LabVIEW(Laboratory Virtual Instrument Engineering Workbench)是一种广泛应用于科学研究和工程领域的图形化编程语言。
它提供了一种直观的编程环境,使得用户能够通过拖拽和连接图标来创建程序。
本文将介绍LabVIEW的基本编程结构和语法,帮助读者了解如何使用LabVIEW进行编程。
1. 数据流图(Dataflow Diagram)LabVIEW的核心思想是数据流图,即通过连接不同的节点以实现数据的流动和处理。
数据流图由函数块(Function Block)、图形化控件(Graphical Control)和连线(Wire)组成,用户可以根据需求自由搭建数据流图。
函数块代表不同的功能模块,例如数学运算、数据处理和界面控制等。
图形化控件用于与用户进行交互,包括按钮、输入框和图表等。
连线用于连接函数块和图形化控件,定义数据的传递路径。
通过灵活的拖拽和连接操作,用户可以将各种节点组合成一个完整的数据流图,实现复杂的功能。
2. 程序结构(Program Structure)在LabVIEW中,程序由模块(SubVI)组成,每个模块负责执行特定的任务。
模块可以是用户自定义的,也可以是LabVIEW提供的预定义模块。
程序结构由主程序和子程序组成,用户可以通过调用不同的子程序来实现特定的功能。
在图形化界面中,每个模块被表示为一个矩形图标,用户可以拖拽和连接模块来构建程序。
程序的执行顺序由数据流图的连线决定,当一个模块的输入数据准备好时,它就会被执行。
通过合理设计程序结构,可以提高代码的可读性和可维护性。
3. 数据类型(Data Type)在LabVIEW中,数据类型是非常重要的概念。
它决定了数据的表示方式和可操作性。
LabVIEW支持各种常见的数据类型,包括整数、浮点数、字符串和数组等。
用户可以根据需要选择不同的数据类型,并进行转换和操作。
LabVIEW中的执行结构
本节内容包含
循环结构 条件结构 其他结构
执行结构内部包含图形化的代码段,并能控制代码段运行的时间和方式。常见的执行结构有 While 循环、For 循环和条件结构。如需要多次运行同一段代码或需要按不同的条件执行不同代码,可考虑使用这些结构。
循环结构
视频:在 LabVIEW 中创建循环结构
(1)LabVIEW For 循环 | (2)流程图 | (3)伪码示例 图 5. For 循环
For 循环在结构选板上。While 循环也可转换为 For 循环,只需右键单击 While 循环的边框,然后从快捷菜单 中选择“替换为 For 循环”,即可实现。
循环总数接线端是一个输入接线端,表示重复执行子程序框图的总次数。
返回页首
视频:在 LabVIEW 中使用条件结构
条件结构包括两个或两个以上子程序框图(也称“条件分支”)。 条件结构每次只能显示一个子程序框图、执行一个条件分支。执行哪个子程序框图由输入值决定。条件结构类 似于文本编程语言中的 switch 语句或 if...then...else 语句。
分支选择器标签位于条件结构顶部,中间是当前分支在选择器中的名称,左右两边是递增和递减箭头。 单击递减和递增箭头可浏览所有条件分支。也可单击分支名旁边的向下箭头,在下拉菜单中选择一个条件分支。
数据类型 数值 布尔 字符串
默认值 0 FALSE 空值("") 表 1. 各数据类型的默认值
其他结构
LabVIEW 中还有其他更高级的执行结构,例如事件结构(用于处理用户界面交互等中断驱动任务)和顺序结 构(用于强制指定执行顺序)。这些内容并不包含在本入门教程内,如需了解这些结构,请参阅相应的 LabVIEW 帮助主题。
LabVIEW_顺序结构资料
LabVIEW_数据流运行机制
传统的编程语言,程序运行是基于程序编码的顺序,是指令驱 动的代码流。LabVIEW 的运行机制是基于数据流的。也就是说: 当程序中的可执行元素(节点)在收到所有必须的输入数据时才 开始执行。当该元素内的所有代码执行完成后,数据才流出该执 行元素并流向其他元素。
一种方法是:在程序框图中直接添加,如图: 如此创建的变量属于裸变量,必须在 右击图标的快捷菜单中,与前面板相 应控件进行关联方可有效。
另一种方法是:在右 击控件对象的快捷菜 单中执行 “创建— 局 部变量”,如图
局部变量的应用
该例的目的在于使用局部变量向它联系的前面板上的 电流控件写数据,也可以从电流控件读取数据。程序框 图如图所示:
采用层叠式:
⑴.新建 VI,在前面板上放置数值输入控 件“给定数据”和两个数值显示控件 “执行次数”,“所需时间”。
⑵.在程序框图上放置一个层叠式顺序结 构,在右击结构框图边框的快捷菜单中 执行两次“在后面添加帧”,创建 帧 1 和帧2。
⑶.选取第 0 帧,记录程序运行初始时间。 右击结构框图边框 — “添加顺序局部变量”,将在下边框出
局部变量主要用于本VI内不同位置之间的数据传递,而 全局变量主要是针对不同VI程序之间的数据通信。
1.局部变量
谈到局部变量,其实在介绍顺序结构时就已经接触过了,当时 是添加顺序局部变量来传递程序初始时间,以便计算程序所执行 的时间。目的是在不同选择分支中都能够对指示器进行赋值。
建立局部变量:建立局部变量的方法有两种。
1. 功能和作用
顺序结构将按照既定的顺序依次执行,它可以包含 多个代码子框图,这些子框图看起来就像是多帧电影 一样,所以把每个子框图称为一帧。
labview第四讲 程序结构
优点: 把每个帧平铺开来比较直观,方便代 码阅读,不需借助局部变量这种机制在 帧之间传递数据。 缺点:浪费空间。
例:求循环时间
四、公式节点
通过公式节点,用户可以实现复杂的数学
公式,还可以通过文本编程写一些基本的
逻辑语句,如if…else、case、while循环
之类的语句,弥补了图形化开发语言相对
(三)全局变量 与传统编程语言中的全局变量类似, 可以在不同的VI之间进行数据传递。 1、创建 2、属性:读和写 3、使用(举例)
4、特点 (1)以独立文件的形式存在 (2)一个全局变量中可以包含多个对 象,拥有多种数据库类型 (3)与子VI不同,不能进行编程,只 能用于简单的数据存储。 (4)速度快 (5)其中的数据可以分别访问
Local variaval
3、本地变量的属性: 读(Read)和写(Write) 4、使用 前面板对象的本地变量相当于其端口 的一个拷贝,它的值与该端口同步。
举例: 例1、用一个布尔开关同时控制两个循环
例2、给一个控制赋值,从一个指示中读 出数据。
例3、在顺序结构中的使用:创建一个 VI, 计算生成等于某个给定值的随机数所需 要的时间。
例1:用While循环
创建一个可以产生 并在图表中显示随 机数的VI。 前面板 有一个控制旋钮可 在0到10秒之间调 节循环时间,还有 一个开关可以中止 VI的运行。学习怎 样改变开关的动作 属性,以便不用每 次运行VI时都要打 开开关。
随机信号 1.0 0.8 0.6 0.0 0.4 0.2 0.0 0 1023 10.0 2.0 循环延时 4.0 6.0 8.0
(二)本地(局部)变量 相当于传统编程语言中的局部变量,可以 在同一个程序内使用。 1、引入理由: (1)每个控制或指示的数据端口只有一 个; (2)需要在同一个VI的不同位置多次为 指示赋值;或多次从控制中取出数据;或者 为控制赋值,从指示中取出数据。
LaBVIEW第三章程序结构
顺序结构
1、堆叠顺序结构:与case结构相似,都是在框图窗口的同一 位置堆叠多个子框图。每个子框图都有自己的序号,执行时, 按照序号从小到大逐个执行,最小序号是0,每个子框图称为 一个帧。 优点:节省框图窗口空间。 2、平铺顺序结构:可实现堆叠顺序结构同样的功能,其区别 在于表现形式不同。 优点:当帧数不多时,把每个帧平铺,比较直观,方便代码阅 读。 3、添加局部变量:在堆叠顺序结构中,用添加局部变量的方 法,使接入该变量的数据在当前帧后面的各个帧中可以作为输 入数据使用。平铺顺序结构可以不添加局部变量,因为每个帧 都是可见的,不需要借局部变量机制在帧之间传送数据。
作业 :练习3-1
2、For
循环
For循环用于将某段程序执行指定次数。和While 循环一样,它不 会立刻出现在流程图中,而是出现一个小的图标,而后您可以修改它 的大小和位置。具体的方法是,先单击所有端子的左上方,然后按下 鼠标,拖曳出一个包含所有端子的矩形。释放鼠标时就创建了一个指 定大小和位置的For循环。
For循环举例:产生10个随机数,并把最后一个显示出来。 步骤如下: 1. 放置一个数值显示控件到前面板,并改名为随机数。 2. 放置For循环到程序框图,如图:
3.放置随机数函数到程序框图,并连线。 4.计数端子上单击右键,选择创建常量,并输入10,如图:
5.运行程序,便可在前面板上看到结果。 6.因为程序的运行的速度非常快,我们无法一个一个地看 清所产生的10个随机数,我们可以在程序框图中添加时 间延迟控件。它位于函数→编程 →定时→时间延迟, 如图:
While 循环运行流程
• While 循环运行流程类似于如下的文本语言的 伪代码: • DO 执行子框图 • While 条件判断的结果为继续循环
labview经典顺序结构
一. 程序执行顺序LabVIEW 是数据流驱动的编程语言。
程序在执行时按照数据在连线上的流动方向执行。
同时,LabVIEW 是自动多线程的编程语言。
如果在程序中有两个并行放置、它们之间没有任何连线的模块,则LabVIEW会把它们放置到不同的线程中,并行执行。
图1、2:顺序执行和并行执行的例子顺序执行(图1):数据会从控制控件流向显示型控件,因此数据流经的顺序为“error in”控件,“SubVI A”,“SubVI B”,“error out”控件,这也是这个VI的执行顺序。
并行执行(图2):“SubVI A”,“SubVI B”没有数据线相互连接,它们会自动被并行执行。
所以这个VI的执行顺序是“SubVI A”,“SubVI B”同时执行,当它们都执行完成以后,再执行“Merge Errors.vi”。
二. 顺序结构如果需要让几个没有互相连线的VI,按照一定的顺序执行,可以使用顺序结构来完成(Sequence Structure)。
图3:Menu Palette当程序运行到顺序结构时,会按照一个框架接着一个框架的顺序依次执行。
每个框架中的代码全部执行结束,才会再开始执行下一个框架。
把代码放置在不同的框架中就可以保证它们的执行顺序。
LabVIEW 有两种顺序结构,分别是层叠式顺序结构(Stacked Sequence Structure)、平铺式顺序结构(Flat Sequence Structure)。
这两种顺序结构功能完全相同。
平铺式顺序结构把所有的框架按照从左到右的顺序展开在VI 的框图上;而层叠式顺序结构的每个框架是重叠的,只有一个框架可以直接在VI 的框图上显示出来。
在层叠式顺序的不同的框架之间如需要传递数据,需要使用顺序结构局部变量(Sequence Local)方可。
图4:层叠式顺序结构三. 顺序结构的使用好的编程风格应尽可能少使用层叠式顺序结构。
层叠式顺序结构的优点是及部分代码重迭在一起,可以减少代码占用的屏幕空间。
Labview 数据类型和结构:详细说明
簇函数可以创建并操作簇。 举例来说,可执行类似下列的操作:
-从簇中提取一个数据元素。
-向簇中添加一个数据元素。
-将簇分解为单独的数据元素。
另外也可以使用捆绑函数来组装一个簇。捆绑与按名称捆绑函数可以修改簇;而解除捆绑与按名称解除捆绑则可以将簇 打散。
图 2. 将数值控件拖入数组框内 若要将一个无效的输入或显示控件拖入数组框中,则无法正确放置。 在程序框图中使用数组之前,必须在数组框中插入对象。 否则数组的接线端将为空,不会产生任何相关的数据类型。
2 维数组
上述范例为一维数组。 而二维数组则是以网格的方式存储数据。 它需要一个列索引和一个行索引来定位一个元素,且 二者都是以 0 作为起始。图 3 所示即为一个 8 行 8 列的二维数组,即具有 8 × 8 = 64 个元素。
簇中元素的顺序
虽然簇与数组中的元素均有顺序,但是只要使用解除捆绑函数就会将簇内的所有元素拆开。 您可以使用按名称解除捆 绑函数将簇内的元素按名称解除捆绑。 如果您使用按名称解除捆绑函数,簇中的每一个元素必须要有个标签(Label)。 与数组不同的是,簇的大小必须固定。 与数组相同的是,而且簇既可以是输入控件也可以是显示控件。 簇中不能同时 含有输入控件和显示控件。
创建簇常量
图 10.簇输入控件示例
若要在程序框图中创建簇常量,可以在函数选板上选择 Cluster Constant,将簇外框放置到程序框图上,然后在框内放 置一个字符串常量、数值常量、布尔常量或者簇常量即可。 您可以使用簇常量来存储数据或者作为与其它数组进行比 较的基准。
如果前面板上已有簇输入控件或显示控件,且您想创建一个包含相同元素的簇常量,那么您可以将簇从前面板拖拽至程 序框图;或者右键点击前面板上的簇,并选择 Create»Constant 即可。
59.LabVIEW 程序中的线程 2 - LabVIEW 的执行系统
LabVIEW 程序中的线程2 - LabVIEW 的执行系统二、LabVIEW 的执行系统1. 什么是执行系统早期LabVIEW 的VI 都是单线程运行的,LabVIEW 5.0 后才引入了多线程运行。
其实,对于并排摆放的LabVIEW 函数模块而言,即使LabVIEW 不为它们分配不同的线程,通常也是“并行执行”的。
LabVIEW 会把它们拆成片断,轮流执行:这有一点像是LabVIEW 为自己设计了一套多线程调度系统,在系统的单个线程内并行执行多个任务。
LabVIEW 中这样一套把VI 代码调度、运行起来的机制叫做执行系统。
现在的LabIVEW 有六个执行系统,分别是:用户界面执行系统、标准执行系统、仪器I/O执行系统、数据采集执行系统、以及其他1、其他2系统。
一个应用程序中使用到的众多子VI 可以是分别放在不同的执行系统里运行的。
用户可以VI 属性面板上选择Execution 页面,可以在这个页面指定或更改某个VI 的首选执行系统。
2. 执行系统与线程的关系LabVIEW 在支持多线程以后,不同的执行系统中的代码肯定是运行在不同线程下的。
用户界面执行系统只有一个线程,并且是这个程序的主线程。
这一点与其他执行系统都不一样,其他的执行系统都可以开辟多个线程来执行代码。
用户除了可以设置VI 的执行系统,还可以设置它的优先级。
优先级分 5 个档次(暂先不考虑subroutine)。
在LabVIEW 7.0 之前,LabVIEW 在默认情况下为同一个执行系统下每个档次的优先级开启一条独立的线程;而在LabVIEW 7.0 之后,LabVIEW 在默认会默认的为每个执行系统下每个档次的优先级开启 4 条线程。
当然你使用\vi.lib\Utility\sysinfo.llb\threadconfig.vi 可以更改这一设置。
但是对于普通用户来说最好不要改动它。
在用 C 语言编写多线程程序时,你还要注意不能开辟太多的线程,因为线程开辟、销毁、切换等也是有消耗的。
虚拟仪器-第4章 LabVIEW的程序结构
数据隧道
条件结构内部与外部之间的数据也是通过隧道来交换传递的。 向条件结构边框内输入数据时,各个子程序框图连接或不连接这个数 据的隧道都可以。从条件结构边框向外输出数据时,各个子程序框图都必 须为这个隧道连接数据,否则隧道图标是空的,程序也不能运行。 如果允许没有连线的子程序框图输出默认值,可以在数据隧道上右击, 在弹出的快捷菜单中选择“未连线时使用默认”命令,在这种情况下,程 序执行到没有为输出隧道连线的子程序框图时,就输出相应数据类型的默 认值。
【实训练习】
用条件结构来实现两个数的加、减、乘、除四则运算,要 求用组合框作为条件结构的选择器。
4.3 顺序结构
LabVIEW作为一种图形化的编程语言,有其独特的程序执行顺序——数据 流执行方式,数据流经节点的动作决定了程序框图上VI和函数的执行顺序。 但在实际中希望节点按一定的次序执行,这就需要引入顺序结构执行。 LabVIEW顺序结构的功能是强制程序按一定的顺序执行。
种变量的操作方法
第4章 LabVIEW的程序结构
程序结构对任何一种计算机编程语言来说都是十分重要的,它控制整 个程序语言的执行过程,一个好的程序结构,可以大大提高程序的执行效率。 LabVIEW作为一种图形化的高级程序开发语言,执行的是数据流驱动机制, 在程序结构方面除支持循环、顺序、条件等通用编程语言支持的结构外,还 包含一些特殊的程序结构,如事件结构、使能结构、公式节点等等。
条件接线端是一个布尔变量,接入布尔 值用于控制循环执行。条件接线端有两种 使用状态。
循环框架 为真时停止
计数接线端 条件接线端
为真时继续
与For循环是在执行前检查是否符合条件不同,While循环是在执行后再检查条 件端子,因此,在While循环的执行流程中,循环框架中的代码至少执行一次。
LABVIEW第2章程序结构
第2章 程序结构
2.1.4 反馈节点
反馈节点(Feedback Node)用于将子VI、函数或一组子VI和 函数的输出连接到同一个子VI、函数或组的输入上,即创建反
馈路径。反馈节点只能用在While循环或For循环中,它和只有
一个左端子的移位寄存器的功能完全相同,是一种更简洁的表 达方式。 移位寄存器和反馈节点之间的转换很容易。在移位寄存器 的左或右端子上弹出快捷菜单,选择Replace with Feedback Node,即可转变为同样功能的反馈节点;在反馈节点本身或者 其初始化端子上弹出快捷菜单,选择Replace with Shift Register, 即可转变为同样功能的移位寄存器。如图2-10所示,先建立图 (a),然后把移位寄存器转换为反馈节点就得到图(b)。
第2章 程序结构
(a)
()
图2-10 移位寄存器和反馈节点转换
第2章 程序结构
2.2 分 支 结 构
分支结构(Case Structure)是一种多分支程序控制结构,类 似于文本编程语言中的If…Then…Else语句。分支结构包含多 个子框图代码,这些子框图就像一叠卡片,一次只能看见一张。 分支结构位于Functions→Execution Control子模板和 Functions→Structures子模板上,如图2-11所示。与For循环和 While循环结构的使用一样,通过拖拽Case结构图标将其放置 在框图上,并使其边框包围所希望的对象;也可以先将Case结
则会导致代码错误,程序无法运行。此时,输出隧道的图标是 空心的,表示部分分支中没有接入输入值。只有每个分支的输
出隧道都连接数据后,图标才变成实心,程序才能正常运行。
如果不想为每个分支都明确指定输出隧道的输入值,可以 让LabVIEW为没有接入隧道输入值的分支接入隧道的默认数 据类型,方法是在输出隧道上右键弹出快捷菜单,选择Use Default If Unwired,如图2-16所示。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
执行结构:详细说明While循环与文本编程语言中的Do循环或Repeat-Until循环类似,必须满足特定条件之后,While循环才会执行其内的程序代码,如图1所示。
图1. LabVIEW中的While循环;具备While循环功能的流程图;还有While循环功能的伪码范例While 循环位于Structures面板上。
从面板上选择While Loop之后,针对所要重复的代码区块,可用鼠标拖拽出矩形并将之圈住。
放开鼠标之后,即会有While循环圈住用户所选的区块。
只要将对象拖拽至While循环中,即可将其新增至While循环中。
只要条件接线端接收特定的布尔值之后,While循环随即执行代码也可通过While 循环的条件接线端来处理基本错误。
若将错误簇连接至条件接线端,则只有Status参数的真或假值传送至接线端。
同样,Stop if True和Continue if True快捷菜单项目,将分别变更为Stop if Error和Continuewhile Error。
计数接线端属于输出端点,其中包含已完成的循环次数。
While循环的循环计数均从零开始。
注意: While循环将至少执行一次。
无限循环无限循环为常见的程序错误,即无法停止的循环。
若条件接线端 i为True时停止,而用户又在While循环外部放置布尔控件接线端。
一旦循环开始,控件值即成为FALSE,就会形成无限循环。
图2.While循环之外的布尔控件因为在循环开始之前,仅读取该值一次,所以改变控件的值并无法停止无限循环。
若要通过控件停止While循环,则必须在循环中配置控件接线端。
若要停止无限循环,则按下工具栏上的Abort Execution按钮,即可终止该VI。
在图3中的While 循环将不断执行,直到随机数函数的输出大于或等于10.00,且Enable控件为TRUE时才会停止。
当且仅当“与”函数的两个输入都为真时,函数的返回值才为真。
否则,与函数将回传FALSE。
在图3中,只要随机函数不产生10.00以上的值,就会成为无限循环。
图3.无限循环结构隧道隧道负责为结构传送数据。
While循环边框上的实心区块即为隧道。
此区块的颜色与隧道所连接的数据类型的颜色相同。
在循环终止之后,随即有数据送回循环。
当隧道传送数据进入循环时,只有数据抵达隧道之后,才会执行循环。
图4即以计数接线端连至隧道。
直到While 循环执行完毕,隧道中的数值才会传送至Iterations显示控件。
计数接线端在Iterations显示控件中只会显示最后的数值。
图4. While循环的隧道For循环如下图所示,For循环按规定次数执行子程序框图。
下图显示了LabVIEW中的For循环、For循环的相应流程图和实现For循环功能的伪码范例。
图5. LabVIEW中的For循环;具备For循环功能的流程图;还有For循环功能的伪码范例For 循环位于Structures面板上。
还可在程序图上放置While循环,然后对While循环的边框按下鼠标右键,再选择快捷菜单中的Replace with For Loop,即可将While循环变更为For循环。
计数接线端属于输入端点,其数值表明子程序图所应重复的次数。
计数接线端则为输出端点,显示已完成循环的次数。
For循环的循环计数均从零开始起算。
For循环与While循环的不同之处在于:For循环只执行指定的次数,而While 循环必须执行达条件接线端满足特定数值,才会停止。
图6中的For 循环将于每秒产生1组随机数字,总计100秒,并于数字显示控件中显示这些随机数字。
图6. For循环范例为循环增加定时当循结构环完成当前循环之后,随即开始执行下一次的循环,直到满足停止条件为止。
而用户往往需要控制循环的频率或定时。
以采集数据为例,若要每10秒获取数据1次,则必须为循环迭代进行定时,使其能每10秒发生一次。
即使不需要以特定的频率执行循环,也需要给处理器时间完成其它任务,如处理用户界面事件。
等待函数可在循环内放置Wait函数,让VI可休眠特定时间。
在这段等待时间之内,处理器可以处理其它任务。
Wait函数将使用操作系统的毫秒计数器。
Wait(ms)函数将等待,直到毫秒计数器达到用户所指定的输入。
此函数将确保循环的执行速率,至少等于用户所指定的输入总数。
条件结构条件结构具备超过两组的子程序图或条件。
一次仅能看到一组程序图,则此结构将单次仅执行一组条件。
输入值将决定执行的子程序框图。
条件结构近似于文本编程语言的Switch,或if…then…else结构。
在条件结构顶端的Case Selector 标签,将包含该选择器的名称。
此名称将对应至中间的条件,以及两边的增量或减量箭头。
选择Decrement 与Increment箭头,就可以滚动可用的条件。
另可选择条件名称旁边的向下箭头,再从下拉菜单中选择条件。
将输入值或条件选择器连接至Selector Terminal,即可决定所要执行的条件。
Selector Terminal必须连接整数、布尔值、字符串,或枚举类型的值。
另外,可将Selector Terminal置于条件结构的左侧边框任何一处。
若选择元端点为布尔数据类型,则结构将具备TRUE与FALSE条件。
若Selector Terminal为整数、字符串或枚举类型的值,则结构可能为任何条件。
注意:默认情况下,连接至选择器端点的字符串值,属于大小写敏感度的条件。
若仅需不对大小写敏感度的条件,可将字符串值连接至选择器端点,再对条件结构的边框按下鼠标右键,然后在快捷菜单中选择Case Insensitive Match。
若并未针对条件结构指定默认条件,以处理范围以外的数值,则必须详细列出所有可能的输入值。
以整数的选择器为例,用户指定1、2、3的条件,若输入值为4或其它未指定的整数值,则用户必须指定默认的执行条件。
注意:若选择器连接Boolean输入控件,则将无法指定默认条件。
若对条件选择器标签按下鼠标右键,则快捷菜单将不会显示Make This The Default Case。
Boolean控制元可为TRUE或FALSE,直接决定是否执行条件。
对条件结构的边框按下鼠标右键,即可add、duplicate、remove、rearrange cases,也可选择默认条件default case。
选择条件图7中的VI使用了条件结构,可根据用户所选“C”或“F”的温度单位,执行不同的程序代码。
程序图上方为前置的TRUE条件。
程序图中央则选了FALSE条件。
若要选择条件,则可在Case Selector 中输入数值,或通过Labeling 工具编辑数值。
在选择任何条件之后,此条件将显示在程序图上,即如图7下方的程序图。
图7.改变条件结构的条件视图如果用户输入的控件数值与连接至选择器端点的对象为不同的数据类型,则数值显示为红色。
这代表无法执行该VI,直到使用者删除或编辑该数值。
同样的,由于浮点运算可能发生四舍五入的错误,因此浮点数值无法作为条件选择器的数值。
如果将浮点数值接至条件,则LabVIEW会将数值舍近为最接近的整数。
若在条件选择器中键入浮点数值,则数值将显示红色,直到删除或编辑该数值才能执行该结构。
输入与输出隧道条件结构可能有多个输入或输出隧道。
输入可用于所有条件,但并非每个都条件都需要所有输入。
但各项条件均需定义一个输出隧道。
请参考以下建议:程序图上的条件结构具备一个输出隧道,且至少有一个条件并无任何输出值接至隧道。
若执行没有输出值的条件,则LabVIEW将不知道应回传何项数值至输出。
LabVIEW会在遂道中央显示为白色代表错误。
未连接的条件,可能并非是当前显示在程序图上的条件。
纠正错误时,需找到未连接输出值的条件分支,然后在该条件分支下给隧道连接一个输出值。
也可对输出隧道按下鼠标右键,并选择快捷菜单的Use Default If Unwired,即可让所有为接线隧道使用隧道数据类型的默认值。
当输出接至所有条件后,输出隧道即显示为实心的颜色。
应避免使用Use Default If Unwired选项。
此选项将无法详细呈现程序框图,并可能影响使用相同此段程序的其他工程师。
Use Default If Unwired也可能影响程序代码调试。
如果选择了该选项,使用的默认值是与隧道相连接的数据类型的默认值。
例如,如果隧道是布尔数据类型,默认值为假。
Numeric 0Boolean FALSEString empty ("")表1. 数据类型默认值其它结构LabVIEW具备更高级的执行结构,如事件结构(可处理如用户界面交互等中断任务)与顺序结构(可强制执行顺序),但是这部分内容超出了本文的范围。
若要进一步了解这些结构,可参阅LabVIEW 帮助文件中的相关主题。
在LabVIEW的循环迭代间传输数据当在LabVIEW中设计循环时,往往需要获取前一次循环的数据。
举例来说,若必须从每次循环中获取一组数据,且每五组数据又要平均一次,则必须从前一次循环获取数据。
移位寄存器当要将数值从前一次循环传至下次循环时,即可使用移位寄存器。
移位寄存器均为成对的接线端,并置于循环框的左右两边相互对应。
右侧接线端含有一个向上的箭头,用于存储每次循环结束时的数据。
LabVIEW接着将连接至寄存器右接线端的数据传送至下一次循环。
在循环执行过后,循环右边的接线端随即传回最新值,并将之储存在寄存区中。
对循环左或右侧边框按下鼠标右键,再选择Add Shift Register即可建立移位寄存器。
寄存器可传送任何数据类型,可自动变更连接寄存器的第一组对象的数据类型。
连接各寄存器端点的数据,均必须为相同类型。
单一循环可新增超过一组移位寄存器。
如循环中的多个操作都需使用前面循环的值,可以通过多个移位寄存器保存结构中不同操作的数据值。
如下图所示。
图8. 使用多个移位寄存器初始化移位寄存器初始化移位寄存器,即重设VI运行时移位寄存器传递给第一次循环的值。
如图9所示,将输入控件或常数接至循环左边的寄存器接线端,即可初始化移位寄存器。
图9. 初始化移位寄存器在图9中,For 循环将执行5次,且逐次提高寄存器所储存的数值在For循环执行5次之后,寄存器随即传送最终值5至显示控件,且VI随即退出。
每次只要执行VI,寄存器均以0开始。
若不要初始化寄存器,则循环将使用最近一次执行时写入至寄存器的值;如果尚未执行过循环,则将使用该数据类型的默认值。
使用未初始化的移位寄存器可以保留VI连续执行期间的状态信息。
图10.未初始化的移位寄存器在图10中,For循环将执行5次,且逐次提高寄存器所储存的数值。
当首次执行VI时,寄存器即从0开始,也为32位整数的默认值。