新聞中心

EEPW首頁(yè) > 測(cè)試測(cè)量 > 設(shè)計(jì)應(yīng)用 > LabVIEW數(shù)據(jù)記錄和存儲(chǔ)(五)—TDMS文件

LabVIEW數(shù)據(jù)記錄和存儲(chǔ)(五)—TDMS文件

作者: 時(shí)間:2017-01-09 來(lái)源:網(wǎng)絡(luò) 收藏
TDMS(Technical Data Management Streaming)文件是NI主推的一種二進(jìn)制記錄文件,它兼顧了高速、易存取和方便等多種優(yōu)勢(shì),能夠在NI的各種數(shù)據(jù)分析或挖掘軟件之間進(jìn)行無(wú)縫交互,也能夠提供一系列API函數(shù)供其它應(yīng)用程序調(diào)用。
TDMS的邏輯結(jié)構(gòu)分為三層:文件(File)、通道組(Channel Groups)和通道(Channels),如圖 25所示,每一個(gè)層次上都可以附加特定的屬性(Properties)。程序員可以非常方便地使用這三個(gè)邏輯層次定義測(cè)試數(shù)據(jù),也可以任意檢索各個(gè)邏輯層次的數(shù)據(jù),這使得數(shù)據(jù)檢索是有序的、方便存取的。


圖 25 TDMS文件的邏輯結(jié)構(gòu)
TDMS文件的內(nèi)部結(jié)構(gòu)(物理結(jié)構(gòu))如圖 25所示,實(shí)際上程序員無(wú)需了解該部分內(nèi)容就可以利用相關(guān)的API函數(shù)進(jìn)行TDMS文件的讀寫(xiě),因此這里只作簡(jiǎn)單的介紹。TDMS內(nèi)部結(jié)構(gòu)的核心是segment,當(dāng)數(shù)據(jù)被寫(xiě)入到segment中時(shí)實(shí)際上是新建了segment。各個(gè)segment中包含的主要數(shù)據(jù)段的含義如下所示,更詳細(xì)的信息可以參考http://zone.ni.com/devzone/cda/tut/p/id/5696。
  • ToC Bitmask:這是一個(gè)32位的整型數(shù)據(jù)段,它表示該segment是否包含meta data、raw data。
  • Version number:表示segment的版本,這可以確保兼容一些舊的TDMS文件版本。
  • Next segment offset:表示下一個(gè)segment的偏移字節(jié)。
  • Raw data offset:表示Raw data的偏移字節(jié)。
  • Meta Data:三個(gè)層次的屬性存儲(chǔ)字段。
  • Raw data:實(shí)際的raw data存儲(chǔ)字段。
這種物理結(jié)構(gòu)也就決定了TDMS文件的隨機(jī)存取特性,當(dāng)程序員只希望讀取raw data而并不關(guān)注屬性時(shí),此時(shí)可以利用raw data offset直接獲得raw data信息而無(wú)需關(guān)注Meta Data信息。正如前面所述,往TDMS中添加信息時(shí)實(shí)際上是添加了新的segment,因此無(wú)需關(guān)心segment之前的內(nèi)容是什么,也就確保了寫(xiě)TDMS文件的速度與TDMS文件的大小無(wú)關(guān),保證了高速存取。值得注意的是,TDMS物理結(jié)構(gòu)中的segment與其三層次邏輯結(jié)構(gòu)沒(méi)有任何關(guān)系??赡芤粋€(gè)通道對(duì)應(yīng)著多個(gè)segment,也可能一個(gè)segment中包含多個(gè)通道。當(dāng)把數(shù)據(jù)寫(xiě)入硬盤(pán)時(shí)就是產(chǎn)生一個(gè)segment,而把數(shù)據(jù)從硬盤(pán)中讀取出來(lái)時(shí)也就是把一個(gè)個(gè)的segment內(nèi)容讀取出來(lái)。


圖 25 TDMS文件的物理結(jié)構(gòu)
TDMS文件格式在LabVIEW、LabWindows/CVI、Signal Express和DIAdem中均可以使用,也可以在Excel或Matlab中被調(diào)用。在LabVIEW中,TDMS文件的操作函數(shù)在Programming>>File I/O>>TDM Streaming選板中,如圖 25所示。其使用方法比較簡(jiǎn)單,這里只給出簡(jiǎn)單的解釋,具體的實(shí)例可以參考LabVIEW自帶的Examples。
  • TDMS Open/Write/Read/Close:與文本文件和二進(jìn)制文件的功能類似,程序員只需要牢記TDMS文件的三層次邏輯結(jié)構(gòu)即可。
  • TDMS List Contents:列出TDMS文件的Groups和Channels名稱,或者根據(jù)指定的Group列出其包含的Channels的名稱。
  • TDMS Set Properties:設(shè)置TDMS文件、通道組或通道的屬性。
  • TDMS Get Properties:獲取TDMS文件、通道組或通道的屬性。
  • TDMS Flush:刷新所有TDMS文件在內(nèi)存中的數(shù)據(jù),即立即將所有的TDMS數(shù)據(jù)寫(xiě)入硬盤(pán)(創(chuàng)建新的segments)。
  • TDMS Defragment:整理TDMS文件中的存儲(chǔ)碎片,當(dāng)TDMS文件較大時(shí),利用該函數(shù)可以提高數(shù)據(jù)存取的性能。
  • TDMS Create Scaling Information:將TDMS中的數(shù)據(jù)創(chuàng)建Scaling信息,當(dāng)采集到原始數(shù)據(jù)需要使用如y=ax+b等線性、多項(xiàng)式或者各種傳感器的轉(zhuǎn)換關(guān)系時(shí),可以使用該函數(shù)直接改變TDMS文件中某些通道的數(shù)據(jù)值(該改變是不可逆的,無(wú)法刪除Scaling信息)。
  • TDMS File Viewer:TDMS文件查看器,該VI可以非常直觀地以樹(shù)形方式列出TDMS文件中的屬性和數(shù)據(jù),便于用戶查看。


圖 25 TDMS函數(shù)選板
當(dāng)寫(xiě)完TDMS文件之后,LabVIEW會(huì)自動(dòng)生成兩個(gè)文件:*.tdms文件和*.tdms_index文件。前者為數(shù)據(jù)文件(或主文件),后者為索引文件(或頭文件)。二者最大的區(qū)別在于索引文件不含raw data信息,而只包含屬性等信息,這樣可以增加數(shù)據(jù)檢索的速度并且利于搜索TDMS文件。該文件是自動(dòng)生成的,不需要程序員干預(yù)。
LabVIEW 2009進(jìn)一步改進(jìn)了對(duì)TDMS格式的支持,從1.0版本升級(jí)到2.0版本,并且提高了對(duì)高速流盤(pán)應(yīng)用的支持,以及對(duì)DAQmx的應(yīng)用支持,比上一版本的TDMS文件至少有4倍以上速度的提升。當(dāng)然,TDMS也有一些缺點(diǎn)。比如速度上并沒(méi)有win32 streaming API快,不支持刪除某個(gè)通道或通道組,以及只支持Windows操作系統(tǒng)和VxWorks、Phar Lap等實(shí)時(shí)平臺(tái)??傮w而言,TDMS文件格式兼顧了速度、邏輯組織、易用性等多個(gè)因素,在數(shù)據(jù)存儲(chǔ)方面是一種非常不錯(cuò)的選擇。


評(píng)論


技術(shù)專區(qū)

關(guān)閉