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