VB調(diào)用Matlab在WEDM仿真系統(tǒng)中的應用
在VB開發(fā)環(huán)境下制定前臺用戶界面,利用Matlab強大的計算功能實現(xiàn)后臺模型的實時仿真。為了實現(xiàn)前臺界面與后臺仿真環(huán)境間的數(shù)據(jù)傳遞,應用ActiveX自動化技術(shù)進行VB與Matlab之間的接口設計,通過建立在VB應用程序和Matlab仿真環(huán)境之間的ActiveX自動化連接,實現(xiàn)了在VB環(huán)境下對Matlab仿真命令的調(diào)用,并在VB友好的用戶界面中實時顯示仿真結(jié)果。
1 VB與Matlab間的接口分析
1.1 VB與Matlab接口形式
為了能夠充分利用Matlab系統(tǒng)提供的豐富函數(shù)庫,Matlab本身提供了應用程序接口API(Matlab application program interface)。因此,VB與Matlab接口設計有多種實現(xiàn)方式。
(1)借用C++與Matlab的接口,將Matlab的程序文件(*.M)編譯為動態(tài)鏈接庫(*.DLL),VB在代碼中調(diào)用生成DLL中的函數(shù),以實現(xiàn)算法,便于用戶脫離Matlab環(huán)境使用。由于算法部分采用C++語句,運行速度較快,可應用于實時運算。但是這種方法對開發(fā)者在設置和編程上都有較高的要求。
(2)通過使用嵌入VB中矩陣函數(shù)庫MatrixVB的方法實現(xiàn)接口。MatrixVB是第三方插件,利用與Matlab相似的函數(shù)、語法嵌入到VB中,可以像使用VB的函數(shù)、命令一樣使用Matlab函數(shù)。這種方法的語法和函數(shù)使用比較簡單,編程效率很高,幾乎完全可以融入VB語言,特別是對圖形的處理非常方便,彌補了其他方法在圖形處理上的弱點。但由于它仍然采用解釋執(zhí)行,執(zhí)行效率較低,因此實時運算難以實現(xiàn),特別對于Matlab各類工具箱的調(diào)用尤為困難。
(3)在Visual Basic中通過調(diào)用Matlab的引擎接口,使用Windows的ActiveX技術(shù)與Matlab進行數(shù)據(jù)交互。通過Object.Execute語句在程序中直接使用Matlab提供的函數(shù)庫和圖形庫。
1.2 ActiveX自動化技術(shù)
ActiveX是一種支持組件集成MicroSoft Windows協(xié)議的自動化技術(shù),通過ActiveX技術(shù)可以將不同環(huán)境下開發(fā)的組件集成到一個應用程序中;ActiveX同時又是一種面向?qū)ο蠹夹g(shù),屬于組件對象模型(COM)的子類。COM為所有的ActiveX對象定義了對象模型,每個ActiveX對象支持一定的接口,即支持不同的方法、屬性和事件。利用這些方法執(zhí)行相應的動作,幫助客戶端實現(xiàn)一定的功能。Matlab支持兩種類型的ActiveX技術(shù):ActiveX控制容器和ActiveX Automation。ActiveX控制容器可以將不同的ActiveX控件集成在一個應用中;而ActiveX Automation是一種允許一個應用程序(客戶端)去控制另一個應用程序(服務器端)的協(xié)議。在本文中,Matlab是服務器端,VB是客戶端,通過Automation,客戶端可以執(zhí)行Matlab命令,并與Matlab的工作空間進行數(shù)據(jù)交換,以達到調(diào)用Matlab來訓練神經(jīng)網(wǎng)絡的目的。
2 ActiveX技術(shù)在接口設計中的應用
Matlab ActiveX自動化服務的功能主要包括在Matlab工作空間執(zhí)行Matlab命令,直接對工作空間進行存取矩陣操作等。
Matlab提供了一個自動化對象,其外部名稱為Matlab.Application,支持COM技術(shù)。外部程序(如VB)通過COM技術(shù)提供的函數(shù),得到自動化服務器對象支持的指針,并通過調(diào)用接口函數(shù)控制和使用自動化對象。在VB應用程序中,創(chuàng)建了Matlab的ActiveX對象后,就可以使用這個對象所包含的各種方法來實現(xiàn)對Matlab的調(diào)用。Matlab.Application對象含有3種方法,分別是Execute,GetFullatrix和PutFullMatrix。
(1)BSTR Execute([in]BSTR Command):BSTR表示寬字符串類型,它與VB存儲字符串所采用的數(shù)據(jù)格式相同。該方法接收字符串命令并在Matlab中執(zhí)行,將結(jié)果以字符串形式返回。
(2)void GetFullMatrix([in]BSTR Name[in]BSTR Workspace,[in,out]SAFEARRAY(douMe)*pr,[in,out]SAFEARRAY(double)*pi):GetFullMatrix方法從指定的工作空間檢索一個完整的實型或虛型mxArray,其實部和虛部被分別存放到2個單獨的Double型數(shù)組中??梢岳肎etFullMatrix方法將Matlab中的一個矩陣變量傳送到VB程序中的一個一維或二維數(shù)組中。其中,Name指定了Matlab中的矩陣變量名;Workspace指定了該矩陣所在的Matlab工作區(qū);pr指VB程序中的實部數(shù)組;pi指VB程序中的虛部數(shù)組。
(3)void PutFullMatrix([in]BSTR Name,[in]BSTRWorkspaee,[in,out]SAFEARRAY(double)*pr,[in,out]SAFEARRAY(double)*pi):PutFullMatrix方法將一個mxArray放入指定的工作空間。各參數(shù)的含義及調(diào)用方法與GetFullMatrix方法類似。
評論