摘 要:在分析VB與Matlab接口方式的基礎上,實現了在VB開發環境中采用ActiveX技術調用Matlab神經功能算法的接口方式。充分利用VB開發界面友好和Matlab運算強大及圖示功能的各自優點,開發并實現了基于BP神經網絡的電火花線切割工藝仿真系統。工藝仿真結果表明,利用VB調用Matlab混合編程建立的預測模型可以正確反映機床的工藝規律,建模算法是成功的,并能夠應用于指導和分析生產實踐。
關鍵詞:VB; Matlab; ActiveX技術; 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神經網絡的電火花線切割(WEDM)工藝仿真系統需要具有工藝數據庫管理、工藝效果預測、加工參數優化等設計功能。借助Matlab的神經網絡工具箱,可以建立良好的工藝效果預測模型和參數優化模型,這正是工藝仿真軟件最主要的功能要求。VB是Windows操作系統下優秀的可視化編程工具軟件,在用戶界面設計和快速開發等方面具有獨特的優勢。同時,Matlab仿真軟件以其強大的科學計算功能和開放式開發思想使其成為當前最為流行的仿真計算工具。綜合兩種開發環境各自的優勢,可采用VB與Matlab混合編程的方法實現工藝仿真軟件的編程開發[1]。
在VB開發環境下制定前臺用戶界面,利用Matlab強大的計算功能實現后臺模型的實時仿真。為了實現前臺界面與后臺仿真環境間的數據傳遞,應用ActiveX自動化技術進行VB與Matlab之間的接口設計,通過建立在VB應用程序和Matlab仿真環境之間的ActiveX自動化連接,實現了在VB環境下對Matlab仿真命令的調用,并在VB友好的用戶界面中實時顯示仿真結果。
1 VB與Matlab間的接口分析
1.1 VB與Matlab接口形式
為了能夠充分利用Matlab系統提供的豐富函數庫,Matlab本身提供了應用程序接口API(Matlab application program interface)。因此,VB與Matlab接口設計有多種實現方式[2]。
(1) 借用C++與Matlab的接口,將Matlab的程序文件 (*.M)編譯為動態鏈接庫(*.DLL),VB在代碼中調用生成DLL中的函數,以實現算法,便于用戶脫離Matlab環境使用。由于算法部分采用C++語句,運行速度較快,可應用于實時運算。但是這種方法對開發者在設置和編程上都有較高的要求。
(2) 通過使用嵌入VB中矩陣函數庫MatrixVB的方法實現接口。MatrixVB是第三方插件,利用與Matlab相似的函數、語法嵌入到VB中,可以像使用VB的函數、命令一樣使用Matlab函數。這種方法的語法和函數使用比較簡單,編程效率很高,幾乎完全可以融入VB語言,特別是對圖形的處理非常方便,彌補了其他方法在圖形處理上的弱點。但由于它仍然采用解釋執行,執行效率較低,因此實時運算難以實現,特別對于Matlab各類工具箱的調用尤為困難。
(3) 在Visual Basic中通過調用Matlab的引擎接口,使用Windows的ActiveX技術與Matlab進行數據交互。通過Object.Execute語句在程序中直接使用Matlab提供的函數庫和圖形庫。
1.2 ActiveX自動化技術
ActiveX是一種支持組件集成MicroSoft Windows協議的自動化技術,通過ActiveX技術可以將不同環境下開發的組件集成到一個應用程序中;ActiveX同時又是一種面向對象技術,屬于組件對象模型(COM)的子類。COM為所有的ActiveX對象定義了對象模型,每個ActiveX對象支持一定的接口,即支持不同的方法、屬性和事件。利用這些方法執行相應的動作,幫助客戶端實現一定的功能。
Matlab支持兩種類型的ActiveX技術:ActiveX控制容器和ActiveX Automation。ActiveX控制容器可以將不同的ActiveX控件集成在一個應用中;而ActiveX Automation是一種允許一個應用程序(客戶端)去控制另一個應用程序(服務器端)的協議[3]。在本文中,Matlab是服務器端,VB是客戶端,通過Automation,客戶端可以執行Matlab命令,并與Matlab的工作空間進行數據交換,以達到調用Matlab來訓練神經網絡的目的。
2 ActiveX技術在接口設計中的應用
Matlab ActiveX自動化服務的功能主要包括在Matlab工作空間執行Matlab命令,直接對工作空間進行存取矩陣操作等。
Matlab提供了一個自動化對象,其外部名稱為Matlab.Application,支持COM技術。外部程序(如VB)通過COM技術提供的函數,得到自動化服務器對象支持的指針,并通過調用接口函數控制和使用自動化對象。在VB應用程序中,創建了Matlab的ActiveX對象后,就可以使用這個對象所包含的各種方法來實現對Matlab的調用[4-5]。Matlab.Application對象含有3種方法,分別是Execute,GetFullatrix和PutFullMatrix。
(1) BSTR Execute([in]BSTR Command):
BSTR表示寬字符串類型,它與VB存儲字符串所采用的數據格式相同。該方法接收字符串命令并在Matlab中執行,將結果以字符串形式返回。
(2) void GetFullMatrix( [in] BSTR Name [in] BSTR Workspace,[in,out] SAFEARRAY(double)*pr,[in,out] SAFEARRAY(double)*pi):
GetFullMatrix方法從指定的工作空間檢索一個完整的實型或虛型mxArray,其實部和虛部被分別存放到2個單獨的Double型數組中。可以利用GetFullMatrix方法將Matlab中的一個矩陣變量傳送到VB程序中的一個一維或二維數組中。其中,Name指定了Matlab中的矩陣變量名;Workspace指定了該矩陣所在的Matlab工作區;pr指VB程序中的實部數組;pi指VB程序中的虛部數組。
(3) void PutFulIMatrix([in]BSTR Name,[in] BSTRWorkspace,[in,out]SAFEARRAY(double)*pr,[in,out] SAFEARRAY(double)*pi):
PutFullMatrix方法將一個mxArray放入指定的工作空間。各參數的含義及調用方法與GetFullMatrix方法類似。
3 VB調用Matlab在WEDM仿真軟件開發中的應用
基于BP神經網絡的電火花線切割(WEDM)工藝仿真系統主要用于實現工藝數據庫的管理、工藝效果的預測、加工參數的優化等功能[6]。在VB開發環境中調用Matlab的神經網絡工具箱,是為了建立工藝效果的預測模型和加工參數優化模型,這是仿真系統的主要功能。
建模部分的核心代碼如下[7-10]:
…
′打開數據庫
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\")
′將輸入參數傳到Matlab空間
Call Matlab.PutFullMatrix(\"P\", \"base\", array1, MImag1)
…
′執行Matlab命令,訓練網絡
Matlab.Execute (\"net=newff(minmax(P),[M,O],{′tansig′,′purelin′},′trainbr′);\")
該部分程序的作用是VB把用戶輸入的參數傳到Matlab空間,在Matlab的空間中利用神經網絡工具箱訓練網絡,將結果輸出,進而實現仿真系統幾個模型的建模。array 1是訓練神經網絡時的樣本輸入數據,包括工件厚度T(單位:mm)、脈沖寬度tON(單位:s)、脈沖間隔tOFF(單位:s)、峰值電流IP(單位:A)、間隙電壓VS(單位:V);array 2是樣本輸出數據,包括切割速度vw(單位:mm2/min)表面粗糙度Ra(單位:μm)。圖1為線切割工藝仿真系統主控界面,包括加工參數數據庫、系統建模、工藝效果的預測及參數優化等部分。建立模型時,首先利用數據庫中的參數訓練模型,模型訓練完成后,便可以對不同加工參數所對應的加工效果進行預測,并對給定材料、厚度條件下的加工參數進行優化,給出優化結果。
圖1 主控界面
建模所需的樣本數據如表1所示,網絡訓練的結果如圖2所示。
表1 樣本數據
序號T/mmtON/stOFF /sIPVS /Vvw /(mm2/min) Ra /μm
1102321112.5
2203322202.5
3303532212.5
4406532202.5
33180201363604.0
34190221363604.0
35200252173603.6
圖2 建模結果輸出界面
為驗證模型的正確性,用沒有參與神經網絡訓練的驗證數據檢驗模型,結果如表2所示。
從仿真結果可以看出,利用VB調用Matlab混合編程建立的預測模型可以反映機床的工藝規律,建模是成功的,可以應用于實際生產中。
表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 結 語
VB與Matlab混合編程簡單方便,效率高,能夠應用于WEDM仿真系統中,以實現系統功能。缺點是要依托于Matlab平臺,執行速度慢,靈活性較差。
參考文獻
[1]梁新成,黃志剛,朱慧.VB與Matlab混合編程的研究[J].北京工商大學學報:自然科學版,2007,25(1):38-41.
[2]王世香.精通Matlab接口與編程[M].北京:電子工業出版社,2007.
[3]張志涌.精通Matlab 6.5[M].北京:北京航空航天大學出版社,2003.
[4]楊凡,米根鎖.基于ActiveX機制的VB Matlab在故障診斷中的應用[J].鐵路計算機應用,2006,15(11):24-27.
[5]高英杰,王永昌,孔祥東.VB調用Matlab的實現方法在AGC軟件開發中的應用[J].液壓氣動與密封,2001(3):40-41.
[6]袁曾任.人工神經網絡及其應用[M].北京:清華大學出版社,1999.
[7]張朝昆,施麗娜.Visual Basic數據庫開發基礎與應用[M].北京:人民郵電出版社,2005.
[8]許東,吳錚.基于Matlab 6.x的系統分析與設計神經網絡[M].2版.西安:西安電子科技大學出版社,2002.
[9]高雋.人工神經網絡原理及仿真實例[M].北京:機械工業出版社,2003.
[10]吳啟勛,胡樹青.貝葉斯正則化神經網絡預測金屬晶體結合能的研究[J].計算機與應用化學,2004,21(4):604-608.