时间:2024-05-04
陈光红 唐浩凯 张茂丽 王子豪
摘要:条件结构是LABVIEW中的重要结构,是条件控制跳转结构,根据输入的条件执行子程序。以条件结构为项目载体,通过对4个任务的LABVIEW编程实现,囊括了条件结构分支选择器可接受的5种数据类型:布尔型、数值型、枚举型、字符串型、错误簇,讲解了编程过程中的易错点,总结了条件结构的使用注意事项,并进行了教学反思,以期学生对LABVIEW的条件结构理解更深刻,对虚拟仪器课程更感兴趣,能够在更多的场合想到应用条件结构,解决实际问题。
关键词:条件结构;LABVIEW;分支选择器;虚拟仪器
中图分类号:G642 文献标识码:A
文章编号:1009-3044(2022)21-0127-03
开放科学(资源服务)标识码(OSID):
虚拟仪器技术是利用高性能的模块化硬件,结合高效灵活的软件来完成各种测试、测量和自动化应用[1],如刘荣誉等研究的基于LABVIEW的PCB平面绕组力矩电机状态监测系统设计[2]、雷淑芳等研究的基于LabVIEW的点型感烟火灾探测器标定控制系统[3]。LABVIEW(实验室虚拟仪器工程平台)是NI公司开发的软件,它是一种图形化的编程语言。对于高职学生来说,接触过几门编程语言,如C语言、VHDL语言、Python语言等,对于代码语言学习起来有一些难度,而对于LABVIEW语言因为比较直观、形象,上手比较快,学习操作的兴趣也比较高。LABVIEW中的结构包括FOR循环、WHILE循环、条件结构、顺序结构、事件结构等,可以实现循环控制、条件分支控制和顺序控制等。
条件结构是LABVIEW“结构”选板中一个重要的结构,在需要经过判断后有多个分支时使用较方便。但是学生对于条件结构的适用场景、具体的操作细节还有一些疑问,笔者在教学过程中发现有些错误是学生经常会犯或不注意的,导致程序无法运行,自己又找不到问题所在,从而无法完成要实现的功能。
条件结构与顺序结构、事件结构类似之处是都属于层次结构,层次结构指按照一定规则分为几种情况,分别进行层次显示,不同的数據进入不同的层次中,进行不同的设计[4]。
条件结构如图1所示,它由结构框架、条件选择端口、选择器标签、递增/递减箭头组成[1]。条件结构在使用时要注意,“?”即条件选择端口分支选择器必须要有输入数据与之相连,分支选择器默认是布尔型的,输入数据可以是布尔型、数值型、字符串型、枚举类型或错误簇。连线至条件选择器的数据类型决定了可输入条件选择器标签的分支。根据输入数据的值,选择要执行的分支。选择器标签的个数可以根据实际需要来确定,在选择器标签上选择在前面添加分支或在后面添加分支,就可以增加选择器标签的个数[4]。条件结构默认有两个分支:真、假分支,当多于两个分支时,需在选择器值处进行编辑、添加分支。
下面通过一些任务来说明:何时选择使用条件结构、条件结构如何去编写程序框图、条件结构的输入输出如何赋值等,以帮助学生解决使用条件结构时经常遇到的问题。
1 条件结构分支选择器可接受的数据
条件结构的分支选择器接线端可接受五种数据类型:布尔、错误簇、整数、枚举和字符串。下面以任务的形式来说明各种数据类型在使用时的易错点和注意事项。
1.1布尔型
任务1:求函数[fx=x-1,x≥0x+2,x<0 ]的函数值
这是一个分段函数,先判断x的范围,需要分成两个分支,默认的条件结构里真、假两个分支够用。
需要注意的是:分支不一定要使用输入数据或提供输出数据,但只要有一个分支提供输出数据,所有分支条件都必须与输出通道连接,否则会使隧道为空心状。如只在真分支里编程后、当假分支里为空时,隧道右端显示空心小方块,菜单里运行箭头是断的,会有出错提示“隧道未赋值”,无法运行程序。 这是因为,条件结构的执行是根据外部控制条件,从其所有的子框架中选择其一执行的,子框架的选择不分彼此,所以每个子框架都必须连接一个数据。对于一个框架通道,子框架如果没有连接数据,则在根据控制条件执行时,框架通道就没有向外输出数据的来源,程序就会出错[4]。在假分支里编程后调试,当输入任一非负数如4,运行结果为3;当输入一负数如-4,运行结果为-2。与分段函数表达式值相符。
此题与分支选择器相连的是布尔量,“?”显示为绿色。判断的条件就是x是否大于零,“是”对应真分支,“否”对应假分支,分成两个分支。
借助条件结构不但可以求两个分支的函数值,还可以求多个分支的函数值,需将各个分支的范围先设置好,输入给条件分支选择器。
1.2枚举型
任务2:某酒店各天的特价菜如图2所示,请编程实现在前面板输出指定星期特价菜
此任务有7种情况,7个分支,条件结构默认的两个分支不够用,可用组合框控件将一周7天分别从星期日到星期六列举出来。先将组合框进行编辑,将条件结构分支选择器与“星期”枚举控件相连后,对条件结构各个分支的值分别编辑,使之与枚举控件的值对应。
这里容易出错的是,星期日等的双引号不是输进去的,回车后会自动加双引号;要将任一分支设为默认分支,否则会提示出错 “条件结构:部分选择器值无对应分支”,要注意的是“默认”二字并不是自己输进去的,而是在某一分支上右击后选择:本分支设置为默认分支。
将每个分支进行编程运行的结果如图3,以星期日的特价菜为例。
此题与分支选择器相连的“星期”是组合框,属于字符串型,“?”显示为粉色。组合框也可换成字符串控件或枚举控件,只是字符串控件在调试运行时需手动输入“星期日”等,枚举控件与组合框类似,也需先编辑,将所有的情况列举出来。
在此任务中LABVIEW条件结构实现的功能类似于C语言中的switch开关选择语句,switch语句在程序中执行时依次将switch后面的“表达式”与case后面的“常量表达式”进行比较,如果“表达式”与“常量表达式”相等,则执行“常量表达式”后面的“语句块”,然后执行break跳出switch语句;如果没有任何一个“常量表达式”与“表达式”相等,则执行default后面的“语句块n+1”[5]。C语言代码编程时需要注意很多的规则。LABVIEW作为图形化语言,相对比较简单,点击组合框右边的下拉箭头或者枚举左边的上下箭头可以选择星期_,程序框图中的字符串常量对应星期_的特价菜。
借助条件结构还可以设计如水果计价系统、蔬菜计价系统等,将需要计价的物品一一列举出来,告知每种物品的单价,利用单价*重量=总价。如超市的称重计价系统就是利用类似的方法。
1.3数值型
任务3: 在气象部门,通常以阳历3~5月为春季,6~8月为夏季,9~11月为秋季,12月~来年2月为冬季。请使用条件结构,从键盘输入一个月份,在前面板上输出对应的季节(春、夏、秋、冬)。
分析:本题四季需4个分支,注意每个分支的值如何给,可以将每个季节的月份都列举出来[5],中间用英文的逗号隔开,如春季对应的是3,4,5;也可以用3..5表示范围为3到5的数,包含3和5,此种用法要注意中间用两个英文状态的点、包含端点值,当表示一个范围时此种方法使用较方便。冬季是当年的12月份到来年的2月份,如用12..2表示,系统会自动改成2..12,同时报错,提示“选择器值被多个分支使用,该值可能位于某个分支的值域内”。这是因为2..12表示从2到12,将其他分支的值也包含进来了,出現了某些值处于多个分支中。
修改后输入月份如3运行的季节为“春”;输入月份6运行的季节为“夏”;输入月份10运行的季节“秋”;输入月份12运行的季节“冬”。此题,在条件结构外还加了while循环,如图4所示,这样可以连续输入月份,调试运行。当需要多次、重复查看结果时,可在外面加while循环,当按下“停止”按钮时循环停止执行,当需看清运行结果时,可以加上等待函数控制间隔时间,这里赋值为1000,单位为毫秒,意为间隔1s。
此题与分支选择器相连的是数值型的数据,在选择器标签中可输入单个值或数值列表和范围。LABVIEW的条件结构接受整型数据,“?”显示为蓝色。
需要注意的是,当输入数值型数据时,需要输入整型数,若输入浮点型数值,如小数3.5,则选择器值处会显示红色,提示出错“条件结构中某些分支的选择器值无法转换至与该选择器相同的数据类型”。
借助此题的思路还可以处理那些需要进行分类的任务,如将成绩进行分类,85-100的记为A、70-84的记为B、60-69的记为C、0-59的记为D等。可以用条件结构4个分支来对应表示各段分数,选择器标签处用数值范围来表示,如85-100,用85..100。
1.4 错误簇
任务4:当错误输入状态为√时,产生60-100之间的随机整数作为考试成绩输出;当错误输入状态为Ⅹ时,考试成绩输出为0。
分析:错误输入状态有√和Ⅹ两种,当将错误输入簇与分支选择器相连后,分支选择器值自动出现“无错误”和“错误”两种,并且“错误”分支显示为红色,“无错误”分支显示为绿色,如图5所示。
编程后运行结果如图6所示。当状态为√时,可能每次运行结果不同,这是因为产生的结果是随机数,但其范围限定在60-100。
错误簇[6]是LabVIEW中的一个特殊的数据类型,通过按名称解除捆绑函数对错误簇进行解绑会发现,错误簇是由布尔量、数值量和字符串组成。该簇是由一个表示状态的布尔变量(状态)、一个表示错误代码的32位整型变量(代码)以及一个说明错误原因的字符串变量(源)组成的。错误簇用于传递LABVIEW代码运行期间的出错信息,特别是在文件的读取与存储时用上错误簇和简易错误处理器,可以传递并收集错误,最后统一做出处理。
此题与分支选择器相连的是错误簇,“?”显示为黄色。
这里的error in错误簇是模拟在此之前的程序运行过程中是否已经产生了错误,若已经产生了错误则进入“错误”帧,执行其中的程序;若未产生错误,则进入“无错误”帧,执行相应的程序。
在C语言中,当输入数据不规范时,有try-catch-finally异常处理语句来捕获异常[5]。如,要求一个数的平方根,当输入的数小于0时,抛出异常提示数值不在正确范围内,并提示用户输入正确范围的值,直到输入正确的值为止。在LABVIEW中,可以方便地用弹出式对话框和字符串来提示出错信息和错误处理方式,还可以用警示灯亮来提示出错等,配合条件结构来完成相应的任务,处理起来,更形象、直观。
2 总结
在使用条件结构时,需先根据任务分析共需分成几种情况,就是对应的有几个分支,若超过两个分支则默认的真、假两个分支不够用,需进行添加、编辑分支。每个分支里需编写程序框图执行相应的任务,如数值运算、显示字符串、布尔量等。条件结构的分支选择器能连接数值型、布尔型、字符串型、枚举型、 错误簇五种数据;条件结构在数值型、字符串型、枚举型数据输入时,可以添加多个分支;条件结构必须要设一个默认分支,否则条件分支会提示出错;注意用英文的逗号;条件结构可以与While循环等嵌套使用。
3 结语
条件结构并不是LABVIEW中特有的结构,在其他语言如C语言、VHDL语言等中也有,但是LABVIEW的条件结构与其他语言的条件结构相比,简单明了、结构简单,可以相当于其他语言的if…else、case、switch等语句[7],在教学时可以引导学生用对比的方法学习,同时要做到举一反三,能够将所学的迁移到其他任务中,解决类似的问题。
参考文献:
[1] 刘科,宋秦中.虚拟仪器应用[M].北京:机械工业出版社,2018.
[2] 刘荣誉,石利霞,王劲松,等.基于LabVIEW的PCB平面绕组力矩电机状态监测系统设计[J].长春理工大学学报(自然科学版),2021,44(6):27-32.
[3] 雷淑芳.基于LabVIEW的点型感烟火灾探测器标定控制系统[D].合肥:合肥工业大学,2021.
[4] 毛琼,王敏.LabVIEW 2018虚拟仪器程序设计[M].北京:机械工业出版社,2018.
[5] 王骞,陈宇,管马舟.C#程序设计经典300例[M].北京:电子工业出版社,2013.
[6] 章佳荣,王璨,赵国宇.精通LabVIEW虚拟仪器程序设计与案例实现[M].北京:人民邮电出版社,2013.
[7] 彭勇,潘晓烨,谢龙汉.LabVIEW虚拟仪器设计及分析[M].北京:清华大学出版社,2011.
【通联编辑:光文玲】
我们致力于保护作者版权,注重分享,被刊用文章因无法核实真实出处,未能及时与作者取得联系,或有版权异议的,请联系管理员,我们会立即处理! 部分文章是来自各大过期杂志,内容仅供学习参考,不准确地方联系删除处理!