虚拟仪器及LabVIEW编程结构第2讲
合集下载
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
条件接线端/conditional terminal (输入接线端,真(T)时停止— —输入布尔值真时结束循环)
• 流程:执行循环结构内的循环体代码,之 后判断条件接线端的输入布尔值,决定是 否继续循环(先执行,后判断——循环体 代码至少执行1次) • 条件接线端默认为“真(T)时停止”,可配 置为“真(T)时继续”
LabVIEW编程及虚拟仪器设计
第2讲——编程结构
上一讲内容回顾 • 虚拟仪器——使用可定制的软件和模块化 测量硬件,建立用户自定义的测量和测试 系统;虚拟仪器与传统仪器的比较:灵活, 成本低 • 硬件平台(PCI接口的数据采集卡+计算机) 和软件开发环境(LabVIEW——图形化编 程方式)
PCI-MIO-16E-4 / PCI-6040E
以图形化方式响应和处理用户 的操作,与Windows系统的事 件处理方式相类似;
事件数据节点 (包含事件信息)
• 流程:执行到事件结构时进入休眠等待状 态,直到发生已配置事件后执行对应分支, 之后结束事件结构的执行
事件结构 • 事件结构通常配合While循环使用,实现“休 眠 – 处理事件 – 休眠 – 处理事件……”的循 环 • 通过”编辑事件“对话框配置所处理的事件: 常用事件:
循环结构 - 移位寄存器(Shift register) • 移位寄存器:从一次循环向下一次循环传 递数据:
循环开始前 第一次循环 之后某次循环 前一 新值 初值 初值 新值 新值 最后一次循环 前一 新值 新值 终值
左接线端添加更多元素,保存之 前多次循环的值(例:求移动平 均值)
循环结构 - 移位寄存器 • 区分:多个移位寄存器 – 同一个移位寄存 器多个左端元素
条件结构 例3:求平方根
-99999表示出错
真分支
假分支
循环和条件结构应用示例 例4:求数组最大值和对应索引
数组索引值 输入数组
0
1
2
3
4
5
6
7
8
9
3 3 0
5 5 1
2 5 1
1 5 1
9 9 4
4 9 4
7
8
0
6 9 4
已扫查最大值 对应索引值
循环和条件结构应用示例 例4:求数组最大值和对应索引
本讲内容
1. 循环结构 2. 条件结构 3. 顺序结构 4. 公式节点 5. 事件结构
公式节点(Formula node) • 采用与文本编程语言(C语言)相似的语法, 实现较复杂/繁琐的算法 • 在边框上添加输入、输出接线端,接线端 标签与代码中变量名一致 例7:摄氏度和华氏度转化程序
输入接线端(细边框)
3 5 2 1 9 3 2 1 5 4 2 1 3 4 5 1 2 3 4 5 1 2 3 4 0 1 2 3 0 4 1 2 3 0 4 1 2 0 3 4 1 0 2 3 4 0 1 2 3 4 0 1 2 3 4
4
7 8 0 6
输入待 排序数 组
7
8 0 6 9
7
0 6 8 9
0
6 7 8 9
顺序结构 • 功能:包含多个帧(frame),按序号从小 到大顺序执行各帧中的子框图 • 两种类型:(1) 层叠(stacked)的顺序结构
只有1帧时 子框图 层叠的顺序结构 (有2帧时) 递减箭头
帧序号标签
子框图
递增箭头
第0帧
第0帧(其他帧不可见)
顺序结构 • (2) 平铺(flat)的顺序结构
寄存器1.前一次值
寄存器1.新值
寄存器1.前一次值
寄存器1.新值
子框图代码
子框图代码
寄存器2.前一次值
寄存器2.新值
寄存器1.前二次值 1个移位寄存器,2个左端元素
2个移位寄存器
本讲内容
1. 循环结构 2. 条件结构 3. 顺序结构 4. 公式节点 5. 事件结构
条件结构(Case structure) • 功能:包含多个子框图/分支;根据选择器 接线端的值,决定执行哪个子框图/分支:
=
”..“表示范围,”,“表示列表
条件结构内外数据的交换 • 输入隧道(包括选择器接线端)的值在每 个分支中都可以使用 • 必须在每个分支中都为输出隧道接入一个 值,除非打开”未连接时使用默认“选项:
有分支未连入值 (无法运行)
所有分支都连入值 (可以运行)
打开了”未连接时使用默认“选项 (可以运行)
第1帧
第2帧 计算时间计数器两 次调用之间的差值, 并转化为秒
延时3秒 (可放入任何需要统 计执行时间的代码)
两种顺序结构的转化 • 两种顺序结构之间可以直接相互转化(边框
弹出快捷菜单,有相应选项)
与前例对应的平铺顺序结构实现方案
第0帧
第1帧
第2帧
平铺的顺序结构没有局部变量,帧之间的 数据传递直接用穿过帧壁的连线实现
递减箭头 选择器标签 递增箭头
选择器接线端
“真”分支对 应的子框图
• 接线端可以是布尔、字符串、整型或枚举 类型,默认为布尔型,有“真”、“假” 两个子框图/分支,多个分支层叠放置
条件结构 • 使用要点:要么在选择器标签中列出所有 可能的情况,要么必须给出一种默认(缺 省)情况 • 选择器接线端接入布尔类型时,只有两种 可能;接入整型和字符串时,有无数种可 能情况。对于整型,可使用范围和列表: ?
5
6 7 8 9
5
6 7 8 9
5
6 7 8 9
5
6 7 8 9
5
6 7 8 9
5
6 7 8 9
5
6 7 8 9
每一趟将余下元素中最大元素沉底
循环和条件结构应用示例 例5:对数组元素排序(bubble sort)
假分支 放慢执行 速度 临时数组 (调试用,已排好一部分) 排序结果数组
本讲内容
1. 循环结构 2. 条件结构 3. 顺序结构 4. 公式节点 5. 事件结构
连线板 图标
• 图标用途:当前VI作为子VI被调用时,在上层VI框图上的 图示 • 连线板用途:当前VI作为子VI被调用时,传入参数和返回 计算结果
上一讲内容回顾 建立子VI: • 建立VI,编写代码实现其功能 • 编辑图标(可选) • 连线工具连接连线板格子和输入、输出控 件(定义输入、输出参数) • 在上层VI的程序框图窗口调用定义好的子VI
循环结构 - 自动索引(Auto-indexing) • 数组:相同类型数据的组合 • 数组常量,数组输入控件,数组输出显示 控件:
一维数组常量(整型) 元素索引: 0 1 2 …… 一维数组输入控件(双精度型)
二维数组输出显示 控件(布尔型)
元素索引: 0
1
……
• 典型数组操作函数:
元素索引: 0,0
2,1
提取数组元素
插入数组元素
循环结构 - 自动索引 建立数组的步骤:
1.添加数组框架(常量或控件) 2.向框架添加简单数据类型的常量或控件 (确定数数组包含 元素,不再为空)
循环结构 - 自动索引 • 自动索引:循环结构访问数组元素或者构 建新数组的工具 • 设置输入和输出隧道为打开或关闭自动索 引:
• 打开自动索引时,输入隧道每次循环提取 一个数组元素,输出隧道每次循环生成一 个数组元素( For循环默认打开索引,While循 环默认关闭索引)
循环结构 - 自动索引 例2:一维数组各个元素乘以2,建立新数组
整型一维数组 一维数组输出显 示控件接线端
一维数组常量
整型标量
此处For循环执行次数由打开自动索引功能的输入隧 道上输入的一维数组元素个数决定!
只有1帧时 子框图 平铺的顺序结构 (有2帧时)
第0帧
第0帧
第1帧
比较:层叠顺序结构节约空间,不够直观; 平铺顺序结构与其相反。
(层叠)顺序结构的局部变量 • 在层叠顺序结构某帧向其后的帧传递数据 例6:统计一段代码执行时间
第0帧
向局部变量输入 数据(毫秒计数 器的计数值)
右键点击边框,添 加顺序局部变量
事件驱动(event-driven)的编程机制 由事件决定程序执行流程 例如:MS Word程序:鼠标选择菜单项,按 下键盘按键……
事件结构
事件队列, 先进先出
尾
两个事件 入队列
超时 鼠标进入窗口 超时
头
按钮A值改变处 理代码 鼠标进入窗口处 理代码 超时处理代码
按钮A值改变处 理代码 鼠标进入窗口处 理代码 超时处理代码
控件接线端 数据类型名称 (图标显示) 数值类型 布尔类型 字符串类型 连线外形和特征颜色
(浮点类型橙色,整型蓝色) (绿色)
(紫色)
数组类型
(分别为1、2和3维数组,颜 色随元素数据类型而变化) (元素都是数值数据类型,棕色)
簇类型
(元素不都是数值数据类型,紫色)
上一讲内容回顾 • 图标和连线板——用于建立子VI
上一讲内容回顾 • LabVIEW简介:前面板窗口和程序框图窗 口;输入控件、常量和输出显示控件;数 据流的编程机制
“加”和“除”函数
输入控件 (数值类型)
输出显示控件 (数值类型)
“A”和“B”的接线 端
“C”的接线端 数值常量 (运行时不可修改)
上一讲内容回顾
① ④ ② ③
上一讲内容回顾 • 基本数据类型
循环和条件结构应用示例 例5:对数组元素排序(bubble sort)
输入数组
3 3
5 2
2 1
1 5
9 4
4 7
7 8
8 0
0 6
6 9
第一趟结果
第1趟:第1、2个元素中较大的放在第2位置,第2、 3元素中较大的放在第3位置……最大元素到达最后 的位置,之后再对前面9个元素排序
循环和条件结构应用示例 例5:对数组元素排序(bubble sort)
• 注意:根据数据流机制,仅在循环运行前读取一 次输入隧道的值,仅在循环运行结束后从输出隧 道输出一次值
正确:每次运行子框图 都检查按钮值
错误:仅在循环执行前读取一次 按钮值,循环永远执行(死循环) 或只执行一次
循环结构 - 循环结构内外数据的交换
?
正确:每次运行子框图 都生成一个随机数并输 出到波形图表中 错误:仅在循环执行结束后,输 出最后生成的一个随机数
计数接线端/iteration terminal (输出接线端,输出子框图已执行次数)
• 流程:判断执行次数是否达到总数接线端 接入的数值,如未达到则执行循环结构内 的子框图代码(先判断,后执行——子框 图代码可能执行0次)
循环结构 - 循环结构内外数据的交换
循环内部代码 输入隧道(tunnel) 输出隧道
顺序结构(Sequence structure) • 基于数据流(dataflow)的图形化编程机制, 只要求函数/节点在求解前输入参数准备好, 没有对多个输入参数和数据的求解顺序作要 求,因而可认为并行计算求解:
输入端子
输出端子
• 框图中的两段无关联代码,默认并行运行 • 数据流编程——天生是并行的,执行效率高, 但有时希望能够控制代码的执行顺序……
循环结构 - While循环结构 例1:不断生成和显示随机数,随机数生成速 度可调
编程->数值子选板
编程->定时子选板
循环结构 - For循环结构(For loop) • 功能:按照预设次数执行子框图
总数接线端/count terminal (输入接线端,设置循环执行次数)
子框图/循环体 (放置循环代码)
输出接线端(粗边框)
本讲内容
1. 循环结构 2. 条件结构 3. 顺序结构 4. 公式节点 5. 事件结构
事件结构(Event structure) 什么是事件(event)?
程序所关注的状态变化,或发生的事情
a) b) c) d) 按下前面板按钮 数值控件值变化 鼠标指针进入窗口 按下了某个键盘按键……
按钮A值改变处 理代码 鼠标进入窗口处 理代码 超时处理代码
无事件,等待
发生(已注册)事件, 进行处理 事件队列空,回到等待状态
继续处理下一事件
事件结构 • 功能:包含一个或多个子框图,当用户操 作产生(已注册)事件时执行对应子框图
超时接线端 (设置超时事件的 发生时间间隔) 选择器标签 对应事件的子框图
2. 框图上的指针变为缩小的 While循环的样子
1. 点击选中 While循环
3. 按下鼠标左键, 拖曳出虚线框
4. 松开鼠标左键, While循环放置完毕
循环结构 - While循环结构
子框图/循环体 (放置循环代码)
计数接线端/iteration terminal (输出接线端,输出子框图已 执行次数)
(Select a VI…)
本讲内容
1. 循环结构 2. 条件结构 3. 顺序结构 4. 公式节点 5. 事件结构
路径:程序框图,Functions选板->编程->结构
本讲内容
1. 循环结构 2. 条件结构 3. 顺序结构 4. 公式节点 5. 事件结构
循环结构 - While循环结构(While loop)