《LabVIEW编程及虚拟仪器设计》讲课教师:赵伟,黄松岭辅导教师:郝丽,郭建全电话:62772049(o)E-mail:zhaowei@tsinghua.edu.cn第三讲:数据类型及其操作函数上节课内容回顾(1)一、循环结构二、条件结构三、顺序结构四、公式节点五、事件结构•While循环•For循环•循环结构内外的数据交换•自动索引•移位寄存器注意:(1)While循环是先执行、后判断;而For循环的循环次数则是事先定,且具体操作为先判断、后执行(0就不执行)。(2)循环前读入一次,循环完才输出。(3)对For循环,在循环计数端子空置、有输入数组条件下,循环次数由数组元素个数确定;若接入多个数组且均处在自动索引状态,同时循环计数端子也接入有一正整型常量,则循环次数取这些输入中的最小值。(4)While循环的执行次数,仅受循环体内给条件端子置入的具体循环条件制约。上节课内容回顾(2)一、循环结构二、条件结构三、顺序结构四、公式节点五、事件结构要么在选择器标签中列出所有可能的情况;要么必须给出一种默认情况。进行条件结构内外的数据交换时,会在其边框上生成隧道。输入隧道在每个分支中都可使用;而输出隧道必须从每个分支都得到明确的(输入)值,否则程序无法运行。(只是6,Default分支的显示)上节课内容回顾(3)一、循环结构二、条件结构三、顺序结构四、公式节点五、事件结构输入数据在顺序结构运行前读入,各帧均可用;输出数据在顺序结构执行完才输出,只跟最后一帧有关。层叠式顺序结构中可设立局部变量,用于在不同帧之间实现数据传递。平铺式顺序结构无需局部变量,数据传递直接经隧道实现。平铺式与层叠式顺序结构实现功能相同,只是表现形式不同。第0帧第1帧第2帧第3帧第0帧第1帧第2帧第3帧当公式节点中的代码很多,一屏显示不下时,可在代码区域弹出快捷菜单,选择“显示项”-“滚动条”,从而实现滚动浏览。一、循环结构二、分支结构三、顺序结构四、公式节点五、事件结构各输入、输出端子的名称必须与公式节点中的变量名称完全相同。各输入端子间、各输出端子间不允许重名,但输入端子与输出端子可重名。输入端子输出端子滚动条中间变量也必须在边框上定义,但可以不与外部连接。上节课内容回顾(4)本节课内容一、数组二、簇三、波形除整数、浮点数、布尔数和字符串等基本数据类型以及相应的运算、操作外,LabVIEW中还提供有几种复合数据,包括数组、簇和波形,以及对它们进行操作的函数。灵活使用这些复合类型的数据及相应的操作函数,可简化程序代码,方便虚拟仪器即VI的编程。一、数组(1)1.数组的创建(1)1)创建数组框架(输入、显示、常量);2)向数组框架中添加“元素”,以确定数组元素的数据类型;3)以拖动方式操作,可确定数组的可视大小;4)给数组赋值(指定具体元素)。数组是相同类型元素的集合。在LabVIEW中,数组可以随意改变长度。数组输入控件和数组常量可作为数据源;数组显示控件则作为数据流动的目标容器。到达数组输入控件框架亦即数组显示控件框架的路径为:(前)控件选板-新式-数组、矩阵与簇-数组;而数组常量框架(后面板),经函数选板-编程-数组-数组常量找到。数组输入控件和显示控件框架数组常量框架一、数组(2)1.数组的创建(2)b)向框架的元素区域中添加数据类型“元素”(不论输入、显示还是常量)a)建框架c)调整元素的可视大小和个数改变元素大小同时显示多个元素注意:只有确定了所建数组的性质,才能进行调整数组元素可视个数的操作。数组索引元素区域框图上的数组常量框架(在前面板显示不出来)前面板上的数组输入控件和显示控件框架(在框图面板上有显示)一、数组(3)1.数组的创建(3)d)赋值;改变数组元素的默认值默认值的设置方式:在第0号(即首个)元素上弹出快捷菜单,选择“数据操作”-“当前值设置为默认值”。显示4个元素表格形式的空整型数组输入控件在第0号元素上把当前值1指定为默认值为第0号元素指定整型值1索引(坐标、下标)从0开始一、数组(4)2.数组的快捷操作(这里,以数组常量索引区的快捷菜单为例)在数组常量的索引区和边框上右击鼠标,弹出快捷菜单一、数组(5)3.数组的行、列、页注意:一般来说,任何类型数据的输入、显示控件和常量,均可用来定义数组的元素类型。但是,数组、子面板控件(控件-新式-容器-子面板)、选项卡控件(控件-新式-容器-选项卡控件)、ActiveX控件、波形图表、XY图等不能作为数组的元素。页索引行索引列索引注意:索引区域显示的值,永远是元素区域所显示的左上角元素的索引值(即元素下标;从第0页、0行、0列记起)。上例:2页3行4列;下例:3行3列以数组常量为例以数组显示控件为例一、数组(6)4.数组操作函数(1)数组大小其输入“数组”,可是任意维的数组;输出“大小”,提供该数组各维的长度。如果输入“数组”是一维的,输出“大小”便给出一个整数值;若输入“数组”是多维的,则输出“大小”提供的(也称返回的)就是1个一维的整型数组,其每个分量对应输入数组中相应维的长度。路径:函数选板-编程-数组子选板这里,对应前页中的上例(2页、3行、4列)。点击该函数图标的右端,可直接生成数组显示器。一、数组(7)4.数组操作函数(2)索引数据路径:“函数”选板-“编程”-“数组”子选板使用该函数,可获得对该数组中感兴趣部分的数据。这里只显示了输入数组的第0页;获得(显示)了其第0页第1行。一、数组(8)4.数组操作函数(3)替换数组子集路径:“函数”选板-“编程”-“数组”子选板这里,输入仍是前述的2页3行4列的数组(仅给出了第0页);给该函数只接入了数组某行的索引值,具体为1,即要替换输入数组所有页的第1行(成一个新三维数组)。送给输入端子“新元素/子数组”的二维数组是替换新元素,它的第0行去替换原三维数组第0页的第1行;而其第1行,去替换原数组第1页的第1行。显示的仅是结果的第0页(索引号从0计起)。一、数组(9)4.数组操作函数(4)初始化数组路径:“函数”选板-“编程”-“数组”子选板功能:创建n维数组。每一维的长度,分别由“维数大小0”~“维数大小n-1”这n个输入端输入的数值确定。刚创建成仅一维,拖曳其图标下边框,可增加输入端子数,从而创建多维数组;且数组刚创建成时,其每个元素的值均与“元素”端子输入的值相同。一、数组(10)4.数组操作函数(5)创建数组路径:“函数”选板-“编程”-“数组”子选板功能:将若干个输入数组即“数组”与“元素”组合成一个数组。该函数图标上弹出的快捷菜单中有“连接输入”选项,当它被选中时,该函数输出端会提供将所有输入连接在一起的结果,此输出数组的维数,与所有输入中的最高维数相同;该选项被关闭,所有输入的维数必须相同,该函数输出的数组比输入(数组)高一维;若所有输入均为标量,“连接输入”选项被自动关闭,函数输出一维数组,按顺序输出所有输入的参数(作为它的元素)。拖曳下边框可增加输入端子。一、数组(11)4.数组操作函数(6)数组子集路径:“函数”选板-“编程”-“数组”子选板功能:输出(返回)输入的数组中从“索引”参数指定的位置开始、由“长度”参数指定长度的数组子集。每个“索引”与一个“长度”构成一对;“索引-长度”对的数目与输入参数“索引”的维数相同;输出“子数组”的维数,也与“数组”的维数相同。一、数组(12)5.操作函数的多态化多态化是指一种函数功能,即它可以协调/接纳不同格式、不同维数或不同显示模式的输入数据。在LabVIEW中提供的大多数功能函数均是多态化的。二、簇(1)1.簇(Cluster)的创建(1)a)创建簇框架;b)向簇框架中添加元素;c)拖动确定簇的可视大小。簇可以包含任意数目、任意类型的元素。簇不能在运行时添加新元素(而数组的长度在运行时可以自由改变)。簇类似于C语言中的结构(structure)。簇输入控件和簇显示控件的框架在(前)控件选板-新式-数组、矩阵与簇子选板上;而簇常量的框架,则在(框图)函数选板-编程-簇与变体子选板上。簇与数组最明显的区别是,一个簇中的所有元素,不必同时为输入控件、显示控件或常量。但数组则不然。簇输入控件和显示控件框架簇常量框架二、簇(2)1.簇的创建(2)可向其中再放入其他数据类型的“输入控件元素”。以构建一个簇控件、仅放入一个数值输入控件的情况为例。单击簇框架拖拽到框图上单击放置簇框架生成含有一个数值组件的簇向簇框架内添加数值输入控件二、簇(3)2.簇元素的顺序在簇中,元素有一定的排列顺序,该顺序即为创建该簇时添加元素的顺序。簇元素的排列顺序很重要,是完成很多操作的依据。改变簇中元素的排序:在簇框架上弹出快捷菜单,选择“重新排序簇中控件…”,即打开了簇元素顺序编辑状态。簇元素上有两个序号,左侧反显的为新序号;右侧加灰的是旧序号。单击簇元素之一,将把该元素设置为第0号元素;对其他重复此过程,直到改好所有元素的顺序,点击上方工具栏OK按钮,确认所做修改。在簇边框上弹出快捷菜单,选“自动调整大小”子菜单,可实现左图所示的所需操作。SizetoFitArrangeHorizontallyArrangeVertically调整为匹配大小水平排列垂直排列二、簇(4)3.簇的操作函数(1)捆绑[之一]“函数”选板-“编程”-“簇与变体”子选板功能一:将所有输入元素打包成簇。(元素均是“常量”,但可为不同数据类型)二、簇(5)3.簇的操作函数(1)捆绑[之二]“函数”选板-“编程”-“簇与变体”子选板功能二:替换成新簇。二、簇(6)3.簇的操作函数(2)解除捆绑“函数”选板-“编程”-“簇与变体”子选板二、簇(7)3.簇的操作函数(3)按名称打包(捆绑)“函数”选板-“编程”-“簇与变体”子选板功能:按标签替换“输入簇”中的元素;替换结果从“输出簇”提供出来。故,“输入簇”必须接入,且要求其至少1个元素有标签。添加标签:在对象(簇某元素)上弹出快捷菜单,从“显示项”子菜单选中“标签”,可为对象添加标签。二、簇(8)3.簇的操作函数(4)按名称解除捆绑“函数”选板-“编程”-“簇与变体”子选板功能:把输入簇中的元素按标签解除捆绑。在函数输出端,只能获得拥有标签的簇元素。函数初建时,只有一个输出端子;单击其标签域,可弹出带有标签的簇元素的列表;必须对其分别建立相应的显示器。二、簇(9)3.簇的操作函数(5)簇与数组的相互转换“函数”选板-“编程”-“簇与变体”子选板功能:把所有簇元素按顺序组合成一维数组经“数组”端子输出。显然,它要求簇的所有元素的类型要相同。把“数组”端子输入的数组中的元素,按顺序捆绑成簇,并经“簇”端子输出。三、波形(1)1.波形的创建(属于输出、显示)[1]路径:控件选板-“新式”-“I/O”子选板波形数据含有4个组成部分:t0为时间标识常量类型,表示波形数据的时间起点;dt属于双精度浮点类型,表示波形相邻数据点间的时间间隔,以秒为单位;Y是双精度浮点数组,它按时间顺序给出整个波形的所有数据点;“属性”具有变体类型,用于携带任意的属性信息。时间标识常量时间标识输入控件和显示控件时间浏览按钮三、波形(2)1.波形的创建[2](a)时间标识(zhi)时间标识,又称时间戳,是LabVIEW中记录时间的专用数据类型;它属于常量,获取它的路径:函数选板-编程-定时-时间标识常量。获取时间标识的输入控件和显示控件的路径为:控件选板-新式-数值子选板。在时间标识的常量或输入、显示控件上弹出快捷菜单,都可以打开上图所示对话框,以按现行时间进行时间的设置。路径:在时间标识常量(后)和时间标识输入或显示控件(前)上弹出快捷菜单,经数据操作子选板选择“设置时间和日期”。三、波形(3)1.波形的创建[3](b)变体类型任何数据类型都可以转化为变体类型,然后再为其添加属性,并可以在需要时,转换回原来的数据类型。找到变体类型操作函数的路径:“函数”选板-“编程”-“簇、类与变体”-“变体”子选板。三