第六讲数组与簇6.1数组数组是LabVIEW常用的数据类型之一。一个数组可以是一维或者多维,如果必要,每维最多可有231-1个元素。可以通过数组索引访问其中的每个元素。索引的范围是0到n-1。数组的元素可以是数据、字符串等,但所有元素的数据类型必须一致。6.1.1数组的组成与创建1.数组的组成由索引、数据和数据类型构成。其中数据类型隐含在数据中。第六讲数组、簇第六讲数组与簇2.数组的创建从前面板上创建数组:打开前面板,在控件→新式→数组,矩阵与簇→数组,如图。第六讲数组与簇再在里面放置一个数值输入控件即可,如图:第六讲数组与簇如果要显示更多的数组成员,在工具选项板上选择定位工具,在数组的边框停滞,当出现网状拐角后就可以拖动增加或减少显示区域。如图:如果要增加或减少数组的维数,可以在索引框的快捷菜单上执行,如图:第六讲数组与簇增加后如图:对于二维数组来说,索引框中上一个为行索引,下一个为列索引。第六讲数组与簇2.程序框图上创建数组:在程序框图上创建数组和在前面板上创建数组有点类似,也首先创建一个外壳,然后再放入数值型常量,枚举或环形常量,字符串型常量以及布尔型常量等。刚刚放入常量后,所有的数组成员显示为灰色,可以用操作工具依次给它们赋值,赋值范围以外的数组成员保持灰色不变。如果跳过一些数组成员给后面的成员赋值,则前面的成员自动赋一个系统默认的值。先在程序框图上放置一个数组常量,位于函数→编程→数组→数组常量,如图:第六讲数组与簇然后再往里放入一个数值常量,完成后如图:第六讲数组与簇6.1.2数组函数对一个数组进行操作,无非是求数组的长度、取出数组中的元素、替换数组中的元素或初始化数组等各种运算。第六讲数组与簇1.数组大小—ArraySize函数返回输入数组中的元素个数。第六讲数组与簇2.索引数组—IndexArray函数用于访问数组中的某个元素。下图显示了一个索引函数的例子,它用于访问数组中的第三个元素。第六讲数组与簇将一个二维数组与IndexArray函数相连,IndexArray就会含2个索引端子。将一个三维数组与IndexArray函数相连,IndexArray就会含3个索引端子。余类推。可以使用的索引端的符号是一个黑方快,被禁止使用的索引端(DisableIndexing)是一个空心的小方框。第六讲数组与簇可以从一个三维数组中提取一个二维数组,方法是禁止两个索引端子,或者通过禁止一个索引端子提取一个一维数组。下图显示了从三维数组提取数组的各种方法。第六讲数组与簇3.数组子集—ArraySubset函数选取数组或者矩阵的某个部分。第六讲数组与簇该函数可以返回从某个指针开始的部分数组,并包括了长度元素。下图显示了一些数组子集的例子,注意,数组索引从0开始。第六讲数组与簇4.替换数组元素—ReplaceArrayElement函数替换数组中的某个元素。第六讲数组与簇5.改变数组维数—ReshapeArray函数改变输入数组的维数。第六讲数组与簇6.初始化数组—InitializeArray函数对数组进行初始化,数组中所有的元素相同。第六讲数组与簇7.建立数组—BuildArray函数建立一个新数组的维数。第六讲数组与簇8.移位一维数组—Rotate1DArray函数将一维数组的最后n各元素移至数组前面。第六讲数组与簇9.排序一维数组—Sort1DArray函数将一维数组中的数据按升序排列。第六讲数组与簇10.颠倒一维数组—Reverse1DArray函数将一维数组的元素前后颠倒。结合Sort1DArray函数,可实现降序排列。第六讲数组与簇11.转置二维数组—Transpose2DArray函数将二维数组进行转置输出。第六讲数组与簇12.搜索一维数组—Search1DArray函数搜索指定元素在一维数组中的位置。第六讲数组与簇13.求数组的最大值和最小值—ArrayMax&Min函数返回数组中的最大值和最小值,以及它们在数组中的位置。第六讲数组与簇14.截断一维数组—Split1DArray函数将一维数组在指定位置截断,分成两个一维数组。当索引位置小于0时,第一个子数组为空;当索引位置大于数组长度时,第二个子数组为空;第六讲数组与簇15.一维数组的插值—Interpolate1DArray函数根据给定的小数索引值,确定对应的数组元素值。第六讲数组与簇16.一维数组的阈值—Threshold1DArray函数是线性插值的逆过程,根据给定的数值,确定对应的索引值。第六讲数组与簇17.插入一维数组—Interleave1DArray函数将输入端口的一维数组插入到输出的一维数组中。插入的顺序为:按从上到下的原则,依次取出输入数组的第0各元素,放入输出数组中;然后是第1各元素,依此类推。第六讲数组与簇18.拆分一维数组—Decimate1DArray函数是插入一维数组—Interleave1DArray函数的反运算。将输入的一维数组拆分为多个一维数组。拆分原则:第1个子数组:元素为输入数组的0,n,2n,3n,…第2个子数组:元素为输入数组的0,n+1,2n+1,3n+1,…第3个子数组:依此类推。第六讲数组与簇第六讲数组与簇例一:设计步骤如下:创建一个For循环,循环次数定为100次在数学函数中调用Sinc函数,重复端子作为输入,输出用一个波形图表和一个数组显示。如图:第六讲数组与簇例二:创建一个二维数组第六讲数组与簇现在已经有两组一维数组了,可以使用创建数组函数就可以把他们创建为二维数组,在一个波形图中显示,如图:第六讲数组与簇可以用鼠标对该函数进行拉伸操作,即可有两个输入端子了。程序框图如图:第六讲数组与簇前面板运行结果如图:第六讲数组与簇例三:初始化和分离数组:利用For循环的自动索引功能从一个输入数组中依次抽取各个元素,如果是大于0的数则添加到正数数组,如果是小于0的则添加到负数数组。并分别计算两个数组中各自有多少个元素。如图所示便是程序框图第六讲数组与簇下图是在选择结构中为“假”时的情景第六讲数组与簇其中一共用到了三个数组函数,一个初始化函数,一个创建函数,一个数组大小函数,运行时前面板如图:第六讲数组与簇6.1.3数组的特点1.LabVIEW会自动确定数组长度,最多可达(231-1)个元素。。2.数组中元素的数据类型必须相同。第六讲数组与簇6.2簇簇是LabVIEW中一个比较特别的数据类型,它可以将几种不同的数据类型集中到一个单元中形成一个整体。如有关一个学生的信息有:学号、姓名、性别、年龄、成绩和家庭地址等。如将这些项目分别定义为相互独立的简单变量,不能反映它们之间的内在联系。而应当把它们组合成一个组合项,这种数据结构就是簇。上述数据的C语言结构描述:上述数据的LabVIEW结构描述:structstudent{intnum;charname[20];charsex;intage;floatscore;charaddr[30];}第六讲数组与簇簇是一种类似数组的数据结构,用于分组数据。簇和数组有着重要的差别,其中一个重要差别是,簇可以包含不同的数据类型,而数组仅可以包含相同的数据类型。例如,一个数组可以包含10个数字指示器,一个簇却可以包含一个数字控件,一个开关和一个字符串控件。尽管簇和数组的元素都是有序存放的,但访问簇的元素最好是通过释放的方法同时访问其中部分或全部元素,而不是通过索引一次访问一个元素。簇和数组的另一个差别是簇具有固定的大小。簇通常用于将出现在框图上的有关数据元素分组管理。因为簇在框图中仅用唯一的连线表示,所以对于减少连线混乱和子VI需要的连接器端子个数,使用簇有着积极的效果。可以将簇看做是一捆连线,线缆中每一个连线表示簇的不同元素。在框图上,只有当簇具有相同类型,相同元素数量和相同元素顺序时,才可以将簇的子端连接。第六讲数组与簇6.2.1簇的创建簇的创建框位于前面板中的控件→新式→数组,矩阵和簇→簇。第六讲数组与簇然后就可以往簇的框中添加各种类型的控件了,例如现在要建立一个学生的记录信息,包括学生的姓名,学号,性别和年龄.这就需要在簇外壳里依次放入两个字符串输入控件,一个数字控件和一个布尔控件.如图:第六讲数组与簇与数组的创建类似,簇也可以从程序框图中创建,先在程序框图上放置一个簇外壳,然后就可以在簇外壳里放置各种数据类型常数。如图:簇内对象的大小是可以调整的,右击簇边界,在弹出的快捷菜单中可以选择各种调节操作,如图:第六讲数组与簇选择调整为匹配大小,即可缩小簇的边框,如图为调整后的结果:簇结构中的元素排列是按照它们放置的先后来排序的,它与簇内元素的位置无关。放入簇内的第一个元素序号为0,第二个元素序号是1,依次向下排列。如果删除了一个元素,序号将重新自动调整。簇的排序很重要,它直接影响着后面将要介绍的“捆绑”以及“接触捆绑”函数的端口顺序,如果要将一个簇与另一个簇连接,这两个簇的序和类型必须相同。第六讲数组与簇如果想要改变簇内元素的排列顺序,可以右击簇结构的边框,在弹出的快捷菜单中执行“重新排序簇中控件”,如图:第六讲数组与簇这时鼠标会变成一个带“#”号的手柄箭头,黑框指出新设置的排列序号,白框表示原先的排列序号,可以改变标题栏上的“单击设置”内容,然后单击簇元素即可设置新的序号。设置完毕后单击工具栏上的“”按钮确定更改,如果想恢复原先设定值,单击“”取消设置。6.2.2簇函数簇函数,主要是访问簇中的各个元素,或由不同类型但相互关联的数据组成簇。簇函数的模版如图:第六讲数组与簇簇函数中最主要的就是构造打包生成簇的“捆绑”函数,还有从簇中解包提取簇中元素的“解除捆绑”函数。它们是根据簇成员的顺序来进行操作的,这也说明了簇内成员顺序排列的重要性。例1.创建簇,解包簇,再打包簇该例的目的是学习使用簇的两个基本函数,如图:首先放置一个簇外壳到前面板上,将标签内容改为“输入簇”簇函数举例:第六讲数组与簇在簇外壳中依次放入字符串控件“Name”,布尔控件“Sex”,数字输入控件“Pay”以及字符串控件“Address”,通过这些簇元素来组成某一公司内一名员工的工资记录。如图:切换到程序框图,放置一个“解除捆绑”解包簇函数,函数刚放入时,它的右侧只有2个输出端口,当输入端口与“输入簇”端子相连后,右侧端口会自动增加为簇元素的数目,端口从上向下排列的顺序与簇内元素的放置顺序相对应,并且数据类型也是与簇元素数据类型相对应。如图:第六讲数组与簇同样放置一个“捆绑”打包簇函数,用定位工具将输入端口的数目增加到4个,依次将它们与解包出来的4个簇元素相连,表示又把它们进行打包生成一个新的簇。在输出端口创建一个簇显示器,把标签改为“输出簇”,如图:第六讲数组与簇例2.替换簇成员该例的目的是学习使用“按名称捆绑”函数来替换簇内的某些元素。1.新建一个VI,在前面板上创建一个簇外壳,依次向簇内添加一个数字输入控件,一个布尔控件,一个字符串输入控件,如图:第六讲数组与簇2.打开程序框图,选择“按名称捆绑”函数,它的功能是按照名称来替换簇成员的值。在函数刚放入时,它的左侧只有一个输入端口,将函数的“输入簇”端口与创建的簇端子相连之后,左侧端口会显示簇内第一个元素的名称数值,用操作工具单击它可以选择其他的簇成员。如图:第六讲数组与簇3.在前面板上创建一个输入控件,将标签改为“输入数字”,在程序框图将它与“数值”端口相连,表示将用它来替换簇元素。如图:第六讲数组与簇4.在“按名称捆绑”函数后面创建输出簇,完成后即可运行程序,如图:第六讲数组与簇例3.插接生成簇数组该例的目的是学习使用“索引与捆绑簇数组”函数插接簇数组函数来生成一个簇数组。1.新建一个VI,打开程序框图,放置一个该函数,刚放入时它只有一个输入的端口,用定位工具拖拉它为3个输入端口。2.在程序框图上放置三个数组外壳,然后分别添加字符串常量,数值常量和布尔常量,建立三个数组,如图:然后给他们赋如图所示的值,如图:第六讲数组与簇然后连线,并创建显示控件,如图:运行,结果如图:说明:该函数从输入的3个数组中依次取值,相同索引值的数据被攒成一个簇,所有的簇构成一个一