打印
[求助讨论]

想问一下大家LabVIEW用TDMS存储采集的数据速度能有多快?

[复制链接]
7996|2
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
我看看|  楼主 | 2017-7-10 09:42 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
沙发
songchenping| | 2017-7-10 11:04 | 只看该作者

TDMS(Technical Data Management Streaming)文件是一种二进制记录文件,它兼顾了高速、易存取和方便等多种优势,能够在各种数据分析或挖掘软件之间进行无缝交互,也能够提供一系列API函数供其它应用程序调用。

TDMS的逻辑结构分为三层:文件(File)、通道组(Channel Groups)和通道(Channels)。每一个层次上都可以附加特定的属性(Properties)。程序员可以非常方便地使用这三个逻辑层次定义测试数据,也可以任意检索各个逻辑层次的数据,这使得数据检索是有序的、方便存取的。TDMS的逻辑结构如下图所示:


图: TDMS 文件逻辑结构


TDM内部结构的核心是segment,当数据被写入到segment中时实际上是新建了segment。各个segment中包含的主要数据段的含义如下所示:

-  ToC Bitmask:这是一个32位的整型数据段,它表示该segment是否包含meta data、raw data。

-  Version number:表示segment的版本,这可以确保兼容一些旧的TDMS文件版本。

-  Next segment offset:表示下一个segment的偏移字节。

-  Raw data offset:表示Raw data的偏移字节。

-  Meta Data:三个层次的属性存储字段。

-  Raw data:实际的raw data存储字段。


这种物理结构也就决定了TDMS文件的随机存取特性,当程序员只希望读取raw data而并不关注属性时,此时可以利用raw data offset直接获得raw data信息而无需关注Meta Data信息。


上述斜体内容在之后章节会详细讨论。


针对多通道数据采集系统的需求特点,TDMS这种存储方式可以在很短的时间内将每个通道的数据有序地存储在一个文件中,其写入文件的速度达到了理论值600M/s;同时,对于后期的数据导入、处理以及挖掘时,TDMS可以很快速地在一个海量数据文件中提取所感兴趣的部分,极大减少等待时间,提高效率。

TDMS目前已经广泛应用于测试测量行业,NI与华穗科技(HUASUI)的各类数据采集产品都无缝支持此存储格式;在软件方面,该文件格式在NI LabVIEW、LabWindows/CVI、.NET、和DIAdem中均可以直接使用。


以下内容摘自NI网站技术**,分别介绍了不同软件如何读写TDMS文件:



使用NI软件读写TDMS文件?


NI TDMS文件格式是NI平台支持的文件格式。所有NI软件开发平台将TDMS文件作为其原生函数选板或库的一部分与之交互。这使得存储带结构的数据不再复杂,且用户可轻易为捕捉到的测量或仿真数据添加描述信息。

LabVIEW

从NI LabVIEW软件有许多接口可访问NI TDMS文件。在LabVIEW中写入TDMS文件最简单的方式是使用“写入测量文件”Express VI。该Express VI提供交互式配置界面,让使用变得简单,但这牺牲了性能,因此并不适用于高速流盘和实时应用程序。


如对灵活性和性能有较高的要求,应使用“文件I/O”选板上的TDMS底层VI。通过这些VI,可最高效地读写TDMS文件和属性。在LabVIEW Real-Time模块中使用该方法访问TDMS可满足实时程序的性能要求。TDM流选板最早在LabVIEW 8.2中发布。


2010年8月或之后发布的LabVIEW及驱动程序包含一个全新的TDMS高级选板,提供对TDMS文件极底层的控制功能,用户可使用异步读写等高级编程技巧。



图: 可通过LabVIEW中的多个接口读写TDMS文件。



图:TDM流选板提供使用LabVIEW读写TDMS文件最灵活、最高效的方法

LabVIEW SignalExpress

用户可配置LabVIEW SignalExpress自动记录测量数据为TDMS文件,而无需其他编程。LabVIEW SignalExpress可导入之前生成的TDMS文件,在其中创建和记录TDMS文件就如同启用数据记录功能一样简单。



图:在LabVIEW SignalExpress中,只需启用数据记录功能即可将数据写入TDMS文件

LabWindows™/CVI

在NI LabWindows™/CVI软件中有两个库可用于访问TDMS文件。第一个库是LabWindows/CVI TDM Streaming Library,这是访问TDMS文件较快且较通用的方法。通过该API,可使用LabWindows/CVI Real-Time模块在实时应用程序中与TDMS文件交互。TDM Streaming Library最早在LabWindows/CVI 8.1中发布。


第二个在LabWindows/CVI中访问TDMS文件的接口是DIAdem Connectivity API,该API使用NI DIAdem作为读写TDMS文件的中间机制。



图:LabWindows/CVI提供两个TDMS文件接口,其中TDM Streaming Library是目前最高效灵活的接口

.NET语言(Measurement Studio中)

NI Measurement Studio TDM Streaming .NET Class Library库最早在Measurement Studio 8.6中发布,允许通过.NET语言与TDMS文件直接进行快速灵活的交互。注:只能在Measurement Studio专业版和企业版中访问TDM Streaming .NET Class Library库。



图:Measurement Studio包含一个内置TDM Streaming .NET Class Library库

NI DIAdem

NI DIAdem软件是一个灵活的数据后处理、视觉化呈现和报表制作的环境,扩展方便,可通过DataPlugins处理任意自定义文件格式。虽然DIAdem专为快速读写TDMS文件而设计,但加载至Data Portal(DIAdem内部存储器的视觉呈现)中的任何数据都会在内部被映射至TDMS模型。DIAdem是NI DataFinder的客户端和NI TDM解决方案的第三层,用户可通过它轻易搜索NI DataFinder索引,从而找到需要的数据,就如同使用Google搜索引擎一样方便。



图:可配置DIAdem映射任意文件格式至TDMS模型,以利用该模型的优势


使用特权

评论回复
板凳
songchenping| | 2017-7-10 11:06 | 只看该作者
1. TDMS文件的逻辑格式

TDMS文件的逻辑格式遵循TDM三层结构,仍然是文件、通道组、通道三层。用户在使用时只需要关心这三层就行了。

2. TDMS文件API

TDMS文件格式基本上可以称为NI用在测试测量领域的通用数据文件格式,LabVIEW, CVI/LabWindows, Signal Express, DIAdem中都可以使用,也常看到在Excel, MatLab被中调用。TDMS最核心的内容都在一个dll中,用户如果安装了LabVIEW,就会发现在Program Files\National Instruments\Shared\TDMS文件夹中有个tdms.dll的文件。其他软件正是通过调用这个dll的API来操作TDMS文件的。

在LabVIEW中操作TDMS文件其实相当方便,有专门的TDMS面板,提供了TDMS绝大多数的功能。虽然我们一直说Write/Read Measurement Files, Storage VIs, TDMS分别面向初级、中级、高级的用户,但是我个人觉得LabVIEW中的TDMS用起来十分方便,即便是初级用户,也能很容易的上手。在面板上一共就10个SubVI,无论是什么样的数据类型,都可以用这样同一套SubVI,无需大量额外的编程工作。





这里可以简单介绍一下TDMS面板上的两个SubVI,我个人觉得十分有用。一个是“TDMS File Viewer”,当用户写完某个TDMS文件之后,就可以用这个SubVI来方便的查看文件的内容,只要输入TDMS文件的路径即可,运行VI就会跳出一个Viewer的界面,可以查看数据、属性,并且可以根据数据简单的绘制出一些波形图。另外一个是“TDMS Defragment”,通常用户写完TDMS文件之后,可能会发现这个文件非常大,那么这时就可以使用这个SubVI,可以大幅度的减小文件的size。

3. TDMS二进制文件

TDMS从设计之初就确定它必须是二进制的。二进制文件带来两个优点:第一,与一般的文本式文件相比,二进制文件通常比较小;第二,二进制文件读写通常比较快。这两个都是其他二进制文件都具备的优点,就不再多说了。

4. TDMS头文件

用户写完TDMS文件之后,会发现硬盘上其实有两个TDMS文件,一个是.tdms,另一个是.tdms_index文件,我们通常把前者称为主文件或者数据文件,而把后者称为头文件或者索引文件。头文件与主文件相比,最大的区别就是把主文件中的raw data都去掉了,只留下属性等信息。这样做,有两个目的,第一,可以使得读文件加快速度,并且支持随机读取文件数据,这个稍后再解释,用户看完后面的内容就可以理解。第二,可以使得某些软件的搜索TDMS文件功能加快。比如在DIAdem中搜索TDMS文件,可以根据文件名、通道组名、通道名(其实这些也是属性),或者其他某些属性进行搜索,这个时候,仅将TDMS的头文件载入进行搜索,其速度远远比将TDMS主文件载入搜索快得多。

5. TDMS的内部结构

TDMS文件的内部结构,也就是物理结构,可以在这里找到原文。一般的用户并不需要了解这方面的知识就可以方便的使用TDMS文件。在这里介绍这个内部结构,是为了更好的解释TDMS文件格式的优点。

TDMS内部结构的核心概念是segment,如下图。为了避免混淆,在这里必须澄清的是,这个segment的概念与TDM的三层结构(即逻辑结构)没有任何对应的关系,也就是说,一个通道可能对应着多个segment,一个segment中也可能有多个通道。segment是什么意思?我们在写TDMS文件的时候,数据本来可能存放在内存中,那么总要往硬盘上写这些数据的,每次往硬盘上写(flush to disk)就会产生这样一个segment。同样,我们在读TDMS文件的时候,也是一个segment一个segment的把内容读出来。





再稍微深入介绍一下这个segment中的内容。一开始有一些头信息,比如这个segment中是否含有meta data,是否含有raw data,version是多少。下面的东西就很重要了,有个“next segment offset”的信息,指向下一个segment的起始位置,这个有什么用呢?比如我要读某个通道的数据,发现这个segment中并不包含这个通道的内容,就可以使用这样的信息直接跳到下个segment中看下个segment是否有要找的信息。同样,还有一个“raw data offset”的信息,比如用户只想读raw data,并不关心属性之类的信息,那么这个“raw data offset”的信息就派上用场了。说到这里,就可以明白,TDMS是怎样支持Random access,怎样支持独立的读属性信息和raw data的信息。

此外,这个segment还有一个极为重要的特点。我们每次写数据,每次往TDMS文件中flush to disk的时候就在文件的后面添加这样一个segment,而不去关心之前的segment中包含了什么样的信息。这个特点非常关键,这就可以使得我们写文件的速度非常快,我们并不关心之前文件中包含了什么信息,也就使得我们写TDMS文件的速度并不和TDMS文件的大小成正比或者有任何关系。

6. TDMS文件格式的优点

我在以前的**中提到几个数据文件格式的技术要求,我们现在再来回顾一下,看看TDMS文件是如何实现这些技术要求的,这样也就能看出TDMS文件的优点来。

1)写文件速度必须要快——通过segment实现以及二进制。

2)向文件追加(append)数据的时候,速度要快——segment。

3)写文件的速度不能与文件大小成正比——segment。

4)支持随机的读取——segment以及头文件。

5)支持分别读写描述性信息和原始数据——segment以及头文件。

6)对读文件的速度也有一定的要求——segment以及头文件。

7)文件不能太大——二进制。

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

19

主题

35

帖子

2

粉丝