part使用结构控制程序执行学习课程_第1页
part使用结构控制程序执行学习课程_第2页
part使用结构控制程序执行学习课程_第3页
part使用结构控制程序执行学习课程_第4页
part使用结构控制程序执行学习课程_第5页
已阅读5页,还剩45页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、第3章 使用结构控制程序执行 学习使用While循环和For循环,并了解其不同之处 认识移位寄存器在图形化编程中的重要性 了解选择结构的不同类型数值型、字符串型和布尔型 学习使用顺序结构控制执行顺序 了解叠层顺序结构和顺序结构局部变量的危险性 使用公式节点执行冗长的数学公式 使用LabVIEW弹出一个指定内容的对话框 了解如何使用LabVIEW的一些简单定时函数 使用表达式节点执行只有一个变量的公式 了解定时结构和VI如何让定时循环和定时顺序同步 使用While循环和Case结构相结合创建一个简单、功能强大且可扩展的应用程序框架1第1页/共50页第一页,编辑于星期六:十一点 五十一分。第3章

2、使用结构控制程序执行 3.1 两种循环3.2 移位寄存器 3.3 选择结构3.4 顺序结构3.5 定时及定时结构3.6 公示节点3.7 表达式节点3.8 循环与选择结构联合2第2页/共50页第二页,编辑于星期六:十一点 五十一分。第3章 使用结构控制程序执行 3.1 两种循环3.2 移位寄存器 3.3 选择结构 3.4 顺序结构3.5 定时及定时结构3.6 公示节点 3.7 表达式节点3.8 循环与选择结构联合3第3页/共50页第三页,编辑于星期六:十一点 五十一分。3.1 两种循环LabVIEW提供两种循环结构:While循环和For循环来控制VI中的重复操作。For循环会执行指定的次数 W

3、hile循环持续执行直到一个指定的条件为真(假)时停止 函数选项卡编程结构4For循环While循环第4页/共50页第四页,编辑于星期六:十一点 五十一分。3.1 两种循环3 . 1 . 1 F o r 循 环F o r 循 环 将 其 子 框 图 内 的 代 码 执 行 指 定 的 次 数 , 其 次 数 等 于 计 数 端 子 的 值 。 可 以 从 循 环 外 部 连 线 一 个 值 到 计 数 端 子 来 设 置 次 数 。 如 果 计 数 端 子 值 为 0 , 则 不 会 执 行 循 环 。迭 代 端 子 包 含 了 当 前 已 经 执 行 完 毕 的 迭 代 次 数 : 0 表

4、示 正 在 进 行 第 一 次 迭 代 , 1 表 示 正 在 进 行 第 二 次 迭 代 , 以 此 类 推 , 直 到 N - 1 ( N 表 示 循 环 所 期 望 的 执 行 次 数 )F o r 循 环 等 价 于 以 下 伪 代 码 : f o r i = 1 t o N - 1 E x e c u t e s u b d i a g r a m5第5页/共50页第五页,编辑于星期六:十一点 五十一分。3.1 两种循环3 . 1 . 2 W h i l e 循 环W h i l e 循 环 持 续 执 行 子 框 图 直 到 连 线 到 条 件 端 子 的 布 尔 值 变 为 T

5、r u e ( 意 味 着 停 止 循 环 ) 。 L a b V I E W 在 每 次 迭 代 完 成 时 检 查 条 件 端 子 的 值 , 如 果 为 F a l s e ( 意 味 着 继 续 循 环 ) , 执 行 下 一 次 迭 代 。W h i l e 循 环 中 迭 代 端 子 的 作 用 和 F o r 循 环 中 的 完 全 一 样W h i l e 循 环 等 价 于 以 下 的 伪 代 码 : D o E x e c u t e s u b d i a g r a m W h i l e c o n d i t i o n i s F A L S E ( U n t

6、i l e c o n d i t i o n i s T R U E )6第6页/共50页第六页,编辑于星期六:十一点 五十一分。3.1 两种循环 可以改变While循环中条件端子的状态,只需要单击条件端子,这样在条件端子为真时执行循环,而不再是为假时执行。 此时While循环等价于以下伪代码: Do Execute subdiagram While condition is TURE7第7页/共50页第七页,编辑于星期六:十一点 五十一分。3.1 两种循环 LabVIEW6.1及以前版本,While循环的条件端子默认状态是Continue if TURE。 LabVIEW6.1之后版本(7

7、.0 8.0)默认状态是Stop if TRUE。使用前,请正确配置。 如果想要改变一个结构类型(例如,把For循环变成While循环),在结构的外边框上单击右键选择。但是只能把现有的结构替换成与其相似的结构。8第8页/共50页第八页,编辑于星期六:十一点 五十一分。3.1 两种循环3.1.3 放置对象到结构选择结构时,光标会变成所选结构的缩略图,在希望放置结构的地方单击,然后拖拽确定结构的边框。释放鼠标后,结构会出现在框图上,并且包含其边框内的所有对象。框图中有了结构后,可以从函数选项卡中选择对象放置到循环内。在对象移动到结构内部时结构的边框会加亮显示,对象被拖拽出结构时,框图的边框会加亮显

8、示。可以使用定位工具拖拽结构边框的调节柄来调节大小。9第9页/共50页第九页,编辑于星期六:十一点 五十一分。3.1 两种循环 如果将结构移动到另一个对象上面,则下面的对象仅可以看见结构边框以外的部分。 如果将结构完全覆盖到另一个对象上面,对象会产生厚厚的阴影以示警告:对象只是在结构上或结构下,而不是在结构内。10第10页/共50页第十页,编辑于星期六:十一点 五十一分。3.1 两种循环自动扩展:所有结构都具有自动扩展属性。当自动扩展处于选中状态,会产生两个非常有用的特性:一个是让结构大小随着放入结构中对象的多少而自动而改变,自动设置边框;另一个是避免把结构设置过小,小于里面对象的大小。这两个

9、特性保证了结构里面的对象不会隐藏在结构中。11第11页/共50页第十一页,编辑于星期六:十一点 五十一分。3.1 两种循环删除结构:将删除内部所有对象函数、子VI、连线和所有其他对象。 如果不需要删除结构中的所有代码,可在弹出菜单里选择“删除For循环”或”删除While循环”这样只删除了结构,而保留了框图中的代码。12第12页/共50页第十二页,编辑于星期六:十一点 五十一分。3.1 两种循环循环中的端子和其他出口:数据通过循环边框上的一个小方框进出循环,这个小方框就成为隧道(tunnel)LabVIEW是按照数据流原则进行的,所以在循环开始前输入端必须先输入数据。循环输出端只有在结束了所有

10、的迭代后才输出数据。每次迭代时检查或更新端子,必须预先将端子放置到循环内。如While循环在每次循环时都会检查布尔控件的值,当循环读到真值时停止执行。13第13页/共50页第十三页,编辑于星期六:十一点 五十一分。3.1 两种循环 如果把布尔控件端子放置在While循环的外面,就会建立一个死循环或只运行一次的循环,这取决于布尔量的初始值。LabVIEW在进入循环前读取布尔量的值,而不是在循环中或循环结束后。14循环中的数值指示器会在每次循环时更新循环外的数值指示器只在循环结束后更新一次,在此之前,它会显示从上次循环时得到的一个随机数注:在For循环或While循环的第一次迭代中,迭代次数是0。

11、所以迭代次数加1就可以知道迭代了多少次第14页/共50页第十四页,编辑于星期六:十一点 五十一分。3.1 两种循环3.1.4 练习:计算循环次数 创建一个For循环,并使用图表在前面板上显示循环次数N。循环会从0开始,直到N-1结束。然后创建一个While循环并记录循环次数,直到用布尔开关停止为止1. 菜单文件创建新VI2.创建前面板和框图: a. 函数选项卡编程结构,选择For循环,放置到框图 b. 控件选项卡新式图形,选择波形图表,放置到前面板,将其标签改为“计算循环次数” c. 控件选项卡新式数值,选择数值输入控件,作为循环次数控件15第15页/共50页第十五页,编辑于星期六:十一点 五

12、十一分。3.1 两种循环 d. 从波形图表弹出菜单中选择自动调整Y标尺,这样波形图就会自动调整坐标来适应For循环的次数;在弹出菜单中选择显示数字。3. 得到前面板和框图16第16页/共50页第十六页,编辑于星期六:十一点 五十一分。3.1 两种循环4. 在“循环次数”控件输入数据,然后运行VI。在每次循环执行时,波形图表将For循环的迭代次数绘制在Y轴上,X轴为对应的时间,一个时间单位表示依次循环迭代。17第17页/共50页第十七页,编辑于星期六:十一点 五十一分。3.1 两种循环注意数值指示器从0计数到N-1,而不是从1到N; 计数端子和“循环计数”控件连线的交叉点上红色点称为强制点18第

13、18页/共50页第十八页,编辑于星期六:十一点 五十一分。3.1 两种循环 强制点:LabVIEW强制转换数据的类型来适应其它的数据类型。把两个不同数据类型的端子连接到一起时,LabVIEW会将其转换成相同的数据类型。 上例中,计数端子为32bit的整型,而“循环次数”控件默认是双精度的浮点数。在这种情况下,LabVIEW把双精度的浮点数转换成整型数。 此时,LabVIEW会用合适的类型为内存中数据创建一个新的副本,这些数据会占据内存空间,尽管标量数据(单值数据)占用的额外空间可以忽略不计,但是数组数据(多值数据)会占用大量的内存空间。 使用大数组时要尽量减少使用强制点,需要改变控件或者指示器

14、的数据类型使其匹配对应的数据类型. VI将浮点数转化成整型数时,会将浮点数舍入 到最接近的整数。19第19页/共50页第十九页,编辑于星期六:十一点 五十一分。3.1 两种循环 本例中,在“循环次数”控件的弹出菜单中的子选项卡中选择I32Long可以使数据类型匹配,强制点消失。20第20页/共50页第二十页,编辑于星期六:十一点 五十一分。3.1 两种循环 为计数端子创建正确数据类型的输入:计数端子的弹出菜单中选择“创建常量”或者“创建输入控件”。还可以“创建显示控件”观察循环进行时的迭代次数。5. 保存VI。6. 打开新VI尝试While循环21第21页/共50页第二十一页,编辑于星期六:十

15、一点 五十一分。3.1 两种循环7. 创建VI的前面板和框图,前面板上布尔控件的默认值是FALSE,设置While循环的条件端子为Continue if True。22第22页/共50页第二十二页,编辑于星期六:十一点 五十一分。3.1 两种循环8. 实 现 过 程 :使用“操作值”工具单击开关使其翻转到TRUE位置运行VI。需要停止时,单击开关使其翻转到FALSE。每次迭代时,循环次数(Loop Count)指示器都会更新。23第23页/共50页第二十三页,编辑于星期六:十一点 五十一分。3.1 两种循环9. 在开关处于FALSE位置时再次运行VI,可以注意到While循环将会执行一次,也仅

16、仅执行一次。由于循环结构在每次迭代之后检查条件端子的值,所以循环总会执行一次,不管其连接的值是多少。10. 切换到框图,将循环次数指示器移动到循环外面,这样需要重新连接指示器,当连线离开循环时,会自动创建隧道。24第24页/共50页第二十四页,编辑于星期六:十一点 五十一分。3.1 两种循环11. 确认开关为TRUE时运行VI,注意指示器仅在翻转开关和循环执行完之后更新,其值是最后的迭代次数,是循环完成后输出的值。12. 保存VI。 25第25页/共50页第二十五页,编辑于星期六:十一点 五十一分。3.1 两种循环13. 示范错误的做法:把开关拖出循环,但是保留连线,确认开关是TRUE后,运行

17、VI,然后单击开关停下VI。但是VI 不会停止,这是因为一旦LabVIEW进入循环,它就不会再去检查循环外部控件的值,就像不回去更新“循环次数”指示器一样。单击工具栏的异常终止按钮来终止循环执行。如果开关在循环开始时为FALSE,循环就只会执行一次而不是一直循环。26第26页/共50页第二十六页,编辑于星期六:十一点 五十一分。第3章 使用结构控制程序执行3.1 两种循环3.2 移位寄存器3.3 选择结构3.4 顺序结构3.5 定时及定时结构3.6 公示节点3.7 表达式节点3.8 循环与选择结构联合27第27页/共50页第二十七页,编辑于星期六:十一点 五十一分。3.2 移位寄存器3.2.1

18、 移位寄存器移位寄存器是用来从一次迭代向下一次迭代传输数据的特殊变量,只能在While循环和For循环中使用。在LabVIEW的图形化结构中,移位寄存器是唯一且必要的,在循环左右的边框上弹出菜单并选择“添加移位寄存器”就可以创建移位寄存器。28第28页/共50页第二十八页,编辑于星期六:十一点 五十一分。3.2 移位寄存器可以配置移位寄存器存储数次迭代以前的数据,在求不同迭代中的数据平均值时非常实用为了访问以前迭代的数据,需要在左边端子的弹出菜单中选择“添加元素”创建一个附加端子。例如有一对移位寄存器的While循环,左边端子有多个元素。29第29页/共50页第二十九页,编辑于星期六:十一点

19、五十一分。3.2 移位寄存器 在一个循环里可以有多个不同的移位寄存器来存储不同的变量。只需要在循环的边框上添加足够的移位寄存器。左边的移位寄存器总是和右边的平行,如果移动其中一个,那么两个都会同时移动。如果循环里有太多的移位寄存器而无法分清哪一对是平行的,只要选中一个,另一个也会自动选中,或者移动其中一个,那个跟着移动的移位寄存器就跟它是一对。 通常的错误是把两种情况弄混,一种情况是多个变量存储在多个移位寄存器里,另一种情况是单个变量使用一个移位寄存器存储多个先前的值。30第30页/共50页第三十页,编辑于星期六:十一点 五十一分。3.2 移位寄存器 确认要直接连线到移位寄存器端子,就不会创建

20、进入或离开循环的孤立隧道。3.2.2 移位寄存器示例 下面给出使用移位寄存器的方法,观察使用移位寄存器来访问循环中先前迭代的值。在该VI中要从先前的循环中获取计数值。31第31页/共50页第三十一页,编辑于星期六:十一点 五十一分。3.2 移位寄存器 1. 打开移位寄存器示例程序的前面板和框图 2. 前面板上有4个数值指示器。CurrentCount指示器显示循环计数的当前值,它连接在迭代端子上。Preview Count指示器显示循环计数的前一次迭代的值。Two Iterations Ago指示器显示两次迭代以前的值。Three Iterations Ago指示器显示三次迭代以前的值。32第

21、32页/共50页第三十二页,编辑于星期六:十一点 五十一分。3.2 移位寄存器 3. 常数0连接到左侧移位寄存器,将其初始化为0.在下次迭代开始时,以前的Current Count值会移动到左侧端子的顶端,变成Preview Count。Preview Count会往下移动到Two Iterations Ago,以 此 进 行 下 去 。 定 时 函 数W a i t ( m s )让 循 环 等 待500ms再执行迭代33第33页/共50页第三十三页,编辑于星期六:十一点 五十一分。3.2 移位寄存器 3. 检查完框图后,再从菜单中选择“左右两栏显示”使前面板和框图同时显示。 4. 单击“加

22、亮执行”按钮使其加亮执行;或者单击“单步步入”按钮单步调试VI。观察前面板指示器的值如何变化。34第34页/共50页第三十四页,编辑于星期六:十一点 五十一分。3.2 移位寄存器 5. While循环的每次迭代中,VI像漏斗一样使用先进先出算法将前次的值在左边移位寄存器的端子间移动。每次迭代增加连接到右边移位寄存器的计数端子的值,也就是Current Count。该值在下一次迭代开始时移动到左侧的端子Previous Count。其余左侧端子的移位寄存器的值像漏斗一样逐个传递。本例中只是返回了前3次的值。通过添加左侧移位寄存器元素,可以使VI返回更多的值。 6. 单击前面板STOP按钮结束VI

23、运行,关闭VI,不保存35第35页/共50页第三十五页,编辑于星期六:十一点 五十一分。3.2 移位寄存器3.2.3 为什么需要移位寄存器在左侧循环中,创建了一个迭代次数求和的循环。每次循环,新的总和存储在移位寄存器里。在循环最后,总和45送到数值指示器。在右侧循环中,没有移位寄存器,所以不能在两次迭代之间存储数值。而只是在当前的“i”上加0,只有最后输出结果9输出到循环外。36第36页/共50页第三十六页,编辑于星期六:十一点 五十一分。3.2 移位寄存器 某些情况下,需要在连续循环迭代中求某数平均值。例如需要对每秒读取的温度值计算一小时平均值,根据给定的LabVIEW图形化特性,在没有移位

24、寄存器的情况下无法实现将一次循环迭代得到的值输出到下一次迭代。3.2.4 初始化移位寄存器 为了避免出现不可预见的混乱情况,通常需要初始化移位寄存器,除非有特殊原因故意不要赋初值。把循环外指定值连接到移位寄存器的左侧端子就能对其赋初值。右侧移位寄存器进行了初始化37第37页/共50页第三十七页,编辑于星期六:十一点 五十一分。3.2 移位寄存器如果不初始化,在第一次运行程序时初值将是移位寄存器数据类型的默认值,在继续运行时,移位寄存器的值是上次运行留下的值。实际上很少用到这样的特性,由此产生的问题很难被发现。例如,如果移位寄存器的类型是布尔型,那么在第一次运行时初始值是FALSE,如果移位寄存

25、器的类型是数值型,初始值是0. LabVIEW不会清除存储在移位寄存器里的数据,只有关闭VI时,才会从内存中彻底清除。若调整移位寄存器的大小来观察以前多次迭代的值(左边移位寄存器),如果其中有一个移位寄存器初始化了,那么LabVIEW要求初始化所有的移位寄存器,否则,VI不能运行。38第38页/共50页第三十八页,编辑于星期六:十一点 五十一分。3.2 移位寄存器3.2.5 反馈节点 通常LabVIEW不允许建立“闭环”,也就是说代码块的输出不能作为同一个代码块的输入,如果尝试这样会导致连线错误。 连线错误是因为违反了数据流规则: (1 )在所有的数据都到达输入端子时节点才可以运行;(2)数据

26、不会在节点结束运行前输出端子。因为“闭环”使用了输出端子作为输入,但是数据永远不会到达输入端子,因为数据永远不会流出输出端子。39第39页/共50页第三十九页,编辑于星期六:十一点 五十一分。3.2 移位寄存器 但是,如果在While或For循环内输出端子和输入端子之间放置一个反馈节点,代码就可以运行。 实际上,LabVIEW会自动在“闭环”中放置反馈节点。 工具选项在循环中自动插入反馈节点40第40页/共50页第四十页,编辑于星期六:十一点 五十一分。3.2 移位寄存器 为了充分了解反馈节点如何工作,必须先知道反馈节点实际上就是一个伪装的移位寄存器。下图代码其实是一样的。但是要注意的是反馈节

27、点上的箭头指明了数据的流向。反馈节点的输入等于移位寄存器的右端子,反馈节点的输出等于移位寄存器的左端子。可以使用“将初始化器移出一个循环”初始化反馈节点。反馈节点和移位寄存器之间可以轻松互换,右键单击反馈节点,选择“替换为移位寄存器”,或者右键单击移位寄存器选择“替换为反馈节点”41第41页/共50页第四十一页,编辑于星期六:十一点 五十一分。3.2 移位寄存器3.2.6 隧道与移位寄存器之间的相互转换在书写代码时,实际上可以用移位寄存器代替隧道。右键单击隧道,弹出菜单中选择“替换为移位寄存器”首先移位寄存器替换隧道后,鼠标变成了移位寄存器光标,使用该光标选择需要转换的其它隧道,或者单击循环内

28、或循环上任意位置放置另一个移位寄存器,而不会替换其他的隧道。右键单击移位寄存器,并在弹出菜单中选择“替换为隧道”,就可以将移位寄存器替换成隧道。42第42页/共50页第四十二页,编辑于星期六:十一点 五十一分。第3章 使用结构控制程序执行3.1 两种循环3.2 移位寄存器3.3 选择结构3.4 顺序结构3.5 定时及定时结构3.6 公示节点 3.7 表达式节点3.8 循环与选择结构联合43第43页/共50页第四十三页,编辑于星期六:十一点 五十一分。3.3 选择结构选择结构(Case结构)是LabVIEW中执行条件语句的方法,就像“if-then-else”。函数选项卡编程结构子选项卡Case

29、结构有两个或更多个的子框图,但是只有一个在执行,这取决于连接到分支选择器上的布尔型、数值型或字符串型的值。44第44页/共50页第四十四页,编辑于星期六:十一点 五十一分。3.3 选择结构如果是布尔型连接到分支选择器上,选择结构就只有两个分支:FALSE和TRUE如果是数值型或字符串型连接到分支选择器上,选择结构可以有无数个分支。初始时虽然只有两个,但是可以很容易的添加分支。可以给一个分支指定多个值,并用逗号分开。需要选择一个默认分支,当分支选择器上输入的值和其它所有分支都不匹配时,就会执行默认分支。在很难考虑到所有的可能分支,但又希望覆盖所有可能分支时,使用默认分支是非常方便的。45第45页

30、/共50页第四十五页,编辑于星期六:十一点 五十一分。3.3 选择结构在首次放置Case结构到前面板上式,它是布尔型的。一旦分支选择器连接上数值型的值,分支就呈现出对应的数值型。 Case结构可以有多个子框图,但是只能显示一个分支。单击结构上方的减量或增量箭头,可以显示前一个或后一个子框图。同时可以单击结构上方的下拉菜单,里面列出了所有分支,单击显示需要的分支。在结构的边框上的弹出菜单上选择显示分支46第46页/共50页第四十六页,编辑于星期六:十一点 五十一分。3.3 选择结构如 果 连 接 到 分 支 选 择 器 上 的 值 是 浮 点 数 ,L a b V I E W 则 将 其 装 换 成 I 3 2 数 值 类 型 , 而 且 分 支 选 择 使 用 转 换 后 的 数 值 。左 边 框 的 任 何 位 置 都 可 以 放 置 分 支 选 择 器 , 但 是 必 须 有 值 连 接 到 分 支 选 择 器 , 这 样 分 支 选 择 器 就 会 自 动 识 别 器 数 据 类 型 。 如 果 连 接 到 选 择 器 的 数 据 类 型 从 数 值 型 变 成 布 尔 型 , 那 么 分 支 0和 1 编 程 F A L S E 和T R U E 。 如 果 还 有 其 他 分 支 存 在 , L a b V I E W不 会

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

最新文档

评论

0/150

提交评论