cpubbs论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

LabVIEW+单片机学习套件全套教程资料下载[免费]LabVIEW论坛精华列表贴USB0816数据采集卡《LabVIEW宝典》
LabWindows/CVI论坛精华贴NET0816以太网数据采集卡RC0210远程设备授权系统 关闭关停锁定打开设备 户外分布式数据采集
NET1624低速高精度以太网数据采集卡WIFI0824SD无线WIFI网络数据采集卡脱机运行 SD存储 小尺寸微型 串口采集远程采集 安卓 手持移动采集 纪录仪
查看: 3775|回复: 35

第五讲 程序结构---循环结构

[复制链接]
发表于 2009-2-16 21:36:23 | 显示全部楼层 |阅读模式
5.1
条件分支结构:Case

Case结构含有两个或者更多的子程序(Case),执行哪一个取决于与选择端子或者选择对象的外部接口相连接的某个整数、布尔数、字符串或者标识的值。必须选择一个默认的Case以处理超出范围的数值,或者直接列出所有可能的输入数值。Case结构见下图,各个子程序占有各自的流程框,在其上沿中央有相应的子程序标识:Ture、False或1、2、3…。按钮用来改变当前显示的子程序(各子程序是重叠放在屏幕同一位置上的)。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x
 楼主| 发表于 2009-2-16 21:36:57 | 显示全部楼层
条件结构包含有两个或者更多的子框图,每一个子框图包含一段程序代码,由此对应一个程序分支。多个子框图就像一摞卡片重叠在一起,任何时候只有一个是可见的,执行哪一个取决于于选择端子外部接口相连的某个整数,布尔数,字符串或者枚举指,用户也可以直接输入所有可能出现的值。
1. 选择端口的输入值
条件结构选择端口的输入值是由与它相连的输入控件对象决定的,数据类型可以是布尔量,整形,字符串型或者枚举型。条件结构顶部中间是各分支的选择标识,它自动调整为输入的数据类型,可以在工具模板上使用标签工具直接键入单个数值或某个数据范围。数值之间用逗号来分开,例如:“..0,2,4..10”表示选择条件为:≤0,2,4,5,6,7,8,9,10。
对于字符型和枚举型数值在条件标识上会自动加上双引号,当键入的选择器标识值与连接选择端口的数值类型不同时,选择器标识变为红色标识有错误。如图:

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x
 楼主| 发表于 2009-2-16 21:37:51 | 显示全部楼层
设置默认分支的方法是,选择一个分支结构,在快捷菜单中执行“本分支设置为默认分支”,它的作用是当选择端口的值与选择器标识值没有一个匹配时,就执行默认分支。如图:

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x
 楼主| 发表于 2009-2-16 21:38:19 | 显示全部楼层
2.条件结构的数据通道
条件结构的数据通道就是数据的输入和输出端口。将结构内外的端子相连后,边框上就会出现一个小矩形框,这就是数据通道,用于传输数据。向条件结构的一个分支提供数据时,这个数据对于所有的分支都是有效的,也就是其他分支都可以使用这个输入数据。条件结构的输出通道有些不同,当在一个分支中创建输出通道后,所有分支的同一位置都会出现一个白色小方框,它要求每一个分支都必须为这个通道予以连接,通道变为实心后程序才可以运行。也可以在通道的快捷菜单中选定“未连线时使用默认”为没有连接的分支定义一个默认输出值,这时输出通道变为灰色。如图:

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x
 楼主| 发表于 2009-2-16 21:38:51 | 显示全部楼层
条件结构应用举例
例一:
该例的目的是检查一个数是不是正数,如果是就计算该数的平方根值,如果不是则发出警告。
  • 新建一个VI,在前面板上放置一个数值输入控件和一个数字显示控件。
  • 在程序框图上放置一个条件结构,调整边框为合适大小。
  • 在比较运算子模板中选取“大于等于0?”函数,如果数字大于或者等于0则返回真,否则返回假。它的输出连接条件接口的选择端口。
  • 在数值数字运算子模板中选取“平方根”函数,放置在条件结构的“真”子代码框。
  • 选择一个发声函数,放到条件结构的“假”子代码框。它位于函数→编程→图形与声音→蜂鸣声。如图:

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x
 楼主| 发表于 2009-2-16 21:39:21 | 显示全部楼层
6. 在条件结构的假代码框的输出通道上选取创建常量,创建常数-999,表示当数值输入为负数时输出-999,同时蜂鸣器发出警告。
7. 完成连线,如图:

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x
 楼主| 发表于 2009-2-16 21:39:54 | 显示全部楼层
例二:
该例的目的是首先要判断液面的高度是否超过零界面,如果超过零界面则执行后续操作(循环判断液面是否超位),否则停止执行程序。
因为Labview语言的While循环是先执行,然后再判断条件。而在实际应用中,经常是要求先进行判断条件,只有当条件满足时才执行,否则不执行。可以在While循环中加入条件结构来实现此功能
  • 新建一个VI,在前面板上放置一个数值输入控件,模拟容器“液面高度”同时放置一个“液面报警”指示灯,当液面超过零界面时点亮。
  • 在程序框图上放置一个While循环结构并在它内部放置一个条件结构,调整结构边框位合适的大小。
  • 在比较运算子模板中选取“大于0?”函数,如果数字大于0返回真,否则返回假。它的输出连接条件的选择端口,并且连接到While循环结构的循环条件端子,表示输入数字量大于0则继续循环,并且执行真分支。
  • 在真分支代码框中,放置“大于?”函数,将“液面高度”与上限值“5”进行比较,输出送给“液面报警”指示灯。
  • 完成连线,并运行程序。程序及运行结果如图:

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x
 楼主| 发表于 2009-2-16 21:40:30 | 显示全部楼层
5.2
顺序结构(Sequence Structure)

在代码式的传统编程语言中,默认的情况是,程序语句按照排列顺序执行,但LabVIEW中不同,它是一种图形化的数据流式编程语言。在图51左图中,假设有ABCD4个节点,其数据流向如右图所示。按照数据流式语言的约定,任何一个节点只有在所有的输入数据有效时才会执行,所以图中,当且仅当A、B、C3个节点执行完,使得D节点的3个输入数据都到达D节点后,D节点才执行。但是你要注意,这里并没有规定A、B、C3个节点的执行顺序。在LabVIEW中这种情况下,A、B、C的执行顺序是不确定的,如果你需要对它们规定一个确定的顺序,那就需要使用本节介绍的“顺序结构”。
图5-1中的右边是顺序结构的图标,它看上去像是电影胶片。它可以按一定顺序执行多个子程序。首先执行0帧中的程序,然后执行1帧中的程序,逐个执行下去。与Case结构类似,这多帧程序在流程图中占有同一个位置。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x
 楼主| 发表于 2009-2-16 21:40:58 | 显示全部楼层
顺序框图位于函数→编程→结构→平铺式顺序结构,层叠式顺序结构。
顺序结构依次执行程序,它可以包含多个代码子框图,这些代码子框图看起来就像是多帧电影胶片一样,所以把每个子框图称为帧。右击顺序结构的框架,将弹出如图所示的快捷菜单。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x
 楼主| 发表于 2009-2-16 21:41:28 | 显示全部楼层
其中添加顺序局部变量是为了在各个帧之间传递数据。

顺序结构的一个典型应用就是计算程序运行的时间,将通过这个例子来说明顺序结构的用法。
  • 新建一个VI,在前面板上放置一个数值输入控件“给定数据”和两个数值显示控件“执行次数”,“所需时间”。
  • 在程序框图上放置一个层叠式顺序结构,右击结构边框,在弹出的快捷菜单中执行两次“在后面添加帧”,创建帧1和帧2。
  • 选取第0帧,记录程序运行初始时间。
右击顺序结构框图的边框,在弹出的快捷菜单中执行“添加顺序局部变量”,这时在第0帧的下边框出现一个黄色小方框,这就是顺序局部变量,它可以在同一个顺序结构中的各帧之间传递数据。
放置一个时间计数器到顺序结构内,它位于函数→编程→定时→时间计数器。返回毫秒定时器的值,用与计算占用的时间。用连线工具将它与顺序局部变量相连,这时黄色小方框里会出现一个指向顺序结构外部的箭头,数值可用后续帧使用,如图:

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x
 楼主| 发表于 2009-2-16 21:41:59 | 显示全部楼层
4. 选取第1帧,实现等于给定值的匹配运算。程序如图:

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x
 楼主| 发表于 2009-2-16 21:42:22 | 显示全部楼层
5. 选取第2帧,同样放置一个时间计数器函数用于返回当前时间,将它减去顺序局部变量传递过来的第一帧初始时间后就可以得到花费的时间,如图:

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x
 楼主| 发表于 2009-2-16 21:43:03 | 显示全部楼层
运行,结果如图:

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x
 楼主| 发表于 2009-2-16 21:43:29 | 显示全部楼层
注意Labview编程的主要特点是数据流形式,这便于VI大量的按照并行方式运行,优化了程序的计算性能。而顺序结构却趋向于中断数据流编程,禁止程序并行操作,顺序结构还掩盖了部分代码,所以用户在编程时应尽量不用或少用顺序结构。
在实际应用中,经常用人为的数据依从关系来确定程序先后执行的顺序,在前面簇的章节中,我们就提到过Error簇可以控制程序执行的先后顺序,但并不是每一个控件都有Error簇的输入和输出端口,这时还有另一种方法能实现顺序执行的功能。如图:

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x
 楼主| 发表于 2009-2-16 21:43:58 | 显示全部楼层
从第一个While循环结构中的布尔开关上连了一根线到第二个While循环结构的边框上,可以看到,第二个While循环结构中没有一个对象需要这个数据,只是起到顺序执行程序的目的。

公式节点
用户可以在程序框图的两个位置找到公式节点结构,一个位于函数→Express→算术与比较→公式;另一个位于函数→编程→结构→公式节点。如图:

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x
您需要登录后才可以回帖 登录 | 注册

本版积分规则

Archiver|手机版|cpubbs论坛. ( 粤ICP备09171248号 )

GMT+8, 2024-5-19 00:06 , Processed in 0.824663 second(s), 7 queries , Gzip On, File On.

Powered by Discuz! X3.4

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表