More +

了解TDMS文件(二)

undefined

华穗技术宅 

1概览 

Tdms文件无论是开始创建还是之后的不断写入。都是以Segment为一个单位:文件头是一个Segment;每次用户只要调用一次写入数据的API,也就是写入一个Segment。因此整个Tdms文件就像一列地铁,这列地铁由一个个被称为Segment的车厢组成。 

undefined��

而一个Segment又分为三部分:Lead In,Meta Data,Raw Data。 

undefined��

- Lead In部分包含了Segment头标签,这个Segment的一些配置,版本号,之后的Meta
Data长度以及下一个Segment从哪开始。 

- Meta Data部分包含了这个Segment的逻辑架构,属性,以及之后的Raw Data(如果存在)的数据类型、排列方法等。 

- Raw Data部分包含的是Raw Data,就是每次用户调用一次写入Tdms的API所写入的这部分数据。 

2 Lead In 

■■■■ 

先是4个bytes的头标签,上书“TDSm”四个大字。是的,我没打错。是TDSm,而且前三个字母大写,最后一个字母小写。因为作为标签,你一定要选个不容易出现的,否则读取程序就误判了。 

■■■■ 

接下来4个bytes记录了这个Segment的一些配置信息。虽说有4个bytes,但其实只有第一个byte有用(最左边那个)。第一个byte有8个bit组成,如下: 

○○○○○○○○ 

这8个bit左数第4和第8个没意义,用橙色表示。这8个bit的意义分别为(从左数): 

第1个:本段Segment是否存有DAQmx的raw data? 

第2个:是否是big-endian? 

第3个:raw data的排列方式是否是interleaved? 

第4个:无意义 

第5个:是否存有raw data? 

第6个:是否存有新的通道组或通道(和上一个Segment相比) 

第7个:是否存有meta data? 

第8个:无意义 

■■■■ 

接下来4个bytes,作为一个U32类型数据,描述了这个Tdms文件的版本号。目前Tdms有两个版本1.0和2.0。如果这个U32数值为4712则表示Tdms 1.0,如果数值为4713则表示Tdms 2.0。(别问我为什么是4712和4713~) 

■■■■■■■■ 

接下来8个bytes,作为一个U64类型数据,告诉本Segment的meta data部分加上raw data部分共有多少个bytes组成。 

如果,本Segment就是整个Tdms文件的最后一个Segment,则这个8个bytes为:FF FF FF FF FF FF FF FF 

■■■■■■■■ 

Lead in部分的最后这8个bytes,作为一个U64类型数据,告知本Segment的meta data部分有多少个bytes组成。 

如果,这个值可以为0,表示本Segment不存在meta data。 

3 Meta data 和 Raw data (未完待续)