LabVIEW之TDMS文件

在很多场合,早期的LabVIEW版本不得不借助常规的数据库来做一些数据管理工作,但常规数据库对于中高速数据采集显然是不合适的,因为高速数据采集的数据量非常大,用一般的数据库无法满足存储数据的要求。

直到TDM(Technical Data Management)数据管理技术,TDMS流式技术的引入,使得快速存储和查询、管理采集数据成为可能。

TDM采用文件、通道组和通道三层结构来描述和记录数据。每一层都包含固有属性,也可以自定义属性。TDM文件可以理解成小型的关系数据库,其中文件相当于数据库;通道组相当于数据库的表;通道相当于不同的字段。

一个完整的TDM包括两个文件,文件扩展名分别为tdm和tdx。tdm类型文件记录的是属性信息,比如文件的作者、通道组名称、通道名称和信号单位等,tdm文件时XML格式的文件,可以使用常用的浏览器打开以粗略的查看它的具体内容。tdx文件时纯粹的二进制数据文件,用来记录动态数据类型信号。

TDM适用于高速数据采集场景的机制是:由于TDM采用各种属性来描述采集的数据(相当于数据库的索引方式),因此我们可以快速定位数据,从而提高了写入和查询速度。

TDM正在被LabVIEW8.2之后推出的TDMS逐步替代,TDMS的存取速度更快,编辑方式也与普通VI相同,更适合新用户使用。这里主要介绍TDMS文件。

1.TDMS文件

LabVIEW为操作TDM文件提供了一些快速VI。这些VI的输入输出端子既可以通过对话框配置,也可以引出供用户动态修改。LabVIEW的快速VI适于快速搭建数据采集存储系统,但是快速VI在简化编程的同时,也丧失了一定的灵活性,TDMS的快速VI选板如下图所示。

图1 TDMS的快速VI选板

TDMS文件的读写过程也遵循打开、读/写和关闭三个步骤。TDMS文件是NI公司新推出的数据管理系统,以二进制方式存储数据,所以文件尺寸更小、速度更快。因此它在具备二进制文件优点的同时,又具备关系型数据库的一些优点。据测试,TDMS格式文件的存取速度能够达到600MB/s。这样的存取速度是能够满足绝大多数数据采集系统存取的需要。

2.TDMS的基本构成

如此之快的存取速度得益于TDMS内部的结构,TDMS与TDM一样采用三层的逻辑结构。但是它们的物理结构是完全不同的。TDMS分为文件、通道组、通道三部分。三种对象的关系是逻辑层次关系,处于顶层的是文件对象。文件对象包含固定的属性信息和用户自定义的属性信息,每个文件对象可以包含任意数量的通道组对象。同样的,通道组对象也包含属性信息(如名称等),每个通道组对象可以包含任意数量的通道对象。通道对象也同样具有自己的属性信息(如信号、名称等)。在三层不同的属性中,只有通道属性包括原始数据,通常为一维数组。

LabVIEW专门提供了TDMS文件函数选板,其位于"文件IO"选板中,如下图所示。

图2 TDMS函数选板

3.简单文件读/写

TDMS的读/写与一般格式的文件基本相同,也包括打开、读写、关闭三个步骤。简单的文件读写过程如下图所示。结束循环后调用"TDMS文件查看器"函数。TDMS查看器用于浏览TDMS文件,该文件包括文件属性、组属性、通道属性、通道数据等信息。通道数据既可以用表格方式显示,也可以用波形图方式显示。

图3 利用TDMS文件存储随机数并显示

在图3中,写入数据时未指定组名称和通道名称,所以在文件查看器中组名、通道名均显示为"未命名"。"TDMS写入"函数可以接受各类数据类型数据作为输入(包括波形、一维二维波形数组、数字表格、动态数据、一维二维数组(数组元素类型可以为有符号或无符号整数、单双精度或扩展精度数值、不包含空字符串的有数字和字符组成的字符串、时间标识、布尔型数据))。

通过设置通道组和通道可以记录不同类型的数据。如下图所示在"测试组"中,包括三个通道,分别记录了双精度、时间标识和整形数据。

图4 在TDMS文件中写入多种类型数据

在读取TDMS文件时,需要指定文件名、通道组名称、通道名和通道的数据类型,如下图所示。"TDMS读取"函数还允许指定偏移量和总数,实现TDMS文件的随机读取。第一个数据偏移量规定为0。

图5 读取TDMS文件中多种类型数据

4.波形数据的写入和读取

TDMS文件高速存取的特性,使得它特别适合于海量数据存取。TDMS文件在数据采集应用中,经常用于存取波形数据。如下图所示在TDMS文件中同时写入多组波形数据。

图6 存储波形数据

写入波形数据后,按照上面读取数据的方式在TDMS文件中同时读取多组波形数据,如下图所示,波形数据既可以一次全部被读取,也可以随机读取。通过指定偏移量和总数。可以分段随机读取数据。

图7 读取波形数据

5.表格的写入和读取

TDMS允许存储二维数值数组或者字符串数组,数组的每一列作为一个通道,如下图所示。存储表格数据时需要注意,不允许有空字符串,遇到空字符串可以采用空格或其他不可打印字符替换,然后再存储。

图8 读取二维数值数组和字符串数组

6.TDMS文件的属性

通过"TDMS列出内容"函数,可以查看通道组名称和通道名称。若不输入"通道组名称"参数,函数将返回所有通道组名称和所有通道名称。输入"通道组名称",则返回对应通道组的所有通道名称,"TDMS列出内容"函数的用法如下图所示。

通过"TDMS设置属性"函数和"TDMS获取属性"函数,可以设置或者取得文件、通道组、通道的属性,对文件、通道组和通道可以设定任意数量的属性。

图9 列出TDMS的通道组、通道名称

7.TDMS文件的内置属性

TDMS文件允许设置任意数量的属性。同时,TDMS文件也存在固有的属性。跟踪"TDMS查看器"函数,可以看到该函数使用了两个TDMS的内置属性:NI_DataType和NI_ChannelLength。前者返回通道存储数据的类型码,通过类型码可以判断通道存储的数据类型;后者返回通道包含元素的个数,即长度,通过通道长度可以判断是否读取到通道尾部。如下图所示。

图10 获取通道长度及元素数据类型

使用"TDMS设置属性"函数可重命名.tdms文件中的组和通道。将NI_UpdateGroupName端子连线至"属性"输入端可以对通道组重新命名;将NI_UpdateChannelName端子连线至"属性"输入端可以对通道重新命名。这个还有许多自定义的属性可以查看函数帮助具体了解。

以上就是TDMS文件比较完备的介绍了。

相关推荐
LabVIEW开发13 小时前
LabVIEW 开发航天项目软件
labview
LabVIEW开发1 天前
归一化与伪彩:LabVIEW图像处理的区别
计算机视觉·labview
labview_自动化3 天前
LabVIEW与PLC交互
labview
三易电子工作室6 天前
LabVIEW2025中文版软件安装包、工具包、安装教程下载
labview
Gentle5866 天前
labview通过时间计数器来设定采集频率
labview
LabVIEW开发12 天前
LabVIEW进行可靠性测试时有哪些常见的问题
labview
LabVIEW开发12 天前
LabVIEW春节快乐
labview
LabVIEW开发13 天前
快速分析LabVIEW主要特征进行判断
labview
namisoft12315 天前
Labview替代平台ATECLOUD的兼容性如何?
labview·labview替代·仪器兼容