畢家鑫,鐘紹華,楊勝兵,吉孔武
(1.武漢理工大學 汽車工程學院,湖北 武漢430070;2.現(xiàn)代汽車零部件技術湖北省重點實驗室,湖北 武漢430070)
在開發(fā)測控系統(tǒng)的過程中,往往要用到數(shù)據(jù)庫設計技術,如將測試樣品的各種參數(shù)、測試結(jié)果入庫以便測試后檢索。數(shù)據(jù)庫的設計給數(shù)據(jù)的管理帶來了極大的便利,同時也解決了大量數(shù)據(jù)的存儲占用存儲空間的問題。根據(jù)筆者有關項目開發(fā)的經(jīng)驗,用Excel 文件的形式保存3 個月的測試數(shù)據(jù)需要接近1 GB 的存儲空間,而利用數(shù)據(jù)庫單獨存儲只需要不到20 MB 的存儲空間。充分說明測量和監(jiān)測領域離不開對測量數(shù)據(jù)的管理與維護,這就需要創(chuàng)建一個數(shù)據(jù)庫來管理存儲的測試數(shù)據(jù),并且能夠總結(jié)測試結(jié)果及生成報表。
LabVIEW 本身不具備訪問數(shù)據(jù)庫的功能,主要通過以下幾種方式訪問數(shù)據(jù)庫[1-2]:①調(diào)用動態(tài)鏈接庫DLL,該方法需要從底層經(jīng)過復雜的編程才能實現(xiàn),開發(fā)難度大。②LabVIEW SQL Toolkit 工具包[3-4],該工具包價格昂貴,開發(fā)成本高。③基于LabVIEW 的ActiveX 功能[5-7],該方法需用戶對Microsoft ADO 及SQL 語言有較深的了解。④LabSQL 工具包,基于第三方軟件LabSQL編程來實現(xiàn)通過LabVIEW 對數(shù)據(jù)庫的訪問[8]。
LabSQL 是由Premkc Development 公司開發(fā)的一個免費、開源、多數(shù)據(jù)庫和跨平臺的Lab-VIEW 數(shù)據(jù)庫訪問工具包,該工具包支持Windows操作平臺中任何支持ODBC 的數(shù)據(jù)庫,如Access2000、Oracle 及SQL Server 等。LabSQL 基于ADO(ActiveX Data Object)和SQL 語言技術,將底層API 函數(shù)高度封裝為VI 子函數(shù),用戶可以通過調(diào)用子Vl 的方式輕松實現(xiàn)對數(shù)據(jù)庫的訪問,簡單易用。筆者選擇LabVIEW 數(shù)據(jù)庫訪問工具包LabSQL 來開發(fā)數(shù)據(jù)庫。
常用的3 種數(shù)據(jù)庫為Access、SQL Server 和Oracle。其中SQL Server 是基于服務器端的中型數(shù)據(jù)庫,適合大容量數(shù)據(jù)的應用,主要用于企業(yè)級高性能數(shù)據(jù)庫;而Oracle 是服務器端的大型數(shù)據(jù)庫且能在所有主流平臺上運行(包括Windows),完全支持所有的工業(yè)標準,采用完全開放策略,主要用于大型企業(yè)數(shù)據(jù)庫。兩者價格都非常昂貴,屬于高安全級別的網(wǎng)絡型數(shù)據(jù)庫。
Access 數(shù)據(jù)庫是由微軟發(fā)布的關系數(shù)據(jù)庫管理系統(tǒng),融合了Microsoft Jet Database Engine 和圖形用戶界面兩項特點,是Microsoft Office 的系統(tǒng)程式之一。Access 數(shù)據(jù)庫是運行環(huán)境簡單的小型關系型數(shù)據(jù)庫,在處理少量數(shù)據(jù)和單機訪問的數(shù)據(jù)庫時操作效率很高。但Access 數(shù)據(jù)庫有一定的極限,如果數(shù)據(jù)量過大,很容易造成服務器假死,或者消耗掉服務器的內(nèi)存導致服務器崩潰。不過其數(shù)據(jù)存儲量完全滿足了測控系統(tǒng)的需求,筆者選用Access 作為測控系統(tǒng)的數(shù)據(jù)庫。
在LabVIEW 環(huán)境下主要有5 種生成報表的方法[9-10]:①通過File IO 類函數(shù)生成報表且生成的報表是ASCII 格式文本。生成文本的格式單一,只能用在對報表要求不高的場合。②通過Report Generation 類函數(shù)生成報表,可以生成Lab-VIEW 的標準報表或HTML 網(wǎng)頁格式的報表,但其調(diào)試比較麻煩,不適合做樣式復雜、格式不規(guī)則的報表。③通過DDE 即動態(tài)數(shù)據(jù)交換生成報表是Windows 的主要特征之一。該方法雖然功能強大,但程序流程不夠直觀,且需要開發(fā)者對VBA有一定的了解。④通過ActiveX 生成報表。通過ActiveX Automation 訪問某Windows 應用程序中的對象所集成的屬性和方法。該方法編程難度大。⑤通過Report Generation Toolkit 工具包生成報表。該套件是LabVIEW 中一個專用的功能模板,可以方便地生成Microsoft Office 支持的報表,是最方便的報表生成方法。綜上所述,結(jié)合合作企業(yè)的Excel 報表模板,在開發(fā)時間有限且對報表生成功能要求嚴格的情況下,利用Report Generation Toolkit 工具包開發(fā)報表最為快捷有效。
基于LabVIEW 的后視鏡曲率半徑測控系統(tǒng)由硬件和軟件兩部分組成。硬件部分主要是采集位移傳感器的信號,將信號通過串口通信傳輸至計算機;軟件部分完成位移傳感器信號數(shù)據(jù)的轉(zhuǎn)換,通過運動板卡控制位移傳感器運動收集傳感器在后視鏡不同位置的位移數(shù)據(jù),通過曲率半徑算法得到國標規(guī)定的9 個點的曲率半徑,并將測試數(shù)據(jù)導入數(shù)據(jù)庫,最后進行數(shù)據(jù)檢索并生成Excel 報表。后視鏡曲率半徑測控系統(tǒng)的總體設計框圖如圖1 所示。
數(shù)據(jù)庫存儲的不是硬件采集的數(shù)據(jù),而是通過算法得到的曲率半徑數(shù)據(jù)。按國家標準規(guī)定,測試規(guī)定的9 個位置的曲率半徑,每個位置包括x軸方向和y軸方向的數(shù)據(jù)。測控系統(tǒng)按照如圖2 所示后視鏡測試點位置示意圖中P1 到P9 的順序測試,并將每個點兩個方向的測試結(jié)果依次顯示在前面板,整個測試過程結(jié)束后,由工作人員在系統(tǒng)控制界面手動輸入該樣件的型號、規(guī)格和制造商等參數(shù),以及有關試驗目的、方法等要求后,將檢索需要的參數(shù)(如樣件型號、規(guī)格和制造商等)及測試結(jié)果一起導入數(shù)據(jù)庫。需將測試結(jié)果生成報表時,在數(shù)據(jù)檢索界面按照輸入的檢索參數(shù)任意選擇一個或者多個檢索數(shù)據(jù)并顯示在界面上,確定無誤后即可生成Excel 報表。
圖1 后視鏡曲率半徑測控系統(tǒng)的總體設計框圖
圖2 后視鏡測試位置示意圖
首先將LabSQL 文件夾復制到LabVIEW 安裝目錄的user.lib 文件夾下,然后在Microsoft Office 里建立所需要的Access 數(shù)據(jù)庫文件,將其命名為“data. mdb”。安裝LabSQL 后,可按照下列步驟實現(xiàn)LabVIEW 對Access 數(shù)據(jù)庫的操作。
(1)利用ADO Connection Create.vi 創(chuàng)建一個ADO 連接對象。
(2)利用ADO Connection Open. vi 建立與數(shù)據(jù)庫的連接,要連接的數(shù)據(jù)庫文件由該VI 的Connection String 輸入端的字符串指定。由于LabSQL 與數(shù)據(jù)庫是通過ODBC 標準連接的,用戶需在ODBC 中指定數(shù)據(jù)源名稱和驅(qū)動程序。
在建立與數(shù)據(jù)庫連接的過程中,常會出現(xiàn)兩個問題:一是當數(shù)據(jù)庫文件被移動或程序被打包成可執(zhí)行文件時,會因文件路徑的改變而導致訪問出錯;二是程序打包成EXE 文件后,可能產(chǎn)生一個不合法的路徑,會導致打包后的程序無法調(diào)用數(shù)據(jù)庫文件。為解決上述問題,首先利用Lab-VIEW 提供的當前VI 路徑功能、拆分路徑功能和創(chuàng)建路徑功能獲取數(shù)據(jù)庫文件路徑,開發(fā)程序如圖3 所示,當程序在改變文件路徑時,可以自動得到當前的正確路徑。
在Windows 管理工具中對數(shù)據(jù)源驅(qū)動進行設置,操作不夠靈活,因此使用SQL 語句“Driver ={Microsoft Access Driver (* .mdb)};”指定數(shù)據(jù)源的驅(qū)動,并將該語句連同文件路徑一起轉(zhuǎn)換為字符串,轉(zhuǎn)換后的完整字符串為:“Driver = {Microsoft Access Driver (* .mdb)};Dbq =data;”,將其連接到ADO Connection Open.vi 的Connection String輸入端。開發(fā)程序如圖4 所示。
圖3 獲取文件路徑
圖4 指定數(shù)據(jù)源和驅(qū)動程序的開發(fā)程序
為解決上述問題二,在程序運行時應判斷運行的是源程序還是打包后可執(zhí)行的EXE 程序,可以使用LabVIEW 提供的屬性節(jié)點獲得應用程序的類別,再根據(jù)類別給出相應的路徑。若為EXE程序,則如圖5 所示,需再次利用屬性節(jié)點獲得EXE 程序的路徑;若為源程序,則按照圖6 所示,獲得當前路徑后實現(xiàn)與數(shù)據(jù)庫的連接。
圖5 應用程序中指定數(shù)據(jù)源和驅(qū)動程序
圖6 源程序中指定數(shù)據(jù)源和驅(qū)動程序
(3)利用ADO SQL Execute.vi 完成相應的數(shù)據(jù)庫查詢、添加、刪除和修改等操作。SQL 語句由字符串Command Text 指定。
(4)利用ADO Connection Close. vi 關閉與數(shù)據(jù)庫之間的連接。
在向數(shù)據(jù)庫中存儲數(shù)據(jù)之前,必須首先定義數(shù)據(jù)結(jié)構(gòu)。測控系統(tǒng)應包括以下幾個部分:①樣件屬性,包括制造商、樣件型號和樣件規(guī)格等參數(shù),設計上限為100 個字符。②測試位置,測試樣件曲率半徑的位置,按國家標準總共9 個,2 個字符。③x軸方向,x軸方向的曲率半徑,浮點數(shù)。④y軸方向,y軸方向的曲率半徑,浮點數(shù)。
測試數(shù)據(jù)常常需要顯示在前面板,讓工作人員了解測試狀態(tài);更重要的是測試數(shù)據(jù)需要寫入數(shù)據(jù)庫。為此需要將測試數(shù)據(jù)暫時保存,以供不同程序獲取測試數(shù)據(jù)。圖7 所示為曲率半徑數(shù)據(jù)存儲初始化過程。先定義存儲路徑,在開發(fā)根目錄創(chuàng)建名為“test_result”的文件夾,將配置文件“curve_res. ini”存放在該文件夾中;利用Open Config Data. vi 和Write Key. vi 可以將“鍵”、“段”、“值”分別存儲。其中“鍵”指當前狀態(tài)位移傳感器的測試位置,即P1 到P9 中一點;“段”指測試點的測試方向,即x軸方向或y軸方向。
圖7 曲率半徑數(shù)據(jù)存儲初始化過程
根據(jù)開發(fā)程序可以將數(shù)據(jù)暫時保存,現(xiàn)需要將保存的數(shù)據(jù)提取出來顯示在前面板。首先設置讀取路徑,即之前保存的路徑,然后利用Get Section Names.vi 、Get Key Names.vi 和Read Key.vi分別讀取“鍵”和“段”,根據(jù)兩者可以確定該位置曲率半徑的測試值。
利用SQL 語言向數(shù)據(jù)庫里添加數(shù)據(jù),如語句“INSERT INTO 測試結(jié)果(樣件屬性,測試位置,x軸方向,y軸方向)VALUES('武漢理工大學,P1,1 302.12,1 278.61);”利用了SQL 中的INSERT INTO 語句,向測試結(jié)果數(shù)據(jù)表中寫入:“樣件屬性=武漢理工大學”、“測試位置=P1”、“x軸方向=1 302.12”和“y軸方向=1 278.61”。
將前面板輸入控件“制造單位”、“樣件型號”和“樣件規(guī)格”3 個全局變量的輸入字符及測試時間日期連接成一串字符寫入數(shù)據(jù)表中的“樣件屬性”,整合成一個變量的優(yōu)點是便于管理和方便檢索數(shù)據(jù)。
將保存的數(shù)據(jù)提取出來顯示在數(shù)據(jù)表格中,表現(xiàn)形式如圖8 所示。當P1 到P9 的9 個測試點測試完成后,需要添加事件結(jié)構(gòu)“寫入數(shù)據(jù)庫”,將表格中的測試數(shù)據(jù)寫入數(shù)據(jù)庫。根據(jù)3 個全局變量確定“樣件屬性”,然后通過索引數(shù)組將數(shù)據(jù)表格的“測試位置”、“x軸方向”和“y軸方向”這3 列數(shù)據(jù)提取出來,然后按照P1 到P9 的順序依次提取這9 行數(shù)據(jù)分別給“測試位置”、“x軸方向”和“y軸方向”這3 個變量賦值,每兩次索引程序之間添加延時,保證順序性,這樣共有9 次索引,8 次延時。
圖8 前面板的數(shù)據(jù)表格
在程序設計中筆者將多個參數(shù)整合成一個變量,用SQL 語句中的LIKE 語句進行數(shù)據(jù)檢索。LIKE 語句可以檢索文本字段的內(nèi)容匹配一些特定文本的記錄。例如,“SELECT 測試位置,x軸方向,y軸方向FROM 測試結(jié)果WHERE 樣件屬性LIKE'%武漢理工大學%'”,這條語句是從數(shù)據(jù)表“測試結(jié)果”中選擇“樣件屬性”這個變量查看是否有“武漢理工大學”這段字符,如果有就將“測試位置”、“x軸方向”和“y軸方向”這3 個變量記錄的數(shù)據(jù)顯示出來。其中%為通配符字符,可以匹配任何順序的0 或更多的字符,其可以出現(xiàn)在模式字符串的任何地方,幾個通配符也可以在一個字符串內(nèi)。根據(jù)制造單位、樣件型號、樣件規(guī)格和測試時間中的任何一種或多種作為檢索條件檢索測試的曲率半徑數(shù)據(jù),并將檢索的數(shù)據(jù)發(fā)送給Excel 報表。由于創(chuàng)建報表的變量和參數(shù)過多,整體程序非常龐大,無法截圖顯示,于是截取了創(chuàng)建Excel 報表的核心程序如圖9 所示。利用Lab-VIEW Report Generation Toolkit For Microsoft Office 模塊實現(xiàn)Excel 報表生成。首先,調(diào)用New Report.vi 設置報表類型為Excel,再調(diào)用Excel Easy Title.vi 設置標題的內(nèi)容、位置及字體,其中位置以表格的行列值表示(從0 開始);再調(diào)用Excel Easy Text.vi 用于向工作表中添加文本和設置文本屬性,并設置其字體和位置,圖9 中“測試報告”為設置的單元格的副標題,“樣件型號”一個為固定文本,另一個為手動輸入控件,在測試結(jié)束后由工作人員手動鍵入該參數(shù)檢索數(shù)據(jù),最后生成報表。其次,調(diào)用Excel Set Cell Alignment.vi設置單元格對齊方式。最后,利用Excel Bring to Front.vi 將Excel 文件置于頂層,使用Save Report to File.vi 設定文件的保存路徑,當不需要保存生成的文件時調(diào)用Dispose Report.vi 關閉文件。
圖9 創(chuàng)建Excel 報表程序
筆者針對后視鏡曲率半徑測試進行了數(shù)據(jù)庫的開發(fā),在LabVIEW 中通過調(diào)用工具包LabSQL實現(xiàn)了對Access 數(shù)據(jù)庫的訪問,該方法無需底層編程,開發(fā)簡單易行,且無需購買開發(fā)工具包,降低設計成本;運用LabVIEW 的Report Generation Toolkit 將檢索的數(shù)據(jù)生成Microsoft Excel 報表,其界面簡潔美觀、內(nèi)容專業(yè),該方法在數(shù)據(jù)量較大,報表結(jié)構(gòu)較復雜的報表生成條件下優(yōu)勢明顯。在測試后視鏡曲率半徑的過程中,通過數(shù)據(jù)庫進行數(shù)據(jù)管理節(jié)約了電腦資源,大大提升了工作效率。
[1]National Instruments Corp. Report generation toolkit user guide [R]. New York:National Instruments Corp,2004.
[2]楊樂平,李海濤,趙勇,等.LabVIEW 高級程序設計[M].北京:清華大學出版社,2003:32 -151.
[3]JAMES G P W. SQL:the complete reference[M].[S.l.]:Mcgraw-Hill,2009:1 -66.
[4]吳松濤,龔家偉. 在LabVIEW 中利用LabSQL 實現(xiàn)數(shù)據(jù)庫訪問[J]. 國外電子測量技術,2006,25(4):53 -56.
[5]陳雷,王忠東,陳爽.基于LabVIEW 的機床振動信號數(shù)據(jù)庫訪問技術的研究[J].組合機床與自動化加工技術,2013,7(7):92-93.
[6]李文濤,曹彥紅,卜旭芳,等.LabVIEW 數(shù)據(jù)庫訪問技術的實現(xiàn)及應用[J].工礦自動化,2012(3):69-71.
[7]李華,朱波.LabVIEW 報表生成技術在機載電源測試系統(tǒng)中的應用[J].電子測試,2008,3(3):48-51.
[8]尹技虎,王峰.基于LabSQL 的LabVIEW 數(shù)據(jù)庫訪問技術[J].儀表技術,2011,20(4):55 -56.
[9]谷玉海,張桂彬,胡憲能.基于LabVIEW 的數(shù)據(jù)存儲及報表設計方法[J]. 北京機械工業(yè)學院學報,2007,22(1):9 -11.
[10]王靖,李學軍,羅善明.基于LabVIEW 的機床監(jiān)測診斷軟件研究[J].現(xiàn)代制造工程,2005(11):18-21.