More +

了解TDMS文件(三)

undefined� 

华穗技术宅 

3Meta Data 

Meta Data . Overivew 

在本系列文章的第一篇我们曾提到,Tdms文件的逻辑结构如下图所示: 

undefined� 

undefined� 

图:Tdms 文件的逻辑结构 

在这里无论是Group,还是Channel,我们都统一抽象为“Object”。而Meta Data所记载的就是这些“Object”的列表。如下所示 

undefined� 

■■■■ 

Number of Objects 

首先4个bytes,作为U32类型数据,说明了在这段Meta Data区间内,一共记录了多少个Object。 

undefined� 

■■■■ ■■■■■■■ ...... 

在每个Object的最初,用了一个String类型来描述了该Object的Path。 

所谓Object的Path是什么,其实很简单。我们之前不是说过,所有的Group和Channel都是一个Object么,那么这个Object到底是Group还是Channel,是Channel的话又从属于哪个Group,对于这个Object在逻辑结构中的定位就是用Path来描述的。这一点和我们熟知的文件夹或文件在操作系统中的定位所用的Path是一样的。 

如同所有的String类型一样。先是4个bytes,作为U32类型,描述了该String的字节数目,之后的每个byte则是代表了每个字符。 

Object . Raw Data Index 

■■■■ 

这个部分,是迄今为止最TM复杂的部分! 

一般情况下Raw Data Index占4个bytes。但有5种类型: 

- 如果在Meta Data之后不存在Raw Data,则:0xFFFFFFFF 

- 如果此Meta Data同上一个Segment的Meta Data描述一样,则:0x00000000 

- 如果Raw Data存在,且包含“DAQmx Format Changing Scaler“,则:0x69120000 

- 如果Raw Data存在,且包含“DAQmx Digital Line Scaler“,则:0x69130000 

- 如果Raw Data存在,且和上一个Segment的Meta Data描述不匹配。则,该Raw Data Index将不会是一个简单的4个bytes,而会是一个如下所述的复杂结构: 

■■■■ 

前4个bytes,是一个U32类型数据。其实是个枚举数据,描述了之后Raw Data所存放的数据类型。 

undefined� 

■■■■ 

之后的4个bytes,是一个U32类型数据,描述了之后Raw Data所存放的二维数组维度。讲的简单点,在一般情况下就是,有多少个通道的数据存放在Raw Data里。 

■■■■■■■■ 

之后的8个bytes,是一个U64类型数据,描述了Raw Data存放的所有值的总数。 

之后两个部分分别是Vector of Format Changing Scalers和Vector of raw data
width,鉴于很麻烦以及我要下班了以及是次要部分,就不赘述了。 

Object . Properties 

Meta Data的最后这个部分罗列了所有的Property。 

undefined� 

■■■■ 

4个bytes,是一个U32类型数据,描述了之后罗列的Property的数量。 

而每个Property,则包含以下三个部分: 

undefined� 

■■■■ ■■■■■■■ ..... 

若干个bytes,String类型,表示了该Property的名称 

■■■■ 

4个bytes,一个U32类型的枚举数据,表示了该属性值的数据类型,数据类型的枚举描述如前所述。 

■■■■..... 

若干个bytes,是属性值数据,具体多少个bytes要看上面4个byte所指示的数据类型,例如I32就是4个bytes,Fixed Point就是3个bytes。