石鑫华视觉论坛

 找回密码
 注册会员
查看: 6069|回复: 1

[共享] NI LabVIEW中的数据结构

[复制链接]
  • TA的每日心情
    开心
    2015-3-26 16:24
  • 签到天数: 161 天

    连续签到: 1 天

    [LV.7]700FPS

    发表于 2014-4-18 16:21:29 | 显示全部楼层 |阅读模式 来自:广东省东莞市 电信

    注册登陆后可查看附件和大图,以及购买相关内容

    您需要 登录 才可以下载或查看,没有账号?注册会员

    x
    字符串 数据类型

    string_data_type.gif
    字符串是可显示或不可显示ASCII字符的序列。 字符串可以提供与平台无关的信息和数据的格式。 一些常用的字符串应用包括以下这些:
    • 创建简单的文本信息。
    • 发送文本命令至仪器,以ASCII或二进制字符串的形式返回数据,然后转换为数值,从而实现仪器控制。
    • 将数字数据存盘。 要将数字数据存入ASCII文件,必须在将数据写入磁盘文件之前将这些数字数据转换成字符串。
    • 以对话框指示或提示用户。
    在前面板上,字符串以表格(tables)、文本输入框(text entry boxes)和标签(labels)的形式出现。 LabVIEW包括内置VI和函数,可用来操作字符串,如将字符串格式化、解析字符串及其它编辑操作。LabVIEW中的字符串以粉色表示。

    数值数据类型

    complex_numberic_data.gif
    integer_numberic_data.gif
    LabVIEW以浮点数、定点数、整数、无符号整数以及复数表示数值数据。 双精度和单精度以及复数数值数据在LabVIEW中以橙色表示。 蓝色则代表所有整数的数值数据。
    注:数据类型的差别在于用于存储数据的位数和表示数字的范围。
    某些数据类型也提供扩展的配置选项。 例如,可为浮点数据包括复数使用物理测量单位,还可为定点数据配置编码和范围。


    布尔 数据类型


    boolean_data_type.gif
    LabVIEW用8位二进制数保存布尔数据。 LabVIEW中布尔值可以代表0或1,或者TRUE或FALSE。 如8位的值均为0,布尔值为FALSE。 所有非零的值都表示TRUE。 布尔数据常见的应用有:表示电子数据,并作为用作开关的前面板控制,它的机械动作往往用来控制执行结构,例如条件结构。 布尔控件通常用于条件语句来退出While循环。 在LabVIEW中,用绿色代表布尔型数据。

    动态数据类型

    dynamic_data_type.gif
    大部分Express VI接受和/或返回动态数据类型,它是一个深蓝色的接线端。
    使用“转换为动态数据”和“从动态数据转换”VI,可以转换下列数据类型的浮点数值或布尔数据:
    • 一维波形数组
    • 一维标量
    • 一维标量数组–最新值
    • 一维标量数组 – 单通道
    • 二维标量数组 –列为通道
    • 二维标量 – 行为通道
    • 单一标量
    • 单一波形
    将动态数据类型连接到可以最佳表达该数据的显示件上。 这些显示件包括图形、图表或数字/布尔显示件。 但是,由于动态数据在其连接的显示控件中显示时需经过一个自动转换,Express VI所在程序框图的速度将减慢。
    动态数据类型是和Express VI一起使用的。而绝大多数其它LabVIEW自带的VI和函数不接受该数据类型。 用内置VI或函数分析、处理包含有动态数据类型的数据时,必须先对动态数据类型进行类型转换。

    数组

    有时将相关数据归为一组很有用。 在LabVIEW中使用数组和簇将相关数据归为一组。 数组将相同类型的数据组合成一个数据结构,簇将多个数据类型的数据组合成一个数据结构。
    数组由元素和维度组成。 元素是组成数组的数据。 而维数是数组的长度、高度或深度。 数组可以是一维或多维的,在内存允许的情况下每一维度可有多达(231)-1个元素。
    可以创建数字、布尔型、路径、字符串、波形和簇等数据类型的数组。 在对一组类似数据进行操作并重复计算时,可以考虑使用数组。 数组对于用来存储从波形收集的或在循环(每次循环生成数组中的一个元素)中生成的数据是比较理想的。
    注: LabVIEW中的数组索引以零为起点。 无论具有几个维度的数组,其索引的第一个元素均为零。
    数组元素是有序的。 数组使用索引,便于方便地访问数组中任一个特定的元素。 索引是基于零开始的,也就是说索引的范围是0到n-1,其中n是数组中元素的个数。 比如,对于一年中的12个月,n=12,因此索引的范围是0到11,三月份的索引就为2。
    图1是一个数值数组的范例。 图中看到的数组中的第一个元素(3.00)的索引是1,第二个元素(1.00)的索引是2。索引为0的元素在图中没有显示,因为索引显示框中选择了元素1。 索引显示框中选择的元素一般指出现在元素显示框左上角的元素。
    lv_struct_5.gif
    1 索引框2 元素框

    图1.数值的数组控制
    创建数组控件和显示件
    图2所示,可在前面板上创建一个数组输入控件或数组显示控件,然后将一个数据对象或元素拖曳到该数组外框中。数据对象或元素可以是数值或字符串控件。
    lv_struct_6.gif
    图2.在数组外框中放置一个数值控件。
    如试图在数组外框中放入一个无效的输入控件或显示控件,该操作将无法实现。
    在使用程序框图中的数组之前,必须先在数组外框中插入一个对象。 否则,数组接线端会显示为一个黑的空括号,数组中没有和它相关联的数据类型。
    二维数组
    前面的例子都是一维数组。 二维数组在栅格中存储元素。 这时,需要一个列索引和一个行索引来定位数组中的某一个元素,并且,这两个索引都是从零开始的。 图3显示了一个8行8列的二维数组,其中包含8×8=64个元素。
    lv_struct_7.gif
    图3.二维数组
    如需在前面板上添加一个多维数组控件,则右键单击索引框并从快捷菜单中选择添加维度。 也可以改变索引显示框的大小,直至出现所需维数。
    初始化数组
    数组可以进行初始化,或者不初始化。 数组初始化时,需要定义每个维度的元素个数和每个元素的内容。 一个未初始化的数组包含固定的维数,但不包含任何元素。 图4 显示了一个未初始化的二维数组输入控件。 注:元素都是灰色的。 这表示数组未初始化。
    lv_struct_8.gif
    图4.二维未初始化数组
    在一个二维数组中,在一列中的某个元素初始化后,那一列中的其余元素都将自动初始化,并被赋予相应数据类型的默认值。 如图5所示,在以零为起点的数组的第二行第二列中输入了4。 第0、1和2列中先前的元素都初始化为0,即数值数据类型的默认值。
    init_2d_array.gif
    图5.一个有6个元素初始化的二维数组
    创建数组常量
    如需在程序框图中创建数组常量,则先从函数选板上选择数组常量,将数组外框放置于程序框图上,然后将字符串常量、数值常量、布尔常量或簇常量放入数组外框。 数组常量用于存储常量数据或用于同另一个数组进行比较。
    自动索引数组输出
    lv_struct_18.gif
    将数组连线到For循环或者While循环时,通过自动索引可将每次迭代与数组中的一个元素相连。 隧道图标从方形变为该图像,这表示已使用自动索引。 右键单击隧道,从快捷菜单中选择启用索引或禁用索引,可以切换隧道的状态。
    数组输入
    如果使连接到For循环输入接线端的数组自动索引有效,LabVIEW会将计数接线端设置为数组大小。 这样,用户就可以不必进行计数接线端连线。 因为For循环一次可以处理数组中的一个元素,所以,在默认情况下,LabVIEW对连接到For循环的每个数组均启用自动索引。 如不需要一次处理数组中的一个元素,可以禁用自动索引。
    图6中,For循环执行的次数与数组中元素数目相同。 通常,如果For循环的计数接线端没有连线,运行箭头是断开的。 但是,在这个例子中的运行箭头没有断开。
    lv_struct_10.jpg
    图6.用于设置For循环计数的数组
    如果有多个隧道启用自动索引,或对计数接线端进行连线,实际的循环次数将取其中较小的值。 例如,如果两个启用自动索引的数组进入循环,分别含有10个和20个元素,同时将值15连接到总数接线端,这时该循环仍将只执行10次,并且对第一个数组的所有元素建立索引,对第二个数组中的前10个元素建立索引。
    数组输出
    当自动索引数组输出隧道时,数组将在循环的每一次重复中接收一个新元素。 因此,自动索引的输出数组的大小等于循环的次数。
    从输出隧道到数组显示控件的连线将随着连到循环边框的数组而变粗,同时,输出隧道内包含的方括号代表数组。
    lv_struct_11.gif
    图7.自动索引输出
    用鼠标右键点击循环边框上的隧道并从快捷菜单中选择启用自动索引或禁用自动索引可以使自动索引有效或无效。 While循环默认为禁用自动索引。
    例如,如果只需隧道输出最后一个值,可禁用自动索引。
    创建二维数组
    使用两个For循环,一个嵌套在另一个内部,可创建一个二维数组。 外部的For循环创建了行元素,内部的For循环创建了列元素。
    lv_struct_12.gif
    图8.创建二维数组

    簇将不同类型的数据元素分组。 LabVIEW错误簇是簇的一个例子,它包含一个布尔值、一个数值和一个字符串。 簇类似于文本编程语言中的记录或结构体。
    将几个数据元素捆绑成簇可以消除程序框图上连线的混乱,减少子VI所需连接器接线端的数目。 连接器最多可以有28个接线端。 如果前面板上要传送给另一个VI的控件和显示件多于28个,应将其中的一些对象分组成为一个簇,然后将该簇分配到接线器上的一个接线端。
    程序框图上的绝大多数簇都含有一个粉红色的接线模型和数据类型接线端。 错误簇的连线样式和数据类型终端显示为深黄色。 数字簇,有时也称为点,就含有一个褐色的接线模型和数据类型接线端。 褐色的数值簇可以连接到“数值”函数,例如,“加”或“平方根”函数可用于对簇中所有元素同时进行相同的运算。
    簇元素顺序
    簇和数组元素都是有序的,必须使用解除捆绑函数一次取消捆绑所有元素。 也可使用按名称解除捆绑函数,按名称解除捆绑簇元素。 如使用按名称解除捆绑函数,则每个簇元素都必须带有标签。 簇不同于数组的地方还包括簇的大小是固定的。 与数组一样,一个簇里面要么全是控件要么全是显示件。 簇不能同时含有控件和显示件。
    创建簇控件
    按下列前面板所示通过以下方式在前面板上创建一个簇输入控件或簇显示控件:在前面板上添加一个簇外框,再将一个数据对象或元素拖曳到簇外框中,数据对象或元素可以是数值、布尔、字符串、路径、引用句柄、簇输入控件或簇显示控件。
    放置簇外框时,通过拖曳光标可以改变簇的大小。
    lv_struct_13.gif
    图9.簇控件的创建
    图10是包含三个控件的簇的范例: 字符串、布尔开关和数值。
    lv_struct_19.gif
    图10.簇输入控件范例
    创建簇常量
    如需在程序框图中创建一个簇常量,则从函数选板中选择一个簇常量,将该簇外框放置于程序框图上,再将字符串常量、数值常量、布尔常量或簇常量放置到该簇外框中。 簇常量用于存储常量数据或用于同另一个簇进行比较。
    如果需要在前面板窗口中放置一个簇控件或者显示控件,并且在程序框图中创建一个包含同样元素的簇常量,用户可以从前面板窗口中将该簇拖曳到程序框图中,或者在前面板窗口中右键单击该簇,从快捷菜单中选择创建常量。
    使用簇函数
    使用簇函数创建簇并对其进行操作。 比如,可以执行以下类似操作:
    • 从簇中提取单个数据元素。
    • 向簇添加单个数据元素。
    • 将簇分裂成单个数据元素。
    “捆绑”函数用于集合一个簇,“捆绑”和“按名称捆绑”函数用于修改一个簇,而“解除捆绑”和“按名称解除捆绑”函数用于分解一个簇。
    在程序框图中右键单击簇接线端,从快捷菜单中选择簇、类和变体选板,可以在程序框图上放置“捆绑”、“按名称捆绑”、“解除捆绑”和“按名称解除捆绑”函数。 “捆绑”和“解除捆绑”函数自动包含正确的接线端数字。 “按名称捆绑”和“按名称解除捆绑”函数随簇中的第一个元素同时出现。 使用定位工具可以调整“按名称捆绑”和“按名称解除捆绑”函数的大小,显示簇中的其它元素。
    集合簇
    “捆绑”函数用于将单个元素集合成簇,或者在不必为所有元素指定新值的情况下改变现有簇中单个元素的值。 使用定位工具或者右键单击一个元素输入,从快捷菜单中选择添加输入,可调整函数的尺寸大小。
    lv_struct_14.gif

    图11.在程序框图中集合一个簇


    修改簇
    如果要对簇输入进行连线,用户只需对需要改变的元素进行连线。 例如,图12中所示的输入簇包含三个输入控件。
    lv_struct_15.gif
    图12.通过捆绑修改簇
    如果知道簇的顺序,通过“捆绑”函数对图2中所示的元素进行连线,可改变命令控件的值。
    “按名称捆绑”函数也可替换或者访问现有簇中带标签的元素。 “按名称捆绑”函数的工作方式同“捆绑”函数类似,但是它以自身标签为引用,而不是其在簇中的顺序。 只能根据自带标签对元素进行访问。 输入的个数不需要与输出簇中元素的个数相匹配。
    使用操作工作单击一个输入接线端并在下拉菜单中选择一个元素。 也可以右键单击输入端,从选择项快捷菜单中选择元素。
    图13所示,您可以使用“按名称捆绑”函数,用新命令和新函数值来更新之前的值。
    lv_struct_16.gif
    图13.使用按名称捆绑函数修改簇
    “按名称捆绑”函数用于在开发过程中可能会改变的数据结构。 如果为簇添加一个新元素或者改变了元素的顺序,无需对“按名称捆绑”函数重新连线,因为这些名称仍然有效。
    分解簇
    “解除捆绑”函数用于将簇分解为单个元素。
    “按名称解除捆绑”函数用于根据指定的元素名称返回单个簇元素。 输出接线端的个数不依赖于输入簇中的元素个数。
    使用操作工作单击一个输入接线端,从下拉菜单中选择一个元素。 也可以右键单击输出接线端,从选择项快捷菜单中选择元素。
    例如,如果“解除捆绑”函数用于图14中的簇,它会有四个输出接线端,对应于簇中四个输入控件。 您必须知道簇的顺序才能将正确的将被解除捆绑簇的布尔接线端与簇中相应的开关关联。 在这个范例中,元素是以0开始从头到尾排序的。如果使用“按名称解除捆绑”函数,不仅可以得到一个输出接线端的任意顺序,而且可以任意顺序按名称访问单个元素。
    lv_struct_17.gif
    图14.解除捆绑和按名称解除捆绑函数
    枚举


    枚举型(枚举型输入控件、枚举型常量或枚举型显示控件)是数据类型的组合。 枚举型数据可以代表一对数值(如一个字符串和一个数值型数字),枚举型数据为一组值中的一个值。 例如,如果您创建了一个名为“月份”的枚举类型,则月份变量的可能配对值是:1月份-0,2月份-1,以此类推,十二月份-11。图15 为这些数据配对在枚举型控件的属性对话框中的范例。 右击枚举控件,选择 编辑项,即可直接访问。
    enum_props.gif
    图15. 枚举型输入控件月份的属性
    枚举型数据非常有用,因为在程序框图上处理数字要比处理字符串简单得多。 图16显示了前面板上的枚举型输入控件月份、枚举型输入控件中的数据选择及其在程序框图中相应的接线端。
    lv_struct_4.gif
    1 前面板控件2 选择项3 程序框图中的接线端


    图16.枚举型输入控件月份

    回复

    使用道具 举报

  • TA的每日心情
    奋斗
    2024-8-9 12:52
  • 签到天数: 307 天

    连续签到: 1 天

    [LV.8]800PFS

    发表于 2015-6-4 06:04:44 | 显示全部楼层 来自:甘肃省天水市 电信
    回复 支持 反对

    使用道具 举报

    您需要登录后才可以回帖 登录 | 注册会员

    本版积分规则

    LabVIEW HALCON图像处理入门教程(第二版)
    石鑫华机器视觉与LabVIEW Vision图像处理PDF+视频教程11种全套
    《LabVIEW Vision函数实例详解》教程-NI Vision所有函数使用方法介绍,基于NI VISION2020,兼容VDM21/22/23/24

    QQ|石鑫华视觉论坛 |网站地图

    GMT+8, 2024-11-15 17:33

    Powered by Discuz! X3.4

    © 2001-2024 Discuz! Team.

    快速回复 返回顶部 返回列表