在LabVIEW程序設計中,常常需要調(diào)用外部文件數(shù)據(jù),同時也需要將程序產(chǎn)生的結果數(shù)據(jù)保存至外部文件中,這些都離不開文件I/O操作。文件IiO操作是LabVIEW和外部交換數(shù)據(jù)的重要方式。
文件I/O的基本概念和術語
在文件I/O中會用到一些相關的概念和術語,包括文件引用旬柄、文件格式、流程控件、流盤等。
1.文件路徑
文件路徑分為絕對路徑和相對路徑。絕對路徑指文件在磁盤中的位置,LabVIEW可以通過絕對路徑訪問在磁盤中的文件;相對路徑指相對于一個參照位置的路徑,相對路徑必須最終形成絕對路徑才能訪問磁盤中的文件。LabVIEW中,路徑可以是有效的路徑名、空值或非路徑。非路徑是LabVIEW提供的一種特殊的路徑,是在路徑操作失敗時的返回值。
2.文件引用句柄
文件引用句柄是LabVIEW對文件進行區(qū)分的一種標識符,用于對文件進行操作。打開一個文件時,LabVIEW會生成一個指向該文件的引用句柄,對打開的文件進行的所有操作均使用引用句柄來識別每個對象。引用旬柄控件用于將一個引用旬柄傳進或傳出Ⅵ。LabVIEW通過文件路徑訪問到文件后,為該文件設置一個文件引用句柄,以后通過此句柄即可對文件進行操作。文件引用句柄包含文件的位置、大小、讀寫權限等信息。
3.文件I/O格式
文件I/O格式取決于所讀寫的文件格式。LabVIEW可讀寫的文件格式有文本文件、二進制文碉 i數(shù)據(jù)記錄文件3種。使用何種格式的文件取決于采集和創(chuàng)建的數(shù)據(jù)及訪問這些數(shù)據(jù)的應用程序。
(1)文本文件。
文本文件是最便于使用和共享的文件格式,幾乎適用于任何計算機。許多基于文本的程序可讀取基于文本的文件。多數(shù)儀器控制應用程序使用文本字符串。
如果磁盤空間、文件I/0操作速度和數(shù)字精度不是主要考慮因素,或無需進行隨機讀寫,可以便用文本文件存儲數(shù)據(jù),以方便其他用戶和應用程序讀取文件。
若要通過其他應用程序訪問數(shù)據(jù),如文字處理或電子表格應用程序,可將數(shù)據(jù)存儲在文本文件中。
如需將數(shù)據(jù)存儲在文本文件中,使用字符串函數(shù)可將所有的數(shù)據(jù)轉換為文本字符串。文本文件可包含不同數(shù)據(jù)類型的信息。
如果數(shù)據(jù)本身不是文本格式(如圖形或圖表數(shù)據(jù)),∶掃于數(shù)據(jù)的ASCII碼表示通常要比數(shù)據(jù)本身大,因此這種情況下文本文件要比二進制和數(shù)據(jù)記錄文件占用更多內(nèi)存。
(2)二進制文件。
二進制文件可以用來保存數(shù)值數(shù)據(jù)并訪問文件中的指定數(shù)字,或隨機訪問文件中的數(shù)字。與人可識別的文本文件不同,二進制文件只能通過機器讀取。
二進制文件是存儲數(shù)據(jù)最為緊湊和快速的格式。這種文件占用較少的磁盤空間,且存儲和讀取數(shù)據(jù)時無需在文本表示與數(shù)據(jù)之間進行轉換,因此二進制文件效率更高。
二進制文件可在1字節(jié)磁盤空間上表示256個值。除擴展精度和復數(shù)外,二進制文件中含有數(shù)據(jù)在內(nèi)存中存儲格式的映象。因為二進制文件的存儲格式與數(shù)據(jù)在內(nèi)存中的格式一致,無需轉換,所以讀取文件的速度更快。
文本文件和二進制文件均為字節(jié)流文件,以字符或字節(jié)的序列對數(shù)琿進行存儲。
(3)數(shù)據(jù)記錄文件。
數(shù)據(jù)記錄文件以相同的結構化記錄序列存儲數(shù)據(jù)(類似于電子表格),每行均表示一個記錄。數(shù)據(jù)記錄文件中的每條記錄都必須是相同的數(shù)據(jù)類型。LabVIEW會將每個記錄作為含有待保存數(shù)據(jù)的簇寫入該文件。
字符串和文件
每個數(shù)據(jù)記錄可由任何數(shù)據(jù)類型組成,并可在創(chuàng)建該文件時確定數(shù)據(jù)類型。數(shù)據(jù)記錄文件只需進行少量處理,因而其讀寫速度更快;數(shù)據(jù)記錄文件將原始數(shù)據(jù)塊作為一個記錄來重新讀取,無需讀取該記錄之前的所有記錄,因此簡化了數(shù)據(jù)查詢的過程;僅需記錄號就可訪問記錄,因此可更快更方便地隨機訪問數(shù)據(jù)記錄文件。
創(chuàng)建數(shù)據(jù)記錄文件時,LabVIEW按順序給每個記錄分配一個記錄號。每次運行相關的VI時,LabVIEW會將記錄寫入數(shù)據(jù)記錄文件將記錄寫入數(shù)據(jù)記錄文件后,將無法覆蓋該記錄。讀取數(shù)據(jù)記錄文件時,可一次讀取一個或多個記錄。
LabVIEW還提供了獨特的測量文件格式。測量文件包括基于文本的測量文件(lvm文件)和二進制測量文件(tdm文件、tdms文件)。
基于文本的測量文件(.lvm文件)包括由寫入測量文件Express VI生成的數(shù)據(jù)。該文件是用制表符分隔的文本文件,可在電子表格應用程序或文本編輯應用程序中打開。.lvm文件不僅包括由Express VI生成的數(shù)據(jù),還包括該數(shù)據(jù)的相關信息,如生成數(shù)據(jù)的日期和時間等。在,lvm文件中,LabVIEW保存的數(shù)據(jù)精度可高達6位數(shù)。lvm文件用逗號作為數(shù)字的分隔符。如需將.lvm文件中的數(shù)據(jù)從字符串轉化為數(shù)值,可用本地化代碼格式說明符將句點指定為小數(shù)點分隔符。
二進制測量文件(.tdms文件和.tdm文件)包括由寫入測量文件Express VI或存儲VI生成的數(shù)據(jù)。.tdm文件通過基于XML的格式保存波形屬性,及包含該波形數(shù)據(jù)的二進制文件的鏈接。二進制格式的.tdm文件在浮點數(shù)字上更為精確、占用磁盤空間更小,運行速度也比LabVIEW測量數(shù)據(jù)文件(.lvm)更快。
4.文件I/O流程控制
文件I/O流程控制保證文件操作按順序依次執(zhí)行。文件I/O操作過程中,一般有一對保持不變的輸入、輸出參數(shù),用來控制程序流程。文件標識號就是其中之一,除了區(qū)分文件外,還可以進行流程控制。將輸入、輸出端口依次連接起來,可保證操作按順序依次執(zhí)行,實現(xiàn)對程序流程的控制。
5.文件I/O出錯管理
文件I/O出錯管理反映文件操作過程中出現(xiàn)的錯誤。LabVIEW對文件進行I/O操作時,一般提供一個錯誤輸入端和一個錯誤輸出端用來保留和傳遞錯誤信息。錯誤數(shù)據(jù)類型為一個簇,包含一個布爾量(判斷是否出錯)、一個整型量(錯誤代碼)和一個字符串(錯誤和警告)。在程序中,將所有錯誤輸入端和錯誤輸出端依次連接起來,任何一點的出錯信息就可以保留下來,并依次傳遞下去。在程序末端連接錯誤處理程序,可實現(xiàn)對程序中所有錯誤信息的管理。
6.流盤
流盤是一項在進行多次寫操作時保持文件打開的技術,如在循環(huán)中使用流盤。流盤操作可以減少函數(shù)因打開和關閉文件與操作系統(tǒng)交互的次數(shù),從而節(jié)省內(nèi)存資源;流盤操作避免對同一文件進行頻繁的打開和關閉,可提高Ⅵ效率。
如果將路徑控件或常量連接至寫入文本文件、寫入二進制文件或寫入電子表格文件函數(shù),則函數(shù)將在每次函數(shù)或Ⅵ運行時打開、關閉文件,增加了系統(tǒng)占用。對于速度要求高,時間持續(xù)長的數(shù)據(jù)采集,流盤是一種理想的方案,因其在數(shù)據(jù)采集的同時將數(shù)據(jù)連續(xù)寫入文件中。
為獲取更好的效果,在采集結束前應避免運行其他VI和函數(shù)(如分析VI和函數(shù)等)。在循環(huán)之前放置打開創(chuàng)建/替換文件函數(shù),在循環(huán)內(nèi)部放置讀或寫函數(shù),在循環(huán)之后放置關閉文件函數(shù),即可創(chuàng)建一個典型的流盤操作。此時只有寫操作在循環(huán)內(nèi)部進行,從而避免了重復打開、關閉文件的系統(tǒng)占用。
來源:ks993次





