用DLL實現(xiàn)自動測試存儲數據的糾錯處理
在進行文件存儲的過程中,因為某些因素可能會導致個別傳感器沒有返回信號,此時直接存儲必然會導致測量結果文件的數據混亂。為解決此問題,本文提出通過調用DLL對測量結果的合理性進行檢驗和處理。該研究可以有效避免發(fā)生大數據量下測量結果文件中的數據錯位現(xiàn)象,使得測試系統(tǒng)在獲得傳感信號同時,還具有識別錯誤信號并進行自動處理的功能,提高了系統(tǒng)的可靠性。
2 LabVIEW與DLL接口技術
美國NI公司開發(fā)的LabVIEW是一種功能強大的圖形化編程語言[3,4],用之來實現(xiàn)計算機對可編程儀器的控制[5],可以很大程度地提高編程效率。此外,由于LabVIEW所提供的圖標功能是有限的,實際系統(tǒng)中仍然有某些功能是無法或難以實現(xiàn)的。針對此問題,LabVIEW提供了調用Windows動態(tài)鏈接庫(DLL)函數的功能。從而可以彌補其自身的不足,實現(xiàn)更多、更強大的功能。
動態(tài)鏈接庫(Dynamic Link Library, DLL)是基于Windows程序設計的一個非常重要的組成部分。當應用程序被裝入內存并開始運行時,在Windows的管理下,在應用程序與相應的DLL之間建立鏈接關系。當要執(zhí)行DLL中的函數時,根據鏈接產生重定位信息,Windows轉去執(zhí)行DLL中相應的函數代碼。因而,DLL是一個位于應用程序外部的過程庫,它可以從應用程序中調用,在運行時被動態(tài)鏈接,。DLL的編制與具體的編程語言及編譯器無關,只要遵守DLL的開發(fā)規(guī)范和編程策略,并安排正確的調用接口,不管用何種編程語言編制的DLL都具有調用性。
3 測量返回結果的存儲和錯位問題
通過在LabVIEW中開發(fā)測試控制軟件,可以控制光纖光柵測量儀器按預定程序自動執(zhí)行測量工作。在計算機控制軟件中發(fā)出遠程測量命令“:MEAS:ARR:POW:WAV?”[6]后,儀器返回的結果如圖1所示,其中的第一個值為返回波長的個數,后面為相應的光纖光柵反射波長值。在所有光柵傳感器都完好且能返回傳感數據的情況下,可以直接將測量結果保存分析。測量結果文件如圖2所示,每行測量結果包括進行測量的日期、時間,峰值波長個數及各個返回峰值波長值。

在保存的EXCEL文件中,每次測量結果存為一行,執(zhí)行一次測量,存入一行數據,每列數據對應一個光柵傳感器。但在實際工程應用中,由于某些因素可能使得其中某個光柵傳感器沒有返回傳感信號,此時若將測量返回結果直接寫入EXCEL文件的一行中,就會使該光柵之后的數據錯位,不能對應其應該所處的列,尤其在數據量眾多的情況下,更會造成測量結果的混亂,如圖3所示。為解決此問題,需對每次返回的測量結果進行分析,若出現(xiàn)上述情況,則在無信號光柵位置數據補零。

4 利用DLL實現(xiàn)對返回數據的合理性檢驗和自動處理
為實現(xiàn)對測量數據的檢驗和處理,在VC++6.0編程環(huán)境下開發(fā)Win32 DLL。一個完整的DLL項目需要模塊定義文件,用戶程序頭文件和C++源程序文件。模板定義文件名后綴為def,是由一個或多個用于描述DLL屬性的語句組成的文本文件。在模板定義文件中,LIBRARY聲明庫文件名check;EXPORTS聲明中列出了DLL中輸出函數的名稱modifyResult,如下所示:

頭文件中包含用戶所要輸出的所有函數,每個輸出函數前都要有關鍵字_declspec (dllexport)。頭文件是可選的,若用戶把其內容放在源程序文件中,作為源程序的一部分,則可省去頭文件。

源程序文件對modifyResult函數進行實現(xiàn)。該函數的三個參數的含義分別是:previousData數組存放每個光纖光柵傳感器的上次測量結果;maxDifference數組存放每個傳感器本次測量結果與其上次測量結果允許的最大差值;currentData存放本次測量結果。對于第i個數據,如果|currentData-previousData|>maxDifference,則認為其是第i+1個傳感器返回的數據,第i個傳感器沒有返回數據,應該在該位置補0,主要算法如下:


在LabVIEW中,用戶對DLL的調用,可通過LabVIEW提供的調用庫函數[7](Call Library Function)來實現(xiàn)。對CLF節(jié)點的配置情況如圖4所示,在所顯示的對話框中輸入庫文件名、所調用函數名、調用規(guī)程以及函數的返回類型、所有輸入參數及其數據類型。
在配置好CLF節(jié)點后,即可在LabVIEW程序中進行直接應用。圖5所示為由測試儀器串口通信→字符串轉換→調用CLF節(jié)點處理數據→文件存儲的測量結果的完整處理過程。在所有光纖光柵傳感器都完好的情況下,由串口通信模塊讀出的結果在轉換為數值型數據后可以直接存儲或顯示。然而若返回波長數N小于初始個數N0,則說明有傳感器無返回數據,此時可以通過調用庫函數CLF節(jié)點調用包含有處理函數的DLL,對返回數據進行檢驗處理,在無返回信號光柵相應位置補零,從而保證后續(xù)數據與其正確位置的對應,然后再進入文件存儲或顯示模塊。

5結論
本文的創(chuàng)新點在于通過CLF節(jié)點調用DLL,對通過LabVIEW獲取的多波長計測量結果進行分析處理,避免發(fā)生大數據量下測量結果文件中的數據錯位現(xiàn)象。由于DLL只有在程序執(zhí)行時才將代碼載入內存,并且多個程序使用相同的DLL時,內存中只裝載一次,所以在LabVIEW開發(fā)中使用DLL,可以使代碼更簡潔,內存資源的使用更經濟。用戶只要編寫一次DLL,就可以多次調用。實驗證明:這種方法簡單、方便、可滿足測試要求。
評論