匡偉男 袁鉀光

摘? 要:利用CVI的平臺(tái)對(duì)SQLServer數(shù)據(jù)庫(kù)與MATALAB的調(diào)用,實(shí)現(xiàn)了數(shù)據(jù)的動(dòng)態(tài)存儲(chǔ)與利用MATALAB對(duì)數(shù)據(jù)進(jìn)行處理的功能。
關(guān)鍵詞:CVI;SQLSever;MATALAB;腳本;ActiveX控件
中圖分類號(hào):TP311.5? ? ? ?文獻(xiàn)標(biāo)志碼:A 文章編號(hào):2095-2945(2020)05-0176-02
Abstract: This paper using CVI platform to call the SQL Server database and MATALAB, thus realizing the dynamic storage of data and the processing of data.
Keywords: CVI; SQLSever; MATALAB; Scripts; ActiveX controls
引言
在自動(dòng)化生產(chǎn)中特別是在上位機(jī)的開(kāi)發(fā)中,經(jīng)常遇到一些場(chǎng)景需要對(duì)大量的數(shù)據(jù)進(jìn)行儲(chǔ)存與處理。如果讓上位機(jī)自己開(kāi)發(fā)底層的數(shù)據(jù)存儲(chǔ)與處理程序,則勢(shì)必會(huì)加大工作量,且“不專業(yè)”的數(shù)據(jù)處理方式可能會(huì)占用相當(dāng)大的資源,使得正常處理流程受到影響。所以,本文從“專業(yè)的人”干“專業(yè)的事”角度出發(fā),利用CVI 強(qiáng)大的支持庫(kù)對(duì)SQL Server與MATALAB進(jìn)行調(diào)用來(lái)對(duì)數(shù)據(jù)進(jìn)行處理。
1 利用CVI調(diào)用MATALAB與數(shù)據(jù)庫(kù)
LabWindows/CVI 是NI 開(kāi)發(fā)的虛擬儀器開(kāi)發(fā)平臺(tái),包含了集成式開(kāi)發(fā)環(huán)境、交互式編程方法、簡(jiǎn)單直觀的圖形用戶界面設(shè)計(jì)和強(qiáng)大的圖表功能[1]。實(shí)現(xiàn)LabWindows/CVI 和MATLAB 調(diào)用的關(guān)鍵是其數(shù)據(jù)和命令的交換,LabWindows/CVI 和MATLAB都提供了與外部程序接口的組件[2],使得這種調(diào)用成為可能。
NI 的LabWindows/CVI SQL 工具包提供了一套簡(jiǎn)單易用的工具,使用戶能夠快速鏈接本地或者遠(yuǎn)程數(shù)據(jù)庫(kù),并通過(guò)結(jié)構(gòu)化查詢語(yǔ)言(SQL)編程,執(zhí)行諸多常用數(shù)據(jù)庫(kù)操作[3]。本文是將利用SQL Server將數(shù)據(jù)庫(kù)建立在本地,通過(guò)CVI訪問(wèn)所建立的數(shù)據(jù)庫(kù),對(duì)數(shù)據(jù)庫(kù)進(jìn)行簡(jiǎn)單的操作。
在本文中,調(diào)用方法主要如下所示:
1.1 創(chuàng)建ActiveX支持庫(kù)調(diào)用MATALAB
在菜單欄選擇Tool-> Create ActiveX Controller->Matlab Application(Version 8.6) Type Library,然后根據(jù)向?qū)нx擇支持庫(kù)保存的文件路徑。完成后會(huì)在庫(kù)中自動(dòng)生成一個(gè)MATALAB 2015b的支持庫(kù)和五個(gè)相關(guān)的拓展名為.c .fp .h .obj .sub的文件,將后綴為.fp的文件需要被添加到自己的工程目錄中。
1.2 利用CVI訪問(wèn)SQL Server數(shù)據(jù)庫(kù)
SQL Server建立數(shù)據(jù)庫(kù),創(chuàng)建用戶并創(chuàng)建一個(gè)新的表,在CVI中安裝SQL數(shù)據(jù)庫(kù)支持工具NILWCVISQL220,該工具包支持對(duì)多種數(shù)據(jù)庫(kù)的訪問(wèn)與使用。
1.3 支持庫(kù)中的接口函數(shù)
接口函數(shù)是支持庫(kù)封裝的最基本函數(shù),在應(yīng)用中只需要按其要求調(diào)用,知悉其作用而不用去管內(nèi)部實(shí)現(xiàn)過(guò)程。本文只給出幾個(gè)重要的接口函數(shù)的參數(shù)說(shuō)明,其余的接口函數(shù)使用,讀者可調(diào)用函數(shù)面板查看使用指南。
(1)MLApp_NewDIMLApp,該函數(shù)創(chuàng)建一個(gè)Matlab的句柄。(2)MLApp_DIMLAppExecute,該函數(shù)執(zhí)行一條Matlab命令。(3)MLApp_DIMLAppQuit,該函數(shù)退出Matlab。(4)DBInit,該函數(shù)對(duì)數(shù)據(jù)庫(kù)進(jìn)行初始化操作。(5)DBConnect,該函數(shù)設(shè)置連接參數(shù),指定數(shù)據(jù)庫(kù)類型,文件路徑,登錄id,密碼等。(6)DBBindColChar,該函數(shù)對(duì)數(shù)據(jù)庫(kù)中的列進(jìn)行綁定。(7)DBFetchNext,該函數(shù)順序得到數(shù)據(jù)庫(kù)中的下一個(gè)記錄。
1.4 函數(shù)調(diào)用實(shí)例
在CVI上建立調(diào)用M腳本的運(yùn)行環(huán)境,按照腳本語(yǔ)言編寫(xiě)簡(jiǎn)單的腳本,在CVI中調(diào)用。以下主要給出打開(kāi)matalab與執(zhí)行腳本的代碼,不對(duì)整個(gè)工程邏輯與子函數(shù)進(jìn)行贅述。實(shí)現(xiàn)打開(kāi)matalab功能,并最大化打開(kāi)的matalab窗口。得到句柄后可進(jìn)行對(duì)MATALAB的操作,運(yùn)行單個(gè)命令函數(shù)代碼,如圖1所示。
本函數(shù)的調(diào)用在“運(yùn)行腳本”的回調(diào)函數(shù)中,其中函數(shù)RunMatlabCommand為主要對(duì)1.3節(jié)函數(shù)DIMLAppExecute封裝。
由執(zhí)行結(jié)果可知,本工程順利執(zhí)行腳本中所寫(xiě)腳本,畫(huà)出了3D測(cè)試效果圖,實(shí)現(xiàn)了由CVI調(diào)用matalab的過(guò)程。
2 利用CVI混合調(diào)用數(shù)據(jù)庫(kù)與MATALAB
2.1 建立工程
將上述庫(kù)建到同一個(gè)工程中,預(yù)期實(shí)現(xiàn)由CVI程序產(chǎn)生一個(gè)正弦波曲線數(shù)據(jù),將產(chǎn)生的數(shù)據(jù)保存到文件中,并將保存的文件的路徑與日期寫(xiě)到建立的數(shù)據(jù)庫(kù)中,在matalab中實(shí)現(xiàn)對(duì)曲線數(shù)據(jù)的重繪。
2.2 實(shí)現(xiàn)過(guò)程
在TABLE控件中,建立其點(diǎn)擊的回調(diào)函數(shù),在回調(diào)函數(shù)的實(shí)現(xiàn)中獲取點(diǎn)擊處的單元格的值,此值為一個(gè)文件名,將此文件名調(diào)用MATALAB命令行輸入到MATALAB中,預(yù)先建好一個(gè)M腳本文件,寫(xiě)好需要畫(huà)圖的腳本實(shí)現(xiàn),只需將腳本中的參數(shù)由命令行中先指定即可實(shí)現(xiàn)預(yù)期效果。重要的函數(shù)實(shí)現(xiàn)如圖2所示。
2.3 實(shí)現(xiàn)結(jié)果
可以看到點(diǎn)擊一個(gè)文件名時(shí)MATALAB自動(dòng)的對(duì)數(shù)據(jù)進(jìn)行重繪,繪制出來(lái)的圖像與預(yù)期一致,如圖3所示。
3 結(jié)束語(yǔ)
通過(guò)這種混合調(diào)用的方式,能夠大大減少工作量,也能夠讓工作變得更加直觀與靈活。本文只介紹了CVI對(duì)數(shù)據(jù)存儲(chǔ)與處理兩方面的軟件簡(jiǎn)單調(diào)用,讀者可在本文基礎(chǔ)上進(jìn)行更深入的使用或是對(duì)其它需要的軟件進(jìn)行調(diào)用。
參考文獻(xiàn):
[1]王曉崗,吳得光.LabWindows/CVI環(huán)境下調(diào)用Excel文檔的實(shí)現(xiàn)方法[J].甘肅科學(xué)學(xué)報(bào),2013,25(2):101-104.
[2]劉君華.基于LabWindows/CVI的虛擬儀器設(shè)計(jì)[M].北京:電子工業(yè)出版社,2003.
[3]蘇少雄,鄭賓.LabWindows/CVI下基于ActiveX技術(shù)的Excel調(diào)用[J].測(cè)控技術(shù),2018,37(5):128-131.