基于 LabVIEW 的油滴電量測試系統(tǒng)的數(shù)據(jù)庫訪問
隨著測試技術(shù)與計算機(jī)技術(shù)日益緊密的結(jié)合,測試測量領(lǐng)域得到了空前的發(fā)展。尤其是基于LabVIEW的新一代虛擬儀器測試系統(tǒng),充分利用了計算機(jī)數(shù)據(jù)處理速度快、控制能力強(qiáng)等優(yōu)點(diǎn),使測試系統(tǒng)在數(shù)據(jù)采集、傳送、處理、顯示及存儲等方面突破了以往單一的儀器儀表的限制。LabVIEW 是一個劃時代的圖形化編程系統(tǒng),提供一種全新的程序設(shè)計方法,它對被稱為“虛擬儀器”的軟件對象進(jìn)行圖形化的組合操作,其強(qiáng)大的數(shù)據(jù)分析功能可在數(shù)據(jù)采集、測試分析中起到至關(guān)重要的作用,這就涉及到對大量數(shù)據(jù)的存儲、查詢、調(diào)用等功能。
本文引用地址:http://butianyuan.cn/article/201612/333647.htm而大量數(shù)據(jù)的管理又需要通過數(shù)據(jù)庫來實(shí)現(xiàn),但是Lab-VIEW 本身并不具備數(shù)據(jù)庫訪問功能,因此需要其他輔助的方法來實(shí)現(xiàn)。本文以油滴電量測試系統(tǒng)的數(shù)據(jù)庫為例,利用NI的LabVIEW Database Connectivity Toolkit進(jìn)行編程,完成了對數(shù)據(jù)庫的訪問,實(shí)現(xiàn)了數(shù)據(jù)存儲、查詢、更新、修改、刪除等各項功能。
1 LabVIEW訪問數(shù)據(jù)庫的多種實(shí)現(xiàn)方式
數(shù)據(jù)庫訪問方式有多種,第一種是利用Visual C++等多種語言編寫DLL程序訪問數(shù)據(jù)庫,但這種方法需要從底層經(jīng)過復(fù)雜的編程才能實(shí)現(xiàn),開發(fā)難度大,本文不考慮這一方法;第二種方法是基于第三方軟件通過編程來實(shí)現(xiàn)LabVIEW 對數(shù)據(jù)庫的訪問。比如,LabSQL工具包就是第三方開發(fā)的專門針對LabVIEW的一個開源附加工具包,對基本的數(shù)據(jù)庫操作功能進(jìn)行二次封裝,能夠完成一般的數(shù)據(jù)庫操作,但兼容性相對較差;第三種是利用NI 的附加數(shù)據(jù)庫接口工具包LabVIEW SQLToolkit進(jìn)行編程來實(shí)現(xiàn)對數(shù)據(jù)庫的訪問。該工具包集成的模塊中包含了大多數(shù)數(shù)據(jù)庫操作和訪問的功能,易于理解和編程。
LabVIEW SQL Toolkit 又稱為LabVIEW DatabaseConnectivity Toolkit,是專門用于數(shù)據(jù)庫訪問的附加工具包,它涵蓋了數(shù)據(jù)庫操作的所有功能,集成了一系列功能模塊,這些模塊封裝了數(shù)據(jù)庫的大多數(shù)操作和一些高級的數(shù)據(jù)庫訪問功能。其主要的功能包括:
?。?)支持ADO所支持的所有數(shù)據(jù)庫引擎;
?。?)支持所有與ODBC 或OLE DB 兼容的數(shù)據(jù)庫驅(qū)動程序;
?。?)與SQL兼容;
?。?)可以將數(shù)據(jù)庫中Column Values 的數(shù)據(jù)類型轉(zhuǎn)換為標(biāo)準(zhǔn)LabVIEW Database Connectivity Toolset 的數(shù)據(jù)類型,進(jìn)一步增強(qiáng)了它的可移植性。
基于LabVIEW SQL Toolkit 的豐富功能及諸多優(yōu)點(diǎn),本文選擇使用LabVIEW SQL Toolkit 來實(shí)現(xiàn)對數(shù)據(jù)庫的操作。
2 應(yīng)用實(shí)例
本文以油滴電量測試系統(tǒng)作為基于LabVIEW的數(shù)據(jù)庫訪問的應(yīng)用實(shí)例。油滴電量測試系統(tǒng)分為上位機(jī)和下位機(jī)2 部分,分別承擔(dān)總控平臺和測試終端的作用,總體結(jié)構(gòu)見圖1.該系統(tǒng)具有參數(shù)采集、存儲和數(shù)據(jù)分析等功能。下位機(jī)采用的是油滴儀、計時器、噴霧器等儀器進(jìn)行測量,測試數(shù)據(jù)通過無線通信模塊將數(shù)據(jù)傳送到上位機(jī),上位機(jī)是采用LabVIEW 2010圖形化編程平臺設(shè)計,將下位機(jī)傳送來的數(shù)據(jù)存儲到數(shù)據(jù)庫,通過數(shù)據(jù)庫進(jìn)行訪問,實(shí)現(xiàn)對數(shù)據(jù)的分析與管理。
基于LabVIEW 的總控臺由3部分組成:命令發(fā)送、總體進(jìn)度顯示、某一測試終端的詳細(xì)數(shù)據(jù)顯示。與第二和第三項功能相適應(yīng),需要對各個測試終端的數(shù)據(jù)進(jìn)行數(shù)據(jù)庫管理。
軟件設(shè)計中,利用LabVIEW SQL Toolkit 對Micro-soft Access 數(shù)據(jù)庫進(jìn)行添加、修改、更新、刪除、查詢和分析,實(shí)現(xiàn)測試系統(tǒng)的數(shù)據(jù)管理功能。系統(tǒng)總體流程為:下位機(jī)采集數(shù)據(jù)并存儲在FLASH中,待上位機(jī)發(fā)送“數(shù)據(jù)接收”命令,下位機(jī)將依次把數(shù)據(jù)傳送到上位機(jī),上位機(jī)將數(shù)據(jù)存儲在名為“測試數(shù)據(jù)庫”的Microsoft Ac-cess 的數(shù)據(jù)庫中,操作人員通過“歷史數(shù)據(jù)查詢”或“圖像顯示歷史數(shù)據(jù)”功能模塊,查詢或分析某一顆油滴的測試數(shù)據(jù)。而操作人員在進(jìn)入此系統(tǒng)前需要注冊或登錄操作,在這里的登錄系統(tǒng)中同樣需要數(shù)據(jù)的存儲、匹配操作,需要對數(shù)據(jù)庫進(jìn)行訪問。圖2為系統(tǒng)數(shù)據(jù)顯示的程序前面板。
軟件具體功能包括:一是將操作員編號、測試儀地址、測試電壓、油滴運(yùn)動時間等基本數(shù)據(jù)添加到Micro-soft Access數(shù)據(jù)庫;二是對Microsoft Access 數(shù)據(jù)庫進(jìn)行查詢、修改、更新、刪除錯誤的數(shù)據(jù),并對數(shù)據(jù)進(jìn)行分析。
2.1 建立數(shù)據(jù)源
LabVIEW 數(shù)據(jù)庫工具包只能操作數(shù)據(jù)庫,不能創(chuàng)建數(shù)據(jù)庫,所以必須借助第三方數(shù)據(jù)庫管理系統(tǒng),本文采用Access來創(chuàng)建數(shù)據(jù)庫。因為文中的數(shù)據(jù)庫范例是油滴電量測試實(shí)時監(jiān)控系統(tǒng)(簡稱油滴電量測試系統(tǒng)),所以建立一個名為“測試數(shù)據(jù)庫。 mdb”的數(shù)據(jù)庫文件。
然后是建立于數(shù)據(jù)庫的鏈接。在利用LabVIEW 數(shù)據(jù)庫工具包操作數(shù)據(jù)庫之前,需要先建立數(shù)據(jù)庫鏈接。
鏈接數(shù)據(jù)庫的方法有2 種:利用ODBC(OpenDatabaseConnectivity)技術(shù)鏈接數(shù)據(jù)庫和利用Active 數(shù)據(jù)對象ADO(ActiveX Data Objects)技術(shù)鏈接數(shù)據(jù)庫。
使用ODBC API 函數(shù)時,需要創(chuàng)建數(shù)據(jù)源名DSN(Data Source Names)才能鏈接到實(shí)際數(shù)據(jù)庫。因此需要考慮移植問題,當(dāng)代碼發(fā)布到其他機(jī)器上時,要手動為其重新建立一個DSN.此外,Microsoft設(shè)計的ODBC標(biāo)準(zhǔn)只能訪問關(guān)系型數(shù)據(jù)庫,對于非關(guān)系型數(shù)據(jù)庫則無能為力。而ADO 是Microsoft 提出的應(yīng)用程序接口(API),用以訪問關(guān)系型或非關(guān)系型數(shù)據(jù)庫中的數(shù)據(jù)。
ADO使用通用數(shù)據(jù)鏈接UDL(Universal DataLink)來獲得數(shù)據(jù)庫信息,即實(shí)現(xiàn)數(shù)據(jù)庫的鏈接[6].
本文使用的是利用動態(tài)數(shù)據(jù)對象ADO(ActiveXData Objects)技術(shù)鏈接數(shù)據(jù)庫。在“測試數(shù)據(jù)庫。mdb”
所在的文件夾下點(diǎn)擊鼠標(biāo)右鍵→新建→Microsoft DataLink,并命名為“測試數(shù)據(jù)庫鏈接。udl”.或者通過另一種方法來建立。udl文件,在測試數(shù)據(jù)庫。mdb所在的文件夾下點(diǎn)擊鼠標(biāo)右鍵→新建→文本文檔,并命名為“測試數(shù)據(jù)庫鏈接。txt”,再將其后綴改為“.udl”即可。雙擊“測試數(shù)據(jù)庫鏈接。udl”,打開數(shù)據(jù)鏈接屬性對話框,在提供程序選項卡中選擇Microsoft Jet 4.0 OLE DB Provide.
在接下來的鏈接選項卡中,選擇已經(jīng)建立好的數(shù)據(jù)庫文件,然后單擊“測試鏈接(T)”按鈕,就會鏈接成功。
2.2 數(shù)據(jù)庫操作
鏈接上數(shù)據(jù)庫之后,就可以對數(shù)據(jù)庫進(jìn)行操作了。
對數(shù)據(jù)庫的操作主要有創(chuàng)建表格、刪除表格、添加記錄、查詢記錄等。本文主要介紹添加記錄、刪除記錄、查詢記錄和更新數(shù)據(jù)庫數(shù)據(jù)信息。
2.2.1 添加記錄
在使用本系統(tǒng)時,第一次使用的操作員需要注冊,操作員的注冊信息需要寫入數(shù)據(jù)庫以數(shù)據(jù)表的形式保存下來,以便操作員以后使用系統(tǒng)就可以直接登錄,下面說明如何向數(shù)據(jù)庫中寫入數(shù)據(jù)。
與數(shù)據(jù)庫以及記錄集對象建立鏈接,獲取“測試數(shù)據(jù)庫鏈接。udl”文件的位置,使用DB Tools Open Connec-tion.vi創(chuàng)建鏈接。
選擇寫入數(shù)據(jù)的數(shù)據(jù)表“ 用戶信息表”,利用DBTools Insert Data.vi獲取數(shù)據(jù)表的列名字。
由DB Tools Insert Data.vi來實(shí)現(xiàn)添加記錄,它有三個主要的參數(shù):table(數(shù)據(jù)表名)告訴DB Tools InsertData.vi 向數(shù)據(jù)庫里的哪個表格插入數(shù)據(jù);data 告訴DBTools Insert Data.vi插入什么數(shù)據(jù);column對應(yīng)插入列的名字,其數(shù)據(jù)類型是一個字符串?dāng)?shù)組,而且它的數(shù)據(jù)來源于DB Tools Insert Data.vi獲得并輸出的數(shù)據(jù)。然后斷開與數(shù)據(jù)庫的鏈接。
圖3是添加記錄的程序框圖。
2.2.2 刪除記錄
在測試過程中存在著很多不確定性因素會導(dǎo)致測試結(jié)果出現(xiàn)偏差,這就需要將不合格的測試數(shù)據(jù)刪除,將符合要求的測試數(shù)據(jù)保存起來。
對于刪除測試數(shù)據(jù)記錄的操作,可以使用數(shù)據(jù)庫高級操作,在LabVIEW 中執(zhí)行SQL 語言來實(shí)現(xiàn)數(shù)據(jù)刪除功能。刪除一條記錄的語法為:
DELETE FROM table_name
WHERE column_name = some_value
圖4實(shí)現(xiàn)了刪除一條記錄的操作。
2.2.3 查詢數(shù)據(jù)
實(shí)驗操作人員需要通過下位機(jī)將獲得的測試數(shù)據(jù)發(fā)送到PC 機(jī)的LabVIEW 測試系統(tǒng)中并通過LabVIEW保存到數(shù)據(jù)庫中,以便以后查看數(shù)據(jù)和數(shù)據(jù)的存檔。在本測試系統(tǒng)中,每個操作員的數(shù)據(jù)分為5組且每一組數(shù)據(jù)存放在一個數(shù)據(jù)表中,這樣要獲得某一個操作員的實(shí)驗數(shù)據(jù)就需要從5個數(shù)據(jù)表中一次查詢到該操作員的數(shù)據(jù),再在LabVIEW前面板上顯示查詢結(jié)果。
此處同樣需要首先建立鏈接,即利用DB Tools In-sert Data.vi獲取數(shù)據(jù)表的列名,并利用DB ToolsSelectData.vi 來讀取指定數(shù)據(jù)表中的所有數(shù)據(jù)。因為從DBTools Select Data.vi 讀出來的數(shù)據(jù)是動態(tài)數(shù)據(jù)類型,需要通過Database Variant To Data.vi 函數(shù)把動態(tài)數(shù)據(jù)類型轉(zhuǎn)換成正確的數(shù)據(jù)類型。
通過以上步驟,已經(jīng)完成將指定數(shù)據(jù)表中的數(shù)據(jù)全部數(shù)據(jù)讀出并以正確的數(shù)據(jù)類型進(jìn)行顯示。
在完成某一特定操作員的測試數(shù)據(jù)查詢工作時,本文采用雙for循環(huán)嵌套,外部for循環(huán)的循環(huán)次數(shù)為5,再由內(nèi)部for循環(huán)依次查詢“測試數(shù)據(jù)1…5”表中的數(shù)據(jù),根據(jù)外部索引輸出數(shù)組的操作員編號列信息與前面板輸入的信息匹配,再利用指定操作員編號的索引值查找數(shù)據(jù)表中對應(yīng)的記錄信息,并插入到最后的“指定操作員數(shù)據(jù)”數(shù)組中。
圖5為完整的查詢數(shù)據(jù)程序框圖。
圖6 為直接從數(shù)據(jù)庫中讀取到的未經(jīng)過處理的數(shù)據(jù)顯示。
圖7為經(jīng)過對數(shù)組數(shù)據(jù)進(jìn)行變換、處理得到的通常情況下數(shù)據(jù)記錄表格形式。
2.2.4 數(shù)據(jù)更新
以上過程已實(shí)現(xiàn)了數(shù)據(jù)的寫入,但對于某些需要實(shí)時同步修改的數(shù)據(jù),需要考慮數(shù)據(jù)更新問題。因為數(shù)據(jù)庫要記錄用戶最后一次登錄系統(tǒng)的時間,所以當(dāng)用戶每次登錄系統(tǒng),系統(tǒng)都要將其在數(shù)據(jù)庫中的時間信息更改為當(dāng)前時間。
這里同樣使用的是數(shù)據(jù)庫高級操作,在LabVIEW中執(zhí)行SQL 語言來實(shí)現(xiàn)數(shù)據(jù)更新功能。SQL 中更新一條記錄的語句是“update”,其語法為:
UPDATE table_name
SET column_name=new_value
WHERE column_name=some_value
圖8為更新時間的框圖程序。
3 結(jié)語
通過結(jié)合油滴電量測試系統(tǒng)的Access數(shù)據(jù)庫操作,本文實(shí)現(xiàn)了在LabVIEW 平臺下,利用Database Connec-tivity Toolkits 工具對Access 數(shù)據(jù)庫進(jìn)行實(shí)時操作,實(shí)現(xiàn)了數(shù)據(jù)的寫入、刪除、更新等實(shí)用功能,為類似的數(shù)據(jù)庫開發(fā)提供了可予借鑒的方法。
評論