版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
单元4数组和图形程序设计4.1数组4.2簇4.3波形4.4图形显示4.5综合案例4:模拟示波器返回4.1数组数组是同类型元素的集合。一个数组可以是一维或者多维,如果必要,每维最多可有231-1个元素(21亿)。一维数组是一行或一列数据,可以描绘平面上的一条曲线。二维数组由若干行或若干列数据组成,可以在一个平面上描绘多条曲线。三维数组由若干页组成,每一页是一个二维数组。可以通过数组索引访问其中的每个元素。对数组的访问是通过数组索引进行的,索引值的范围是0~n-1,其中n是数组中元素的个数。如图4-1所示的二维数组“0.77517”的行索引值是2,列索引值是3。下一页返回4.1数组4.1.1创建数组1.在前面板上创建数组控件一般说来,创建一个数组有两件事要做,首先要建一个数组的“壳”(shell),然后在这个壳中置入数组元素(数或字符串等),数组的元素可以是数据、字符串等,也可以是簇,但不能是数组,所有元素的数据类型必须一致。这些元素必须同时都是输入控件或者显示控件。在控件选板上选择Controls→ArrayMatrix&Cluster→Array选项,将数组外框放入前面板,然后选择一个数值控件放在数组外框内,也可把前面板上已有控件拖进数组外框内。如图4-2所示放入一个数值型输入控件,得到一个数值型一维数组输入控件。左边是索引框,右边是数组框。上一页下一页返回4.1数组定位工具移动到索引上时,索引框四周出现蓝色方形手柄。光标移动到某个手柄上,它的形状会变为双向箭头。横向拖动索引框左侧手柄,可改变索引框大小。上下拖动下面的手柄,可以增减索引框数量,从而改变数组的维度,如图4-3所示。定位工具移动到数组元素框,也会出现蓝色手柄,手柄出现在数组元素框,拖动手柄可改变数组元素显示区大小,如图4-4(a)所示。手柄出现在数组外框上,拖动手柄可增减显示的数组元素数目。一维数组只能向一个方向(行或列)改变数组元素显示的个数,如图4-4(b)所示。二维数组可以向行和列两个方向改变元个数,如图4-4(c)所示。上一页下一页返回4.1数组2.在程序框图中创建数组常量如果需要用一个数组作为程序的数据源,可以选择Functions→Programming→Array→ArrayConstant选项,将它放置在程序框图中,然后在数组框中放置数值常量、布尔常量或字符串常量。图4-5显示了在数组框放入字符串常量,创建字符数组的例子,图4-5(a)所示是一个数组壳,图4-5(b)所示为已经置入了字符串元素,图4-5(c)所示反映了数组的第0个元素为ABC,后两个元素均为空。上一页下一页返回4.1数组3.数组元素赋值用上述方法创建的数组是空的,新创建的数组常量为空,从外观上看数组元素显示为暗色,要根据需要用操作工具或编辑工具进行逐个赋值。若隔过前面的元素为后面的元素赋值,则前面元素根据数据类型自动赋一个默认值。例如,数值型为0,布尔型为F,字符串型为空字符串。数值型数组默认为32位整型,如要改成其他类型,可右击数组元素,在快捷菜单中选择Representation命令,然后选择一种类型。假设选择SGL(单精度浮点型),如图4-6所示,若元素框太窄而无法显示完全,可以拉宽元素框,如图4-6所示。上一页下一页返回4.1数组4.数组元素的显示通过数组的索引框可以选择数组如何显示它的元素。行索引的值决定从哪一行开始显示。列索引的值决定从哪一列开始显示。直接在索引框输入数字,或者单击索引框左侧的增减按钮都可以改变索引值。在显示出滚动条的情况下,拖动滚动条也可以改变索引值,如图4-7所示。上一页下一页返回4.1数组4.1.2自动索引For循环和While循环可以自动地在数组的上、下限范围内编制索引和进行累计,称为自动索引。在启动自动索引功能以后,当把某个外部节点的任何一维元素连接到循环边框的某个输入通道时,该数组的各个元素就将按顺序一个一个地输入到循环中。循环会对一维数组中的数据,或者二维数组中的一维数组等编制索引。在输出通道也要执行同样的工作———数据按顺序进入一维数组,一维数组进入二维数组,依此类推。在默认情况下,对于每个连接到For循环的数组都会执行自动索引功能。可以禁止这个功能的执行,方法是右击通道(输入数组进入循环的位置),在弹出的快捷菜单中选择DisableIndexing命令,如图4-8所示。上一页下一页返回4.1数组4.1.3数组函数LabVIEW提供了很多用于操作数组的功能函数,选择Functions→Programming→Array选项,进行相应操作即可。其中包括ReplaceArrayElement、Search1DArray、Sort1DArray、Reverse1DArray和MultiplyArrayElements等。1.数组大小函数ArraySize数组大小函数功能是得到数组的大小。图4-13所示为数组大小函数的应用示例,输入端array连接原始数组,输出端size(s)输出数组大小。上一页下一页返回4.1数组2.索引数组函数IndexArray索引数组函数用于从数组中提取元素。图4-14和图4-15所示为索引数组函数的应用示例,输入端array连接原始数组;输入端index用于array连接一维数组,表示提取第几个元素;输入端index(row)/index(col)用于array连接二维数组,表示提取第几行或第几列,或第几行第几列的某个元素。输出端element表示提取出的元素值;输出端subarray表示提取出的行或列。上一页下一页返回4.1数组3.替换数组子集函数ReplaceArraySubset替换数组子集函数功能是通过索引定位一个元素或行/列,然后用另外的数据替换它。输入端array连接原始数组;输入端index用于array连接一维数组,表示对第几个元素进行替换;输入端index(row)/index(col)用于array连接二维数组,表示对第几行/列进行替换,或对第几行第几列的某个元素进行替换。输入端newelement/subarray用于替换的新元素或行/列。输出端outputarray输出被替换后的数组。替换后的数组与原来数组的大小和数据类型是完全一致的。图4-16所示是用替换数组子集函数对二维数组第1行进行替换,并对第2行第3列的元素进行替换。上一页下一页返回4.1数组4.数组插入函数InsertIntoArray数组插入函数的功能是在数组中插入元素/行/列。输入端array连接原始数组;输入端index用于array连接一维数组,表示在第几个元素前插入新元素;输入端index(row)/index(col)用于array连接二维数组,表示在第几行/列前插入新行/列;输入端newelement/subarray用于插入的新元素或行/列。输出端outputarray输出插入后的数组。对于二维数组,索引参数只能连接index(row)或index(col)之一,即要么插入行要么插入列。向下拖动,可插入多个相同的元素/行/列。图4-17所示为在二维数组第2列前插入两个相同的列。上一页下一页返回4.1数组5.删除数组元素函数DeleteFromArray删除数组元素函数用于删除数组中某些元素。输入端array连接原始数组;输入端length表示删除长度(若array连接一维数组,表示删除的元素个数;若array连接二维数组,表示删除的行数或列数);输入端index用于array连接一维数组,表示从第几个元素开始删除;输入端index(row)/index(col)用于array连接二维数组,表示从第几行/列开始删除。输出端arrayw/subsetdeleted输出删除后剩下的数组;输出端deletedportion输出被删除的部分。图4-18表示对二维数组从第1行开始删除两行。上一页下一页返回4.1数组6.初始化数组函数InitializeArray和创建数组函数BuildArray初始化数组函数用于建立一个所有元素都相同的数组。输入端element为数组元素值;输入端dimensionsize为数组大小,若是多维数组,可用定位工具向下拖以增加参数输入端。输出端initializedarray输出初始化后的数组。图4-19表示创建一个有2行3列,所有元素都是a的字符常量数组。相比之下,创建数组函数功能要丰富很多。在图4-20中,图4-20(a)用单个数值创建只有一个元素的一维数组。图4-20(b)用两个数值创建只有两个元素的一维数组。图4-20(c)将两个一维数组合成二维数组。上一页下一页返回4.1数组图4-20(c)若在函数图标上右击,在弹出的快捷菜单中,选择ConcatenateInputs命令,则将两个一维数组连接成一个长的一维数组,如图4-21所示。在函数输入端连接一个一维数组和若干单个数值,则默认选择ConcatenateInputs命令且不能修改,所有元素自动追加到数组后面,如图4-22所示。7.数组子集函数ArraySubset数组子集函数用于从一个数组中提取子集。输入端array连接原始数组;输入端index表示从哪一行/列开始提取;输入端length表示提取的行/列数。输出端subarray输出提取出的数组子集。图4-23提取出从第1行开始的两行和从第2列开始的两列的交集。上一页下一页返回4.1数组8.数组最大值与最小值函数ArrayMax&Min数组最大值与最小值函数用于从一个数组中找到最大值与最小值。输入端array连接原始数组;输出端maxvalue输出最大值,输出端maxindex(es)输出最大值对应的下标索引,输出端minvalue输出最小值;输出端minindex(es)输出最小值对应的下标索引。如果array连接一维数组,则索引值为单个数值,如图4-24所示。如果array连接二维数组,则索引为一维数组,第一个值是行索引,第二个值是列索引,如图4-25所示。上一页下一页返回4.1数组9.重排数组维数函数ReshapeArray重排数组维数函数将数组按照给定的维数大小重新排列成新的数组输出。输入端array连接原始数组;输入端dimensionsize输入维数大小。输出端outputarray输出重排后的数组。在图4-26中,图4-26(a)将一维数组构建成一个2行3列的二维数组,数值不足时补0。图4-26(b)将二维数组构建成一个长度为8的一维数组。图4-26(c)将3行4列的二维数组构建成2行5列的二维数组。10.一维数组操作函数(1)排序一维数组函数Sort1DArray。这个函数将一维数组按升序排列,如图4-27所示。上一页下一页返回4.1数组(2)搜索一维数组函数Search1DArray。在一维数组中搜索指定元素,输出对应索引值,找到元素对应的索引值为1,如果找不到则返回-1,输入端startindex表示从第几个元素开始搜索。具体应用如图4-28所示。(3)拆分一维数组函数Split1DArray。函数功能是将一维数组由指定的位置开始分拆为两个子数组。输入端index表示以此为界进行拆分,第二个数组从此开始;输出端firstsubarray输出拆分后的第一个子数组;输出端secondsubarray输出拆分后的第二个子数组,如图4-29所示。上一页下一页返回4.1数组(4)反转一维数组函数ReversedArray。将一维数组所有元素顺序首尾颠倒,如图4-30所示。(5)移位一维数组函数Rotate1DArray。根据移位系数重新排列一维数组。输入端n表示移位系数,如果n>0,将最后n个元素移到最前;如果n<0,将最前n个元素移到最后,如图4-31所示。(6)交织一维数组函数Interleave1DArray。从输入的n个一维数组中,按索引值顺序依次取出各个元素,交织成一个新的一维数组。新数组的长度为m×n,m为输入数组中最短的长度,如图4-32所示。上一页下一页返回4.1数组11.二维数组转置函数Transpose2DArray二维数组转置函数用于将原先m×n的二维数组转置成n×m的数组。输入端array连接原始m×n的数组,输出端transposedarray输出转置后的n×m的数组,如图4-33所示。上一页返回4.2簇簇(cluster)是LabVIEW提供的另一种数据类型,它的元素可以是不同类型的数据。它类似于C语言中的struct。簇用于把分布在程序框图中各个位置的数据元素组合起来,这样可以减少连线的拥挤混乱程度。4.2.1创建簇在前面板上放置一个簇壳(clustershell)就创建了一个簇。然后可以将前面板上的任何对象放在簇中,如数字控件、开关、字符串控件,但必须都是输入控件或都是显示控件。若不同,会自动按照先放进去的元素转换,如图4-36所示;也可以在程序框图上用类似的方法创建簇常数。下一页返回4.2簇4.2.2簇函数1.解除捆绑函数Unbundle解除捆绑函数将簇中各个元素分开输出。原先只有两个输出端,连接一个簇之后,接线端数量自动增减到与簇的元素数一致。各元素在接线端出现的顺序与逻辑顺序一致(放入簇的顺序),如图4-37所示。上一页下一页返回4.2簇2.捆绑函数Bundle捆绑函数可以将多个数据捆绑成一个簇。图4-38(a)是将多个数据捆绑成一个簇,输入接线端的数量是可以根据需要增减的。图4-38(b)是将多个数据以及簇捆绑成一个新簇。图4-38(c)将簇中的元素进行替换,一旦原始簇连接到cluster端后,输入端将自动与簇元素匹配,替换时需要类型匹配,但如果是数值型可进行强制转换(如浮点型转换成整型)。3.按名称解除捆绑函数UnbundledByName按名称解除捆绑函数可以按指定的元素名称从簇中提取元素。在应用时需要为元素设置相应的标签作为名称。在inputcluster端连接一个簇后,输出接线端出现这个簇逻辑上第一个元素的名称。在输出名称上单击可以选择输出哪个元素。可以通过缩放增加输出端,同时解析多个元素,甚至多次解析同一个元素,如图4-39所示。上一页下一页返回4.2簇4.按名称捆绑元素BundledByName按名称捆绑元素可以按照簇中元素的名称替换簇中的元素。在inputcluster端连接一个簇,输入接线端出现这个簇逻辑上第一个元素的名称。可以在名称上单击选择替换的元素,也可以通过缩放改变替换的元素个数,如图4-40所示。5.创建簇数组函数BuildClusterArray创建簇数组函数可以将输入多个相同类型的数据依次转换成簇,然后连接成一个数组。将该数组称为簇数组,即数组中的每个元素都是一个簇,如图4-41所示。上一页下一页返回4.2簇6.索引与捆绑簇数组函数Index&BundleClusterArray索引与捆绑簇数组函数可以将输入多个不同类型的一维数组,依次取出索引相同的元素捆绑成一个簇,所有的簇构成一个一维簇数组。簇数组长度与输入数组中长度最短的一个相符,长数组最后多余的数据被忽略,如图4-42所示。7.数组至簇转换函数和簇至数组转换函数这两个函数同时存在于数组子选板Functions→Programming→Array和簇子选板Functions→Programming→Cluster。它们的应用如图4-43所示。上一页返回4.3波形波形(waveform)可以理解为一种簇的变形,它不能算是一种有普遍意义的数据类型,它的元素的数量和类型是固定的,但非常实用。选择Controls→Modern→I/O→Waveform和DigitalWaveform选项,可以使用波形数据控件。其中Waveform代表一般波形数据控件,而DigitalWaveform代表数字波形控件,专门用于显示0/1数字波形图。将波形数据控件放置在前面板,在波形显示控件上右击,在弹出的快捷菜单中选择VisibleItems→attributes命令,可显示属性元素,如图4-46所示。下一页返回4.3波形波形数据控件携带的数据包含了时间波形的基本信息,包括数据采集的起始时间t0、时间间隔dt、波形数据y和属性,因此可以直接作为趋势图和图表的输入。横坐标代表时间,纵坐标代表Y值,如图4-47所示。选择Functions→Programming→Waveform选项,在函数子选板中可以使用基本波形操作函数。高级波形分析函数位于SignalProcessing函数子选板中,包括波形生成、波形调理和波形测量3个子选板。上一页返回4.4图形显示图形化显示具有直观明了的优点,能够增强数据的表达能力,许多实际仪器如示波器都提供了丰富的图形显示。图形显示对于虚拟仪器面板设计是一个重要的内容。LabVIEW为此提供了丰富的功能。在前面的介绍中已经接触了这个问题,现在较系统地介绍。4.4.1波形图波形图(graph)用于显示测量值为均匀采集的一条或多条曲线。波形图仅绘制单值函数,在波形图接收所有需要显示的数据后一次性显示在前面板窗口中,其显示的图形是稳定的波形。在下一次接收数据时,波形图不保存上一次的历史数据,数据全部更新,在前面板窗口中只显示当前接收的数据。波形图位于前面板控件选板中,可选择Modern→Graph→WaveformGraph选项进行相应操作。下一页返回4.4图形显示波形图窗口默认显示的内容包括图形区、标签、图例和刻度(X刻度和Y刻度),还有一些元素没有显示在前面板窗口中,右击波形图,在弹出的快捷菜单中,选择VisibleItems命令,可以显示这些元素,如图4-49和图4-50所示。1.波形图设置(1)曲线图例。曲线图例可用来设置曲线的各种属性,包括线形(实线、虚线、点画线等)、线的粗细、线的颜色以及数据点的形状等。(2)图形工具选板。其可用来对曲线进行操作,包括移动、对感兴趣的区域放大和缩小等。上一页下一页返回4.4图形显示(3)游标图例。其可用来设置游标、移动游标,帮助用户用游标直接从曲线上读取感兴趣的数据。在Graph控件上右击,在弹出的快捷菜单中,选择VisibleItems→CursorLegend命令,创建游标图例,在游标图例板上右击,在弹出的快捷菜单中,选择CreateCursor→Free命令。可单击编辑游标名、游标X或Y坐标值。单击游标移动器的4个角,可上下左右移动游标(默认为锁定),锁定时按游标移动器时游标不会移动,游标名高亮显示,按游标移动器可以移动游标,如图4-51所示。(4)刻度图例。用来设置坐标刻度的数据格式、类型(普通坐标或对数坐标)、坐标轴名称以及刻度栅格的颜色等。上一页下一页返回4.4图形显示2.波形图的导出图像波形图可以作为一个图片导出,这样便于在其他有图片浏览、编辑功能的软件中查看被监测对象的状况或直接引用图片,导出方式是在波形图表上右击,在弹出的快捷菜单中,选择ExportSimplifiedImage命令,弹出图4-52所示的对话框。选中“Exporttoclipboard”单选按钮,则图片被复制到Windows剪贴板,可以直接粘贴到其他Windows应用程序中;如果选中Savetofile单选按钮,需要在下面的文本框中输入保存文件的路径。单击Save按钮后,图4-53(a)所示的波形图会被保存为图4-53(b)所示的图片。上一页下一页返回4.4图形显示3.波形图的数据类型图4-54显示了波形图可以接受的各种数据类型。图4-54(a)所示,选择SignalProcessing→SignalGeneration,选项调用函数选板中SineWave.vi,产生一个长度为128的一维数组,可绘制一条包含128个点的正弦曲线。图4-54(b)所示,通过Bundle函数将x0(起始点)、dx(步长)值和描绘曲线的数组y攒成一个簇,连接到波形图的接线端上。可设置x0和dx值。从横坐标0处开始绘制曲线,每隔两个坐标点绘制一个点,共2×128个横坐标点。上一页下一页返回4.4图形显示图4-54(c)所示,选择SignalProcessing→SignalGeneration选项,调用函数选板中SineWave和SquareWave两个VI,产生两个一维数组,用BuildArray函数合成一个二维数组,可一次绘制两条曲线。图4-54(d)给图4-54(c)程序设置了x0和dx值。它给波形图连接的数据是一个包含x0、dx和一个二维数组的簇。这种情况适用于多通道采样率的相同采样情况。图4-54(e)所示,相当于将两个图4-54(b)所示的簇做成一个簇数组。这里为两条曲线分别设置了x0和dx值。这种情况适用于多通道不同采样率采样的情况。上一页下一页返回4.4图形显示图4-54(f)所示,选择SignalProcessing→WaveformGeneration选项,调用函数选板中SineWaveform和SquareWaveform两个VI,合成一个波形数组,可一次绘制两条曲线。图4-54(g)所示,选择SignalProcessing→SignalGeneration选项,调用函数选板中SineWave和SquareWave两个VI,产生两个一维数组,合成一个簇数组,可一次绘制两条曲线。图4-54(h)所示,程序只是给图4-54(g)所示程序设置了x0和dx值。连接到波形图输入端数据为带设置信息的簇数组。上一页下一页返回4.4图形显示4.4.2波形图表波形图表(chart)的数据并没有事先存在一个数组中,它是实时显示的,为了能够看到先前的数据,波形图表控件内部含有一个显示缓冲器,其中保留了一些历史数据。这个缓冲器按照先进先出的原则管理,其最大容量是1024个数据点,可在波形图标上右击,在弹出的快捷菜单中选择ChartHistoryLength命令进行修改。上一页下一页返回4.4图形显示1.波形图表的刷新模式波形图表显示数据的方式是用纵坐标表示数据值,用横坐标表示数据序号,其中坐标是可以线性或对数分布的。波形图表采用逐个数据点描绘曲线,周期性地刷新显示区。曲线有3种刷新模式:带状图表、示波器图表和扫描图,如图4-55所示。默认的刷新模式是带状图表。改变刷新模式可以选择快捷菜单中的Advanced→UpdateMode命令进行修改。(1)带状图表(stripchart)。它与纸带式图表记录仪类似,曲线从左到右连续绘制,当新的数据点到达右部边界时,先前的数据点逐次左移,如图4-55(a)所示。上一页下一页返回4.4图形显示(2)示波器图表(scopechart)。它与示波器类似,曲线从左到右连续绘制,当新的数据点到达右部边界时,清屏刷新,从左边开始新的绘制,速度较快,如图4-55(b)所示。(3)扫描图(sweepchart)。与示波器模式的不同在于当新的数据点到达右部边界时,不清屏,而是在最左边出现一条垂直扫描线,以它为分界线,将原有曲线逐点向右推,同时在左边画出新的数据点,如此循环下去,如图4-55(c)所示。2.波形图表的数据类型图4-56显示了波形图表可以接受的各种数据类型。上一页下一页返回4.4图形显示4.4.3XY图用波形图表和波形图描绘曲线时,其X坐标值是测量点序号、时间间隔等,Y坐标值是测量数据值。但是它并不适合描述Y值随X值变化曲线。为此LabVIEW提供了XY图这种图形显示控件。XY图要求成对输入x坐标值和y坐标值,用这些数据来描点绘出曲线。图4-65显示了XY图可以接受的各种数据类型。图形显示控件选板还有一个ExpressXY图。ExpressXY图被放进前面板时会在程序框图自动产生一个“BuildXYGraph”ExpressVI,它把数据转换为适合XY图的结构,图4-66所示是它的一般用法。上一页下一页返回4.4图形显示4.4.4数字波形图数字波形图(digitalwaveformgraph)用数字信号的形式显示数据。图4-69所示面板上有一个输入控件,共输入了7个十进制数,还有一个二进制显示对象,显示了这些十进制数对应的二进制数,最右边是一个DigitalWaveformGraph。注意这个图中数据应当从纵方向读出,在横坐标上的刻度是数据的序号(0~6),其中最后一个数的序号是6,纵坐标从下向上读是11111111,第一个数的序号是0,其值从下向上读是00000000,而第六个数(序号5)是00011110。上一页返回4.5综合案例4:模拟示波器4.5.1任务描述设计一个模拟示波器,该模拟示波器具备时基、Y轴移位、X轴移位的功能。前面板如图4-70所示。4.5.2任务实施1.创建前面板打开一个新的VI,按照图4-70所示创建前面板。(1)选择Controls→Graph选项,在前面板中放置一个波形图。设置它的标签为WaveformGraph。(2)选择Controls→Numeric选项,在前面板放置两个转盘(dial)数值输入控件和一个旋钮(knob)数值输入控件,标签分别修改为dx、x0、y0。下一页返回4.5综合案例4:模拟示波器(3)选择Controls→Boolean选项,在前面板放置停止按钮(stopbutton),也可在程序框图中右击While循环结构的条件端子,创建输入控件。2.设计程序框图按照图4-71所示设计程序框图。(1)选择Functions→Programming→Structure选项,对WhileLoop进行相应操作。(2)SineWave.vi(选择Functions→SignalProcessing→SignalGe
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
评论
0/150
提交评论