摘 要:在分析VB與Matlab接口方式的基礎上,實現(xiàn)了在VB開發(fā)環(huán)境中采用ActiveX技術(shù)調(diào)用Matlab神經(jīng)功能算法的接口方式。充分利用VB開發(fā)界面友好和Matlab運算強大及圖示功能的各自優(yōu)點,開發(fā)并實現(xiàn)了基于BP神經(jīng)網(wǎng)絡的電火花線切割工藝仿真系統(tǒng)。工藝仿真結(jié)果表明,利用VB調(diào)用Matlab混合編程建立的預測模型可以正確反映機床的工藝規(guī)律,建模算法是成功的,并能夠應用于指導和分析生產(chǎn)實踐。
關(guān)鍵詞:VB; Matlab; ActiveX技術(shù); WEDM仿真
中圖分類號:TP391.73 文獻標識碼:B
文章編號:1004-373X(2010)10-0049-03
Application of Calling Matlab in VB in WEDM Simulation System
SU Jun, SUN Ke-feng
(Xi’an Institute of Applied Optics, Xi’an 710065, China)
Abstract:Based on the analysis of the interface between VB and Matlab, the interface mode is implemented by calling Matlab neural function algorithm in VB development environment by using ActiveX technique. By fully taking the advantages of the friendly development interface of VB and the powerful capability of operation and display of Matlab, the development of WEDM simulation system based on the BP neural network was realized. The simulation results show that the prediction model can predict the technological rule correctly, the modeling method is successfuland canprovide the guidance for production practice.
Keywords:VB; Matlab; ActiveX technique; WEDM simulation
基于BP神經(jīng)網(wǎng)絡的電火花線切割(WEDM)工藝仿真系統(tǒng)需要具有工藝數(shù)據(jù)庫管理、工藝效果預測、加工參數(shù)優(yōu)化等設計功能。借助Matlab的神經(jīng)網(wǎng)絡工具箱,可以建立良好的工藝效果預測模型和參數(shù)優(yōu)化模型,這正是工藝仿真軟件最主要的功能要求。VB是Windows操作系統(tǒng)下優(yōu)秀的可視化編程工具軟件,在用戶界面設計和快速開發(fā)等方面具有獨特的優(yōu)勢。同時,Matlab仿真軟件以其強大的科學計算功能和開放式開發(fā)思想使其成為當前最為流行的仿真計算工具。綜合兩種開發(fā)環(huán)境各自的優(yōu)勢,可采用VB與Matlab混合編程的方法實現(xiàn)工藝仿真軟件的編程開發(fā)[1]。
在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)方式[2]。
(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é)議[3]。在本文中,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)用[4-5]。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(double)*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 PutFulIMatrix([in]BSTR Name,[in] BSTRWorkspace,[in,out]SAFEARRAY(double)*pr,[in,out] SAFEARRAY(double)*pi):
PutFullMatrix方法將一個mxArray放入指定的工作空間。各參數(shù)的含義及調(diào)用方法與GetFullMatrix方法類似。
3 VB調(diào)用Matlab在WEDM仿真軟件開發(fā)中的應用
基于BP神經(jīng)網(wǎng)絡的電火花線切割(WEDM)工藝仿真系統(tǒng)主要用于實現(xiàn)工藝數(shù)據(jù)庫的管理、工藝效果的預測、加工參數(shù)的優(yōu)化等功能[6]。在VB開發(fā)環(huán)境中調(diào)用Matlab的神經(jīng)網(wǎng)絡工具箱,是為了建立工藝效果的預測模型和加工參數(shù)優(yōu)化模型,這是仿真系統(tǒng)的主要功能。
建模部分的核心代碼如下[7-10]:
…
′打開數(shù)據(jù)庫
rs_add45info.Open sql, conn,
adOpenKeyset, adLockPessimistic
recount = rs_add45info.RecordCount
ReDim array1(1 To recount, 1 To recol1) As Double
ReDim array2(1 To recount, 1 To recol2) As Double
…
′聲明對象
Dim Matlab As Object
′初始化對象
Set Matlab =
CreateObject(\"Matlab.Application\")
′將輸入?yún)?shù)傳到Matlab空間
Call Matlab.PutFullMatrix(\"P\", \"base\", array1, MImag1)
…
′執(zhí)行Matlab命令,訓練網(wǎng)絡
Matlab.Execute (\"net=newff(minmax(P),[M,O],{′tansig′,′purelin′},′trainbr′);\")
該部分程序的作用是VB把用戶輸入的參數(shù)傳到Matlab空間,在Matlab的空間中利用神經(jīng)網(wǎng)絡工具箱訓練網(wǎng)絡,將結(jié)果輸出,進而實現(xiàn)仿真系統(tǒng)幾個模型的建模。array 1是訓練神經(jīng)網(wǎng)絡時的樣本輸入數(shù)據(jù),包括工件厚度T(單位:mm)、脈沖寬度tON(單位:s)、脈沖間隔tOFF(單位:s)、峰值電流IP(單位:A)、間隙電壓VS(單位:V);array 2是樣本輸出數(shù)據(jù),包括切割速度vw(單位:mm2/min)表面粗糙度Ra(單位:μm)。圖1為線切割工藝仿真系統(tǒng)主控界面,包括加工參數(shù)數(shù)據(jù)庫、系統(tǒng)建模、工藝效果的預測及參數(shù)優(yōu)化等部分。建立模型時,首先利用數(shù)據(jù)庫中的參數(shù)訓練模型,模型訓練完成后,便可以對不同加工參數(shù)所對應的加工效果進行預測,并對給定材料、厚度條件下的加工參數(shù)進行優(yōu)化,給出優(yōu)化結(jié)果。
圖1 主控界面
建模所需的樣本數(shù)據(jù)如表1所示,網(wǎng)絡訓練的結(jié)果如圖2所示。
表1 樣本數(shù)據(jù)
序號T/mmtON/stOFF /sIPVS /Vvw /(mm2/min) Ra /μm
1102321112.5
2203322202.5
3303532212.5
4406532202.5
33180201363604.0
34190221363604.0
35200252173603.6
圖2 建模結(jié)果輸出界面
為驗證模型的正確性,用沒有參與神經(jīng)網(wǎng)絡訓練的驗證數(shù)據(jù)檢驗模型,結(jié)果如表2所示。
從仿真結(jié)果可以看出,利用VB調(diào)用Matlab混合編程建立的預測模型可以反映機床的工藝規(guī)律,建模是成功的,可以應用于實際生產(chǎn)中。
表2 工藝效果的實測值與預測值
序號
切割速度vw /(mm2/ min)
實測值預測值絕對誤差相對誤差/%
粗糙度Ra/ μm
實測值預測值絕對誤差相對誤差 /%
12929.440.441.523.12.84-0.268.39
23940.991.995.103.03.150.155.13
34043.693.709.243.53.35-0.144.20
4 結(jié) 語
VB與Matlab混合編程簡單方便,效率高,能夠應用于WEDM仿真系統(tǒng)中,以實現(xiàn)系統(tǒng)功能。缺點是要依托于Matlab平臺,執(zhí)行速度慢,靈活性較差。
參考文獻
[1]梁新成,黃志剛,朱慧.VB與Matlab混合編程的研究[J].北京工商大學學報:自然科學版,2007,25(1):38-41.
[2]王世香.精通Matlab接口與編程[M].北京:電子工業(yè)出版社,2007.
[3]張志涌.精通Matlab 6.5[M].北京:北京航空航天大學出版社,2003.
[4]楊凡,米根鎖.基于ActiveX機制的VB Matlab在故障診斷中的應用[J].鐵路計算機應用,2006,15(11):24-27.
[5]高英杰,王永昌,孔祥東.VB調(diào)用Matlab的實現(xiàn)方法在AGC軟件開發(fā)中的應用[J].液壓氣動與密封,2001(3):40-41.
[6]袁曾任.人工神經(jīng)網(wǎng)絡及其應用[M].北京:清華大學出版社,1999.
[7]張朝昆,施麗娜.Visual Basic數(shù)據(jù)庫開發(fā)基礎與應用[M].北京:人民郵電出版社,2005.
[8]許東,吳錚.基于Matlab 6.x的系統(tǒng)分析與設計神經(jīng)網(wǎng)絡[M].2版.西安:西安電子科技大學出版社,2002.
[9]高雋.人工神經(jīng)網(wǎng)絡原理及仿真實例[M].北京:機械工業(yè)出版社,2003.
[10]吳啟勛,胡樹青.貝葉斯正則化神經(jīng)網(wǎng)絡預測金屬晶體結(jié)合能的研究[J].計算機與應用化學,2004,21(4):604-608.