有關OPNET和MATLAB的聯合模擬方法,在參考網上大家的分享的東西和一些書籍之後,我終於試成功了,現將過程分享給他家,一起學習交流~
主要過程如下:
- 配置OPENT的環境:在Edit-->preference中:(我的MATLAB安裝在D盤根目錄中)
l Complication的設定
Comp_flags_common中添加/ID:MATLAB/extern/include,這裡D:/MATLAB為MATLAB的安裝目錄,這個設定可以使編譯器中包含一些必要的MATLAB標頭檔。
l Link的設定
添加值/LIBPATH:”D:/MATLAB/extern/lib/win32/microsoft/msvc60”到變數Bind_shobj_flag中;Bind_shobj_lib的值設定為libmx.lib
libmat.lib libeng.lib,通過該設定,OPNET中就可以調用到MATLAB的引擎函數庫。
l 環境變數設定:
include中添加:D:/MATLAB/extern/include;
Lib中添加:D:/MATLAB/extern/lib/win32/microsoft;
PATH中添加:D:/MATLAB/bin/win32。
2. 編程指南
1) 添加標頭檔 #include “engine.h”,開啟計算引擎ep=engOpen();
2) 定義OPNET中的變數,如double* t;
3) 定義MATLAB的mx介面的資料結構 mxArray* T,並建立矩陣,使用函數T=mxCreateDoubleMatrix(3,2,mxREAL)建立3行2列的實數矩陣;
4) 將double* t的值轉換到T中,使用語句memcpy(mxGetPr(T),t,6*sizeof(double));
5) 將OPNET中的T引入到MATLAB工作空間中:使用函數engPutVariable(ep,"T",T),其中ep為 Engine* ep;
6) 進行MATLAB計算,使用函數engEvalString,可以執行簡單的MATLAB指令如:engEvalString(ep,“polt(T,T)”);也可以執行自訂的m檔案中的函數:如 engEvalString(ep,“path(path,‘m檔案的路徑’)”);engEvalString(ep,“m檔案的函數”);
7) 如果有傳回值,使用函數接收到傳回值mxArray* T1=engGetVariable(ep,"T");
8) 將接收回的的傳回值轉換成OPNET中的資料類型,如還是double* t1,使用函數t1 = (double *) mxGetData(T1);
9) 銷毀所有的mxArray類型資料,使用函數:mxDestroyArray(T);
10) 關閉計算引擎 engClose(ep);
所有這些就可以完成OPNET和MATLAB的聯合模擬了~~~~