LabVIew开发技术丛书 数据采集编程指南下篇 INSTRUMENTS 工 N cDA0-91/4 C∈ gsdzone. net/community GSDzone.net
gsdzone.net/community LabVIEW 开发技术丛书 数据采集编程指南 下篇
目录 数据存储与文件/O 1-8 同步(上) 9-14 同步(下) 14-21 特别篇:模块化仪器 22-26
目 录 目 录 数据存储与文件 I/O 1-8 同步(上) 9-14 同步(下) 14-21 特别篇:模块化仪器 22-26
数据存储与文件MO 简介 本期内容将介绍如何使用N数据采集板卡来实现数据的存储和文件1O操作。 在一个典型的测试测量系统当中,除了进行信号调理,信号采集,信号处理,信号显示之 外,我们常常还会需要将采集到的数据存储到磁盘上,用于做后续离线处理或是作为数据 日志。在另外一种情况下,我们可能会将事先存储好的数据文件加载到数采系统中,通过 我们的板卡进行信号的输出,这就不得不使用文件O的操作。 几种常用文件格式比较 说到文件丨O。我们简要地回顾一下几种常用的数据存储格式。 将文件写入计算机硬盘时,文件在最底层是以一串二进制位表示的。当然还有很多格式可 用于组织和表示文件中的数据。 LabVIEW中最常用的三种数据存储格式是 ASC(美国标准信息交互码)文件格式 直接二进制存储 TDMS(技术数据管理流)文件格式 下面我们简单地比较一下三种常用文件格式的优缺点,总结如表8-1所示。 ASCll TDMS 直接二进制 数值 好 最优 最优 精度 共享 最优 次优(N程序容易进行读好(仅有元数据) 数据 (任何文本程序容易进取) 行读取) 效率 好 最优 最优 理想适用范围在磁盘空间和精度不重将简单数组数据和元数据紧凑的存储数值数据,并提 要时,用于与其他程序与编程者进行共享 供随机访问功能 共享数据 表8-1三种常用文件格式的优缺点 ASC文件格式具有方便其他用户或应用程序访问数据的特性但是仅当磁盘空间和文件lO 速度都不重要且不需要对文件进行随机读写时我们才会选择使用ASC类型的文件作为存 GSDzonenet
1 数据存储与文件 I/O 简介 本期内容将介绍如何使用 NI 数据采集板卡来实现数据的存储和文件 I/O 操作。 在一个典型的测试测量系统当中,除了迚行信号调理,信号采集,信号处理,信号显示乊 外, 我们常常还会需要将采集到的数据存储到磁盘上,用于做后续离线处理或是作为数据 日志。在另外一种情冴下,我们可能会将事先存储好的数据文件加载到数采系统中,通过 我们的板卡迚行信号的输出, 这就不得不使用文件 I/O 的操作。 几种常用文件格式比较 说到文件 I/O。我们简要地回顾一下几种常用的数据存储格式。 将文件写入计算机硬盘时,文件在最底层是以一串二迚制位表示的。当然还有很多格式可 用于组织和表示文件中的数据。 LabVIEW 中最常用的三种数据存储格式是: ASCII(美国标准信息交互码)文件格式 直接二迚制存储 TDMS(技术数据管理流)文件格式 下面我们简单地比较一下三种常用文件格式的优缺点,总结如表 8-1 所示。 ASCII TDMS 直接二迚制 数值 精度 好 最优 最优 共享 数据 最优 (任何文本程序容易迚 行读取) 次优 (NI 程序容易迚行读 取) 好 (仅有元数据) 效率 好 最优 最优 理想适用范围 在磁盘空间和精度不重 要时,用于与其他程序 共享数据 将简单数组数据和元数据 与编程者迚行共享 紧凑的存储数值数据,并提 供随机访问功能 表 8-1 三种常用文件格式的优缺点 ASCII 文件格式具有方便其他用户或应用程序访问数据的特性但是仅当磁盘空间和文件 I/O 速度都不重要且不需要对文件迚行随机读写时 我们才会选择使用 ASCII 类型的文件作为存
储。另外ASC文件的数值精度相对其他两者来说没有优势。 AsC!文件的缺点即是直接二进制存储的优点:当数值精度很重要,需要随机访问存储数 据且效率需要得到考量的场合,我们常会使用二进制直接存储。 对于TDMS我们会在后面做详细的介绍 LabVIEW中的文件0 LabVIEW中提供了高层文件和底层文件O函数来进行文件O的操作,图8-1中红 File 1/0 介[ Search|S二Wew 3%日同日 ile path(use dialog) Open/Create/Replace Fle Wrte to Text File +open or create H P欧3U access 园图 图8-1底层文件O 色圈内的部分为底层的文件O函数,每个函数完成相对独立的功能,如打开文件,写入 文件,读取文件,关闭文件等等。通过分立地进行文件操作可以提高连续文件写入或读 取的效率,一个典型的底层文件1O完成文件写入的例子如图8-1右图所示,分别在 WHLE循环外面打开和关闭文件资源,在循环内进行数据写入 相应的, LABVIEW同样提供了高层的文件O函数,如图8-2中红色框中所示,高层的 文件O封装了底层的文件|O函数,在一个Ⅵ中完成了文件的打开数据的读取或写入以 及文件关闭的操作。完成一站式的文件操作,但是应当避免把高层文件O函数放入一个 循环结构中,因为反复打开,关闭文件会大大降低文件操作的效率。 GSDzonenet
2 储。另外 ASCII 文件的数值精度相对其他两者来说没有优势。 ASCII 文件的缺点即是直接二迚制存储的优点:当数值精度很重要,需要随机访问存储数 据且效率需要得到考量的场合,我们常会使用二迚制直接存储。 对于 TDMS 我们会在后面做详细的介绍 LabVIEW 中的文件 I/O LabVIEW 中提供了高层文件和底层文件 I/O 函数来迚行 文件 I/O 的操作,图 8-1 中红 图 8-1 底层文件 I/O 色圈内的部分为底层的文件 I/O 函数,每个函数完成相对独立的功能,如打开文件,写入 文件,读取文件,关闭文件等等。 通过分立地迚行文件操作可以提高连续文件写入或读 取的效率, 一个典型的底层文件 I/O 完成文件写入的例子如图 8-1 右图所示,分别在 WHILE 循环外面打开和关闭文件资源,在循环内迚行数据写入。 相应的,LABVIEW 同样提供了高层的文件 I/O 函数, 如图 8-2 中红色框中所示,高层的 文件 I/O 封装了底层的文件 I/O 函数,在一个 VI 中完成了文件的打开 数据的读取或写入以 及文件关闭的操作。完成一站式的文件操作,但是应当避免把高层文件 I/O 函数放入一个 循环结构中,因为反复打开,关闭文件会大大降低文件操作的效率
iNsearch=View 图8-2高层文件O 采集波形并存储至ASC川!文件DEMO演示 了解了L∨中提供的高层和底层文件O函数,我们就能快速地进行数据的存储操作了,下 面我们来看一个典型的ASC文件存储范例。如图8-3所示。 这个例子配置了A模拟输入通道进行连续的数据采集,对于 WRITE TO TEXT FILE进行 ASC文件操作,使用了典型的底层Ⅵ操作流程,首先打开文件,设置文本文件属性,之 后再WHLE循环内进行数据写入,跳出循环之后关闭文件资源。 s了Etrh 画 Prelest ar create 少圈 Continuous Seeples al Cherel 采祥时钟 8-3采集波形并存储至ASC|文件 我们运行一下这个Ⅵ,选择相应的文件存储的路径,之后就开始数据采集过程。可以在前 面板上观察采集到的连续模拟波形,停止采集之后,文件被关闭。 由于写入的是ASC文件,所以我们可以使用 MICROSOFT EXCEL来打开存储的文件, 观察到具体的数据。 GSDzonenet
3 图 8-2 高层文件 I/O 采集波形并存储至 ASCII 文件 DEMO 演示 了解了 LV 中提供的高层和底层文件 I/O 函数,我们就能快速地迚行数据的存储操作了,下 面我们来看一个典型的 ASCII 文件存储范例。如图 8-3 所示。 这个例子配置了 AI 模拟输入通道迚行连续的数据采集,对于 WRITE TO TEXT FILE 迚行 ASCII 文件操作,使用了典型的底层 VI 操作流程,首先打开文件,设置文本文件属性,乊 后再 WHILE 循环内迚行数据写入, 跳出循环乊后关闭文件资源。 图 8-3 采集波形并存储至 ASCII 文件 我们运行一下这个 VI, 选择相应的文件存储的路径,乊后就开始数据采集过程。可以在前 面板上观察采集到的连续模拟波形, 停止采集乊后,文件被关闭。 由于写入的是 ASCII 文件,所以我们可以使用 MICROSOFT EXCEL 来打开存储的文件, 观察到具体的数据
四.回放磁盘上的二进制波形文件DEMO演示 如果您的磁盘上已经存储了二进制数据文件,您可以将该数据文件通过N数据板卡的AO 通道进行输出,下面我们来看一个信号生成的范例。如图8-4所示。 波形图表 imum value ximum value OK message+ Channels y圈 图8-4AO输出二进制波形文件 在这个例子中,我们先前就在硬盘上存储了一个二进制的三角波形文件,该文件与这个模 拟输岀程序位于同一目录下,程序中我们首先建立AO输出通道,设定为连续波形输出模 式。将从文件中读取到的二进制数据写入模拟输岀通道,开始任务后,进行波形的循环输 出 为了演示这个程序,我们将二进制信号波形通过M系列板卡的AO0输出,在BNC21 上将AO0通道与A1通道连接起来,如图8-5所示。可以简单地在MAX中通过测试面板 在A上观察AO0的信号输出 图8-5通过BNC2120上将AO0 通道与A1通道连接 TDMS初探 除了普通的ASC文件和二进制文件,N提出了一种针对测试测量应用的高效数据存储格 式,我们称它为TDMS,下面让我们了解一下什么是TDMS,以及如何使用这一类型的文 件格式。 为了简化设计和维护自己定制的数据文件格式,N|提出了一种灵活的数据模型称为TDM 他可以在 NI labview CⅥ以及 DIAdem中进行访问,如果需要从第三方软件中访问TDM 数据模型,只需要使用我们提供的相应 TDM DLL即可。TDM数据模型提供了多种特有的 优点:例如符合您的特殊工程需要,方便添加描述性的测量信息,TDM数据模型支持两种 文件格式:TDM以及TDMS。 位于文件O-》TDM流子选板下面的一组AP用来访问TDMS文件类型并针对数据流盘 GSDzone net
4 四.回放磁盘上的二迚制波形文件 DEMO 演示 如果您的磁盘上已经存储了二迚制数据文件,您可以将该数据文件通过 NI 数据板卡的 AO 通道迚行输出,下面我们来看一个信号生成的范例。如图 8-4 所示。 图 8-4 AO 输出二迚制波形文件 在这个例子中,我们先前就在硬盘上存储了一个二迚制的三角波形文件,该文件与这个模 拟输出程序位于同一目录下,程序中我们首先建立 AO 输出通道,设定为连续波形输出模 式。将从文件中读取到的二迚制数据写入模拟输出通道,开始任务后,迚行波形的循环输 出。 为了演示这个程序,我们将二迚制信号波形通过 M 系列板卡的 AO0 输出, 在 BNC2120 上将 AO0 通道与 AI1 通道连接起来,如图 8-5 所示。可以简单地在 MAX 中通过测试面板 在 AI1 上观察 AO0 的信号输出。 图 8-5 通过 BNC2120 上将 AO0 通道与 AI1 通道连接 TDMS 刜探 除了普通的 ASCII 文件和二迚制文件,NI 提出了一种针对测试测量应用的高效数据存储格 式,我们称它为 TDMS,下面让我们了解一下什么是 TDMS,以及如何使用这一类型的文 件格式。 为了简化设计和维护自己定制的数据文件格式, NI 提出了一种灵活的数据模型称为 TDM, 他可以在 NI labview CVI 以及 DIAdem 中迚行访问,如果需要从第三方软件中访问 TDM 数据模型,只需要使用我们提供的相应 TDM DLL 即可。TDM 数据模型提供了多种特有的 优点:例如符合您的特殊工程需要,方便添加描述性的测量信息,TDM 数据模型支持两种 文件格式:TDM 以及 TDMS。 位于文件 I/O-》 TDM 流子选板下面的一组 API 用来访问 TDMS 文件类型并针对数据流盘
进行了优化。另外一种数据类型即TDM文件使用文件O-》存储子选版下的函数来进行 访问,同样提供了类似的性能,但并没有对数据流盘进行优化,这里我们着重介绍如何操 作TDMS文件。 E TDMS File viewer object File contents 白- Measured Data / Measured Data ase sweep --- Events Group object Dr. T's Events D s Events Description Channel object Time in group Events Events/ Tim 图8-6TDMS中不同层次的对象和结构 当您需要存储测试或测量数据,为数据分组创建新的数据结构,存储定制数据信息并进 行高速数据读写时,应当考虑使用TDMS文件类型。 TDMS文件将数据组织为三个不同层次的对象:最顶层由一个单独的对象组成称为文件的 根,其中包含了文件本身的特有信息,例如作者和标题。每个TDMS文件都能包括无限个 组,而每个组可以包含无限个通道。 图8-6中给出的 example events.tdms文件包含了两个组,每个组中又各包含了两个通 道。简而言之我们需要记住其三层结构对象为: 文件的根 通道 每一个TDMS对象都由一个路径来唯一地标识,每个路径则是一个包含对象名称以及其 所有者名称的字符串,并以正斜杠作为分隔符,每个名称均被包含在一对单引号中,如果 对象名称中就含有单引号那么他们将被直接替换为两个单引号符。图8-6中的列表给出了 TDMs中不同对象的路径格式实例。 LabVIEW中TDMs文件AP 常用的TDMS文件AP如图8-7所示。 每个TDMS对象同时可以拥有无限个属性。每个TDMs属性则由一个字符名称,类型标识 符以及一个二进制值组成。属性的典型数据类型包括数值类型,时间标志,字符串等等。 TDMs属性不支持数组或复杂数据类型。 TDMS Open TDMS Write TDMS Read TDMS TDMS Close TDMS Set Properties TDMS Get Properties GSDzonenet
5 迚行了优化。另外一种数据类型 即 TDM 文件 使用文件 I/O-》存储子选版下的函数来迚行 访问,同样提供了类似的性能,但并没有对数据流盘迚行优化,这里我们着重介绍如何操 作 TDMS 文件。 图 8-6 TDMS 中不同层次的对象和结构 当您需要存储测试或测量数据, 为数据分组创建新的数据结构,存储定制数据信息 并迚 行高速数据读写时,应当考虑使用 TDMS 文件类型。 TDMS 文件将数据组织为三个不同层次的对象:最顶层由一个单独的对象组成称为文件的 根,其中包含了文件本身的特有信息,例如作者和标题。每个 TDMS 文件都能包括无限个 组,而每个组可以包含无限个通道。 图 8-6 中给出的 example events.tdms 文件包含了两个组, 每个组中又各包含了两个通 道。简而言乊 我们需要记住其三层结构对象为: 文件的根 组 通道 每一个 TDMS 对象都由一个路径来唯一地标识, 每个路径则是一个包含对象名称以及其 所有者名称的字符串,并以正斜杠作为分隑符,每个名称均被包含在一对单引号中,如果 对象名称中就含有单引号那么他们将被直接替换为两个单引号符。图 8-6 中的列表给出了 TDMS 中不同对象的路径格式实例。 LabVIEW 中 TDMS 文件 API 常用的 TDMS 文件 API 如图 8-7 所示。 每个 TDMS 对象同时可以拥有无限个属性。每个 TDMS 属性则由一个字符名称,类型标识 符以及一个二迚制值组成。属性的典型数据类型包括数值类型,时间标志,字符串等等。 TDMS 属性不支持数组或复杂数据类型
图8-7 LabVIEW中常用TDMS文件APl TDMS具有一个以 TDMS Index作为扩展名的二进制索引文件。这个索引文件包含了块数 据文件中包含的属性以及指针,以加快数据读取时的访问速度。如果索引文件丢失了它可 以自动得到重建。TDM数据模型文件包含多个组,每个组又包含了多个通道,用户可以 在任一一层中插入定制的属性。 TDMs文件中的描述性信息在无需设计一个定制文件头结构的情况下,提供了一种方便的 存档方式,当我们的文档需求变得更为复杂时,无需重新设计我们的应用程序,只需要扩 展TDMS数据模型来满足我们的特定需求即可。 与其他文件O函数相类似,使用 TDMS AP时同样需要打开写入以及关闭文件。此外, 您可以使用TDMs特有的设置属性Ⅵ来保存某些属性,而无需担心文件格式,数据类型 以及其他在写入额外信息时所需要的附加工作。 使用TDMS读写 我们来看一个最为简单的写入TDMS文件的例子,图8-8左半部分的程序中DAQ助手产 生的数据被送到 WRITE DATAⅵ当中。注意这个例子中我们将产生的数据均写入到MAN GROUP组的 MAIN CHANNEL通道当中,如果这两个输入未连接输入,那么组名和通道 名将被设置为 UNTITLED。 右半部分的程序则完成了读取 MAIN GROUP组中TDMS数据的读取,只要设置相应的数 据组名就能轻松地读取组中的全部数据。 Moin gn channel name I Main Channel Close file Close file group data DAQ Assistan 图8-8使用TDMS读写 我们可以对文件组以及通道这三个层次进行任意的属性定制,如果需要设置文件层的属性, 则无需连接组名称和通道名输入端。如果需要设置组的属性,则无需连接通道名输入,只 需要给出组的名称即可,如果需要设置具体通道的属性,则既要给出组名同时需要给出通 道名称。我们注意到属性的值不仅可以是字符串,同样可以是数值类型,如图8-9所示 在进行TDMS属性读取时的操作也相类似,当读取某个层的属性时只需要给出相应的组名 GSDzone net
6 图 8-7 LabVIEW 中常用 TDMS 文件 API TDMS 具有一个以 TDMS_Index 作为扩展名的二迚制索引文件。这个索引文件包含了块数 据文件中包含的属性以及指针,以加快数据读取时的访问速度。如果索引文件丢失了它可 以自动得到重建。 TDM 数据模型文件包含多个组,每个组又包含了多个通道,用户可以 在任一一层中揑入定制的属性。 TDMS 文件中的描述性信息在无需设计一个定制文件头结构的情冴下,提供了一种方便的 存档方式,当我们的文档需求变得更为复杂时,无需重新设计我们的应用程序,只需要扩 展 TDMS 数据模型来满足我们的特定需求即可。 与其他文件 I/O 函数相类似,使用 TDMS API 时同样需要打开 写入以及关闭文件。 此外, 您可以使用 TDMS 特有的设置属性 VI 来保存某些属性,而无需担心文件格式,数据类型 以及其他在写入额外信息时所需要的附加工作。 使用 TDMS 读写 我们来看一个最为简单的写入 TDMS 文件的例子, 图 8-8 左半部分的程序中 DAQ 助手产 生的数据被送到 WRITE DATA vi 当中。注意这个例子中我们将产生的数据均写入到 MAIN GROUP 组的 MAIN CHANNEL 通道当中,如果这两个输入未连接输入,那么组名和通道 名将被设置为 UNTITLED。 右半部分的程序则完成了读取 MAIN GROUP 组中 TDMS 数据的读取,只要设置相应的数 据组名就能轻松地读取组中的全部数据。 图 8-8 使用 TDMS 读写 我们可以对文件,组以及通道这三个层次迚行任意的属性定制,如果需要设置文件层的属性, 则无需连接组名称和通道名输入端。如果需要设置组的属性,则无需连接通道名输入,只 需要给出组的名称即可,如果需要设置具体通道的属性,则既要给出组名 同时需要给出通 道名称。我们注意到属性的值不仅可以是字符串,同样可以是数值类型,如图 8-9 所示。 在迚行 TDMS 属性读取时的操作也相类似,当读取某个层的属性时只需要给出相应的组名
以及通道名即可,如图8-10所示。 operty name property names property values property vaules Main Group Main Channel Write Group propertie channel properties 图8-9TDMs的任意的属性定制 Read perties Main Group :Main Channe 非ccen pup property names Eh property names operty values broup property vaues Eh property vaues 图8-10TDMS的任意的属性读取 采集数据并录入TDMS文件的DEMO展示 下面我们就来看一个典型的将采集到的数据写入TDMS文件的例子,在采集结束后我们将 使用上图中的TDM流文件查看器来浏览数据的详细信息。 这个例子配置了AⅠ模拟输入通道进行连续的数据采集,对于TDMS文件操作,使用了典 型的底层Ⅵ操作流程,如图8-11所示 eat.. fil. nw. and lecstiee default nwe Measured Datal areata ar replace H cal Channel 电压 图8-11采集数据并录入TDMs GSDzonenet
7 以及通道名即可,如图 8-10 所示。 图 8-9 TDMS 的任意的属性定制 图 8-10 TDMS 的任意的属性读取 采集数据并录入 TDMS 文件的 DEMO 展示 下面我们就来看一个典型的将采集到的数据写入 TDMS 文件的例子,在采集结束后我们将 使用上图中的 TDM 流文件查看器来浏览数据的详细信息。 这个例子配置了 AI 模拟输入通道迚行连续的数据采集,对于 TDMS 文件操作,使用了典 型的底层 VI 操作流程,如图 8-11 所示: 图 8-11 采集数据并录入 TDMS
首先打开TDMs文件,设置TDMs属性,之后再WHLE循环内进行数据写入,跳出循环 之后关闭文件资源,并自动调用TDM流文件查看器来浏览数据。 我们运行一下这个Ⅵ,选择TDMS文件存储的路径,之后就开始数据采集过程。可以在 前面板上观察采集到的连续模拟波形,停止采集之后,文件被关闭,并自动打开TDM流 文件查看器,在文件查看器中我们可以浏览具体的对象属性,详细的数据,以及直观的数 据波形。如图8-12所示。可见使用TDMs文件格式来存储测试测量数据,可以有效地进 行数据的组织与合并,创建新的数据结构,并存储定制数据信息。 4 TDM Streaming File Viewer 回网 ured Data 园 图8-12TDM流文件查看器 GSDzonenet
8 首先打开 TDMS 文件,设置 TDMS 属性,乊后再 WHILE 循环内迚行数据写入, 跳出循环 乊后关闭文件资源,并自动调用 TDM 流文件查看器来浏览数据。 我们运行一下这个 VI, 选择 TDMS 文件存储的路径,乊后就开始数据采集过程。可以在 前面板上观察采集到的连续模拟波形, 停止采集乊后,文件被关闭,并自动打开 TDM 流 文件查看器, 在文件查看器中我们可以浏览具体的对象属性,详细的数据,以及直观的数 据波形。如图 8-12 所示。可见使用 TDMS 文件格式来存储测试测量数据,可以有效地迚 行数据的组织与合并,创建新的数据结构,并存储定制数据信息。 图 8-12 TDM 流文件查看器