TDMS(Technical Da
TDMS的逻辑结构分为三层:文件(File)、通道组(Channel Groups)和通道(Channels),如图 25所示,每一个层次上都可以附加特定的属性(Properties)。程序员可以非常方便地使用这三个逻辑层次定义测试数据,也可以任意检索各个逻辑层次的数据,这使得数据检索是有序的、方便存取的。
图 25 TDMS文件的逻辑结构
TDMS文件的内部结构(物理结构)如图 25所示,实际上程序员无需了解该部分内容就可以利用相关的API函数进行TDMS文件的读写,因此这里只作简单的介绍。TDMS内部结构的核心是segment,当数据被写入到segment中时实际上是新建了segment。各个segment中包含的主要数据段的含义如下所示,更详细的信息可以参考http://zone.ni.com/devzone/cda/tut/p/id/5696。
Ø ToC Bitmask:这是一个32位的整型数据段,它表示该segment是否包含meta da
Ø Version number:表示segment的版本,这可以确保兼容一些旧的TDMS文件版本。
Ø Next segment offset:表示下一个segment的偏移字节。
Ø Raw da
Ø Meta Da
Ø Raw da
这种物理结构也就决定了TDMS文件的随机存取特性,当程序员只希望读取raw da
图 25 TDMS文件的物理结构
TDMS文件格式在LabVIEW、LabWindows/CVI、Signal Express和DIAdem中均可以使用,也可以在Excel或Matlab中被调用。在LabVIEW中,TDMS文件的操作函数在Programming>>File I/O>>TDM Streaming选板中,如图 25所示。其使用方法比较简单,这里只给出简单的解释,具体的实例可以参考LabVIEW自带的Examples。
Ø TDMS Open/Write/Read/Close:与文本文件和二进制文件的功能类似,程序员只需要牢记TDMS文件的三层次逻辑结构即可。
Ø TDMS List Contents:列出TDMS文件的Groups和Channels名称,或者根据指定的Group列出其包含的Channels的名称。
Ø TDMS Set Properties:设置TDMS文件、通道组或通道的属性。
Ø TDMS Get Properties:获取TDMS文件、通道组或通道的属性。
Ø TDMS Flush:刷新所有TDMS文件在内存中的数据,即立即将所有的TDMS数据写入硬盘(创建新的segments)。
Ø TDMS Defragment:整理TDMS文件中的存储碎片,当TDMS文件较大时,利用该函数可以提高数据存取的性能。
Ø TDMS Create Scaling Information:将TDMS中的数据创建Scaling信息,当采集到原始数据需要使用如y=ax+b等线性、多项式或者各种传感器的转换关系时,可以使用该函数直接改变TDMS文件中某些通道的数据值(该改变是不可逆的,无法删除Scaling信息)。
Ø TDMS File Viewer:TDMS文件查看器,该VI可以非常直观地以树形方式列出TDMS文件中的属性和数据,便于用户查看。
图 25 TDMS函数选板
当写完TDMS文件之后,LabVIEW会自动生成两个文件:*.tdms文件和*.tdms_index文件。前者为数据文件(或主文件),后者为索引文件(或头文件)。二者最大的区别在于索引文件不含raw da
LabVIEW 2009进一步改进了对TDMS格式的支持,从1.0版本升级到2.0版本,并且提高了对高速流盘应用的支持,以及对DAQmx的应用支持,比上一版本的TDMS文件至少有4倍以上速度的提升。当然,TDMS也有一些缺点。比如速度上并没有win32 streaming API快,不支持删除某个通道或通道组,以及只支持Windows操作系统和VxWorks、Phar Lap等实时平台。总体而言,TDMS文件格式兼顾了速度、逻辑组织、易用性等多个因素,在数据存储方面是一种非常不错的选择。