標籤:des style blog http io ar os 使用 sp
OPNET作為專業級網路模擬軟體,其強大的功能使其在多個領域有廣泛的應用。“越強大的軟體,安裝越鬧心”,OPNET就是這樣一款安裝和啟動並執行都很鬧心的軟體,這裡簡單轉載和記錄我安裝OPNET和使用中的問題。
OPNET安裝
我是在有vs2012的win7系統下安裝的OPNET14.5。雖然VS2012是C編譯器,但貌似版本上無法支援OPNET,所以我安裝的基本步驟和網上的大多教程相同,先裝VC6.0,再裝OPNET。
1. 安裝VC6.0。安裝VC時,當出現“setup Environment Variables ”對話方塊時 把Register Environment Variables前面的框打上鉤。 (需重啟)當然,如果安裝的是精簡版的或者由於某種原因,安裝過程中沒有setup Environment Variables這一步,那麼就需要自己進行環境變數的配置了。我因為已經有強大的VS2012了,所以選擇使用的是一個綠色精簡版 http://dd2.pc6.com/soft12/VC6.0green.rar ,之後就是煩人的系統參數配置。
2. 環境變數
進入右鍵電腦-》屬性-》系統的進階設定-》進階-》環境變數。對於沒有的環境變數需要建立,而已有的環境變數,就直接編輯。(環境變數不區分大小寫,所以一定要看好了再建立,否則同名的舊路徑就會被覆蓋掉,後果很嚴重)。
配置原則是:將VC下的所有名為include、lib...的路徑加到LIB INCLUDE等變數中(http://niehan.blog.techweb.com.cn/archives/146.html)。具體配置如下:
DevEnvDir=C:\Program Files\Microsoft Visual Studio 9.0\Common7\IDE*
Framework35Version=v3.5
FrameworkDir=C:\WINDOWS\Microsoft.NET\Framework
FrameworkVersion=v2.0.50727
INCLUDE=
C:\Program Files\Microsoft Visual Studio 9.0\VC\ATLMFC\INCLUDE;*
C:\Program Files\Microsoft Visual Studio 9.0\VC\INCLUDE;
C:\Program Files\Microsoft SDKs\Windows\v6.0A\include;
LIB=
C:\Program Files\Microsoft Visual Studio 9.0\VC\ATLMFC\LIB;
C:\Program Files\Microsoft Visual Studio 9.0\VC\LIB;
C:\Program Files\Microsoft SDKs\Windows\v6.0A\lib;***
LIBPATH=
C:\WINDOWS\Microsoft.NET\Framework\v3.5;
C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727;
C:\Program Files\Microsoft Visual Studio 9.0\VC\ATLMFC\LIB;
C:\Program Files\Microsoft Visual Studio 9.0\VC\LIB;
PATH=
C:\Program Files\Microsoft Visual Studio 9.0\Common7\IDE;
C:\Program Files\Microsoft Visual Studio 9.0\VC\BIN;
C:\Program Files\Microsoft Visual Studio 9.0\Common7\Tools;
C:\WINDOWS\Microsoft.NET\Framework\v3.5;
C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727;
C:\Program Files\Microsoft Visual Studio 9.0\VC\VCPackages;
C:\Program Files\Microsoft SDKs\Windows\v6.0A\bin;
VCINSTALLDIR=
C:\Program Files\Microsoft Visual Studio 9.0\VC
VS90COMNTOOLS=
C:\Program Files\Microsoft Visual Studio 9.0\Common7\Tools\
VSINSTALLDIR=
C:\Program Files\Microsoft Visual Studio 9.0
WindowsSdkDir=
C:\Program Files\Microsoft SDKs\Windows\v6.0A\
註:配置環境變數的時候一定要和實際的檔案系統的目錄對應起來;每個變數如果有多個值就使用 ; 進行分割,注意是英文字元。
*具體目錄名,可能跟安裝位置和版本號碼有關,比如我的安裝位置是G:\Program Files\Microsoft Visual Studio\Common\IDE
**具體檔案夾的名也會有出入,如果沒有某個的檔案夾或者名字不同。如果沒有某個檔案夾,就在相應位置建立一個檔案夾;如果名字不同,比如我安裝的精簡版VC6.0下沒有C:\Program Files\Microsoft Visual Studio 9.0\VC\ATLMFC而是分別有C:\Program Files\Microsoft Visual Studio 9.0\VC\ATL和C:\Program Files\Microsoft Visual Studio 9.0\VC\MFC那麼就把對應的內容替換就好。
***這個目錄我也沒有,而是有7.0到8.0的幾個檔案夾,這種情況下,就搜尋這些檔案夾裡哪個目錄下有lib檔案夾,哪個有,就把哪個加到LIB路徑中去。比如我的是:在C:\Program Files\Microsoft SDKs\Windows\v7.1A\下有lib檔案夾,所以將C:\Program Files\Microsoft SDKs\Windows\v6.0A\lib添加到LIB變數中就行。
配置完環境變數後,重啟,在cmd中輸入cl語句,查看是否可以運行,如果報錯“沒有找到mspdb60.dll,因此這個應用程式未能啟動,重新安裝應用程式可能會修複此問題”,將安裝目錄下的.\Common\MSDev98\Bin下的mspdb60.dll檔案拷貝到安裝目錄下的.\VC98\Bin目錄下即可,之後輸入cl能正常反映了。
這樣就可以愉快地開始安裝OPNET了。
3. 安裝OPNET
我的opnet14.5是在六維上下的破解版http://bt.neu6.edu.cn/thread-342317-1-1.html,該資源下有具體的安裝以及license的產生方法。具體如下:
- 執行modeler_145A_PL1_7116_win.exe按照提示安裝OPNET Modeler軟體。最後選擇License類型時,請選擇Standalone模式。
- 再執行modeler_docs_28-Jan-2008_win.exe和models_145A_PL1_27Feb08_win.exe按照提示安裝文檔和庫檔案。
- 從Start Menu裡運行OPNET Modeler,此時會提示無License,選擇運行License Management,此時應該沒有任何license。
- 關閉License Manager,但不要關閉OPNET Modeler。
- 從OPNET Modeler的Edit-Preference裡檢查license_server和license_server_standalone設定是否正確。如果之前選Standalone模式,license_server應該為localhost,本機地址或主機名稱,licenser_server_standalone應該為TRUE。如果修改了某些設定,請重新啟動OPNET(回到第5步)。
- 雙擊OPNET.Modeler.14.5.License.MakerFFS.exe,斷行符號繼續。
- 從OPNET Modeler的License-License Management菜單啟動License Management,此時License檔案中應該已經有100x35個License了,關閉License Management。
- 在OPNET Modeler的License-Product Modules菜單裡選擇所有的項目,確定後重新啟動OPNET Modeler,此時就可以正常使用OPNET Modeler了。
如此完成安裝。
OPNET運行常見錯誤:轉自 http://blog.163.com/[email protected]/blog/static/27792065201271391652222/
如果有錯誤,一定要耐心的閱讀錯誤提示。因為這個可以非常高效的幫你找出錯誤的原因(還會有中文提示哦,這是最關鍵的,哈哈)。Simulation Console(左下角)
一.2012-8-13:
錯誤提示:
<<< Recoverable Error >>>
External code file (tcp_api) compilation failed
Errors given in file (C:\Documents and Settings\chen\op_admin\tmp\cc_err_2572)
<<< Recoverable Error >>>
Object repository construction failed
External code file (C:\Program Files\OPNET\14.5.A\models\std\umts\umts_support.ex.c) compilation failed, see error messages in (C:\Documents and Settings\chen\op_admin\tmp\cc_err_2572)
T (0), EV (-), MOD (NONE), PROC (sim_load_repos_rebuild)
----
<<< Program Abort >>>
Error encountered rebuilding repository -- unable to proceed
T (0), EV (-), MOD (NONE), PROC (sim_load_repos_load)
解決方案:
1.設定環境變數還是出現了同樣的錯誤
2.將visual c++卸了之後重新安裝一遍,然後運行一下VC再開啟OPNET運行模擬就可以順利通過了。(VC與OPNET何者先安裝是無所謂的)
二.2012-8-21
引用地址 http://hqsong722.blog.163.com/blog/static/3674215820101123101313442/
1.如何設定全域變數?
在 .h檔案裡定義變數,然後在process的HEAD BLOCK 裡include 這個標頭檔,就可以使用全域變數了。
2.OPNET中如何更方便的看程式?
(1).opnet中的設定:preferences->editor_prog
(2).source insight的設定:operation->preferences->symbol Lookups->Project symbol path->Add Project to Path
(添加自己建立一個包含所有opnet model 和 include目錄的project)
當然,這個有些不足,就是那個sv,tv,hb等中定義的內容,不能進行關聯。
3.OPNET中的函數FIN,FRET以及FOUT都是什麼功能?
為了使一個使用者定義的函數被執行,該函數必須與一個特殊的堆疊追蹤代碼相連。堆疊追蹤技術靠在函數的進入點和出口點插入前置處理器巨集指令完成(一個函數只有一個進入點,但可以有多個出口點(由C語言的return聲明決定))。這些巨集指令為:FIN、FOUT和FRET。FIN被插入到函數的進入點,FOUT被插入到函數的出口點,但卻不返回任何值,FRET被插入到函數的出口點,返回一個值。注意這些巨集指令不需要以分號結束(它們自我包含),FIN的參數中也不需要雙引號。
Opnet提供的所有的樣本模型都包含了這些巨集指令,並且建議使用者定義的函數也包含這些巨集指令。如果FIN、FOUT、和FRET被正確插入了使用者代碼中,我們就可以使用op_vuerr來找出程式錯誤的位置,哪怕是在一個嵌套的模型函數調用中。
4.local statistics和global statistics的區別?
local statistics表示的是本地的統計量,而global statistics是全域的統計量。比如你做了一個節點模型,此節點發送資料包,然後編程把發送的資料包數分別寫入一個local statistics和global statistics中,假如你在工程中用到了兩個這樣的節點,那麼你可以分別view result每一個節點發送的資料包數,而global statistics則是這兩個節點一共發送的資料包數。
5.Objid和user id的區別?
Objid是系統分配的,全域唯一,整數。user id是自己可以設定的,可以不唯一。
6.如何將模組添加到OPNET中?
edit - > preferences -> mod_dirs 添加模組路徑即可。
7.為什麼每次建立一個project 都給我儲存在 c:\op_models 目錄下 ,我想換一個地方,怎麼設定?
edit - > preferences -> mod_dirs中,建立一個路徑,並作為第一路徑即可。
8.想尋找一個變數的使用場合,包括不同process,不同node中的header和funtion,如何做 ?
在OPNET中變數是在一個PROCESS中存在的。不同的PROCESS之間則是通過進程之間的通訊機制來共用資訊的。因此你尋找變數的作用範圍應該是在一個PROCESS內的。編譯後每個PROCESS會產生一個C或C++檔案。在那個檔案裡就可以查到變數的應用地方。不同的進程可能具有相同的ATTRIBUTE.而為了減少NODE的ATTRIBUTE數目可以採用 MERGE/RENAME ATTRIBUTE的方式
。這時這些ATTRIBUTE具體對應到各個PROCESS 的哪個ATTRIBUTE可以通過NODE INTERFACE菜單下的MERGE/RENAME ATTRIBUTE 找到。
9.請問OPNET怎樣將圖匯出來?
一:可以從Topology->Export Topology->……匯出Project的幾種圖形,有bitmap,html等格式。node,process都可以從file中的ExportBitmap匯出拓撲圖。
二:對於分析出來的曲線,按滑鼠右鍵,其中有個 Export Graph Data to Spreadsheet,然後會有提示 說你檔案儲存在什麼地方,一般預設是儲存在 c:\op_admin\tmp 目錄下。檔案你可以用 UltraEdit 開啟來看,是兩列資料,一列是模擬時間,一列是 模擬資料,然後你就可以想用什麼工具畫圖就無所謂了。
補充:其實很好用的還有就是直接抓圖,效果不錯。
10.在opnet中關於時延的問題。
資料速率是用來和包長結合計算傳輸時延的,而“delay”屬性是用來描述電波的傳播時延的。在點到點鏈路屬性裡,“delay”就是總傳播時延;在多點鏈路裡,“delay”指單位距 離的傳播時延。使用者可以修改傳播時延的計算方法,那個“Distance Related”就是表示在自訂的傳播時延 pipeline stage裡基於距離計算傳播時延。
11..在opnet中關於統計一些速率方面的參數。
統計流速率的時候,首先應該在Local Statistics中將這個統計項 的Capture Mode設成sum/time,然後在程式中每次收到一個資料包, 就將這個包的長度L寫入,比如op_stat_write(handle,L),隨後再馬上 調用一個op_stat_write(handle, 0)來結束這次寫入,就可以了。
12.關於begin intrpt和endsim intrpt
模擬0時刻時需要進行的初始化,則需要設begin intrpt, 模擬結束時刻需要進行一些工組,則需要enable endsim intrpt
13.用VC調試的時候,state variable的值無法看到,怎麼辦?
用op_sv_ptr這個指標。它指向了所有的狀態變數。
14.關於Elapsed time and Simulation time ?
一個是模擬程式啟動並執行時間,反映模擬程式執行的速度。而另一個是所模擬的系統的時間進度,反映當前的模擬執行的進度。模擬時間的修改是通過事件的發生來進行的。譬如說你在0s時作一件事期間為5秒,5秒鐘結束後會觸發一個事件,這個事件將系統的模擬時間改為5s。你使用OPNET的模型,它在接收到事件時會進行相應的模擬時間的更新。而你自己也可根據需要更新模擬時間。你採用op_intrpt_schedule_self(op_sim_time()+需要的時間,intrptcode),就可以在當前時刻的所需的時間以後產生一個中斷,從而觸發一個事件,系統的模擬事件也就被更新為此時間。OPNET中資料的收集方式是可選的,可以選擇為逐點的,也可以選擇按照漏鬥進行平滑的根據自己的需要而定。
15.OPNet運行時無法進行C代碼編譯的解決辦法
當你出現這種情況時, OPNet總是提示說 comp_msvc 不能執行, 因為Visual C++沒有正確安裝, 這時你需要修改系統的環境變數。具體方法如下(Win2000):
(1). 正確安裝 VC++, 預設目錄為(以下均以預設目錄為例) C:\Program Files\Microsoft Visual Studio
(2). 在案頭滑鼠右擊"我的電腦"表徵圖, 選擇"屬性". 在出現的介面中, 選擇"進階", 然後選擇"環境變數"。
(3). 這裡需要修改使用者的"使用者變數",而不是"系統變數"增加下列參數:
變數名 include
變數值 C:\Program Files\Microsoft Visual Studi0\VC98\atl\include;
C:\Program Files\Microsoft Visual Studio\VC98\mfc\include;
C:\Program Files\Microsoft Visual Studio\VC98\include
變數名 lib
變數值 C:\Program Files\Microsoft Visual Studio\VC98\mfc\lib
C:\Program Files\Microsoft Visual Studio\VC98\lib
變數名 MSDevDir
變數值 C:\Program Files\Microsoft Visual Studio\Common\MSDev98
變數名 path
變數值 C:\Program Files\Microsoft Visual Studio\Common\Tools\WinNT
C:\Program Files\Microsoft Visual Studio\Common\MSDev98\bin
C:\Program Files\Microsoft Visual Studio\Common\Tools \Program Files\
Microsoft Visual Studio\VC98\bin
(4). 按"確定"按鈕, 退出設定.
如果你在安裝 VC 的時候讓安裝程式來修改環境變數就完全可以就避免這些步驟.
16..請問opnet中的移動台的trajectory(即運動軌跡)能否用一個專門的代碼來產生,而不是用滑鼠事先畫出?如何?opnet與此段代碼的互動?
要做到運動軌跡的互動性,你得修改一些process和pipeline。 運動的結果無非是和基站的距離變化,然後利用衰落模型得到snr,ber等參數,所以你可以修改dra_propdel.ps.c, umts_ue_dra_power, umts_dra_snr等process.
如在dra_propdel.ps.c中把start_pro_distance用自己的距離函數代替即可。
17.前面提到的隨機性服從一些隨機分布,如高斯分布、泊松分布等等,我想問一下,opnet 中有沒有現成的機率分布函數供調用?如何調用用op_dist_outcome這一類的函數,在online document中介紹的很詳細。
18.對opnet的認識,它是在project、node以及process三個域上進行模擬,而且好像代 碼都是在process域中的進入、退出以及轉化這些地方編寫,那麼要實現的移動台隨機產生的代碼好像沒有一個公用的全域性的平台可以放置
(就像C語言中的全域變數聲明段)?這個問題如何解決?
函數應該在process的FB中,FSM只是調用而已,全域變數通常在外部.h中,也可在HB中。
19.OPNET 的輸出結果選項“As is”,“Average”,“Time_average”有什麼區別?
在這些選項下得到的曲線不一樣 :
As is ,就是不做任何處理,
Average 就是做平均
Time_average 就是做時間平均
21.OPNET中如何刪除一個senario,而保留工程?
在menu->senarios->manage senarios裡。
22.請問OPNET中的animation指什嗎?
啟用節點變化過程記錄功能,並記錄statistic的變化過程,可以作為動畫示範。
23.opnet的節點域中處理模組之間如何共用變數?
可以試試以下2種方法:
(1).在HB中定義全域變數
(2).添加節點屬性,然後使用op_ima_xxx_xxx()函數,就是那個IMA包。
24.在node interfaces裡面設定屬性為set,promoted和hidden有什麼意義?
hidden可以在模擬的時候看不到設定的這個參數,promoted可以在模擬的過程中根據需要改變參數的值
25.我在學習opnet的tutorial的packet switching1 時最後模擬出現下面的錯誤,請問如何解決?
Creating library PS_pksw_net-scenario1.i0.nt.lib and object PS_pksw_net-io1.i0.nt.exp dpt_propdel.i0.ps.o : error LNK2001: unresolved external symbol _link_de PS_pksw_net-scenario1.i0.nt.so : fatal error LNK1120: 1 unresolved exter
在運行模擬時,選擇declare external file,將link_delay.h檔案包含即可。
26.請問opnet裡如何提取統計資訊作為反饋控制變數?例如將丟失率提取出來後,通過函數將其反饋回模型中進行控制。
可以試試stat_intrpt函數。
27.模型中的資料線中的src stream [n]和dest stream [n]中括弧中的序號n分別表示什麼意思?
op_pk_get(STRM NUM)的參數,會根據n來選擇資料線的。
28.pipeline stage 的函數是怎麼調用的啊?為什麼我的資料在被接收端的時候那幾個pipeline 函數並沒有執行完呢?只執行了3個函數,後面就沒有了,結果資料不知道扔哪去了,上層也沒有stream中斷是怎麼回事呢?
pipeline state 函數體介面是規定的,由KP調用。在stage 2 有連通性的檢查,如果false ,則以後的stage 都不需執行了。
29.仔細察看了一下程式,FIN和FOUT都是配對的。在一個Idle的狀態中,什麼操作也沒做。但是程式執行了好長時間之後,突然告訴說Abnormal function stack function。就是在Idle狀態出的錯。可是哪個狀態根本就是空操作。而在.pr.c檔案中,發現所有的process的.pr.c檔案中的那個最全的函數都是只有FIN,沒有FOUT的。請問出現上述錯誤還有可能是何原因?
查看事件列表,有可能是事件列表滿的緣故,你可以試著改變preference裡面的一個event_speed_parameter參數出現該問題的設定不同,出現的時間也會不同。
30.請問OPNET的背景路由流量的如何配置?
三種方法:
application configi.
conersation pair
link load
31.怎樣在mac層擷取在pipeline stage中計算的某些參數的數值,如接收功率的數值?
可以用pwr = op_td_get_dbl (pkptr, OPC_TDA_RA_RCVD_POWER)。
32.我對某個pipeline 函數做了一點修改然後以另外一個名字另存了一下,但是在模組中卻不能把原來的pipeline函數改成重新命名的
pipeline函數這是怎麼回事啊?你修改後的檔案名稱要與函數名相同,然後得用OPNET內建的EXTERNAL INTERFACE提供的工具編譯就可以了。OPNET與VC調試經驗總結基於Debugging in OPNET withMicrosoft Visual C++ 調試的文檔(資料下載區提供),有一些經驗總結如下:
(1)修改Preference中的環境變數時,/Od與/Zi之間要有空格,另外注意O不是0。
(2)除了修改bind_shobj_flags、comp_flags、comp_flags_cpp外,還要修改bind_static_flags:即後面添加/DEBUG。可以從文檔中的中看出。記著,中間一定要有空格。
(3)如出現上述設定上的問題,可以從編譯結果中查看問題。(建議可以故意在一個process model中加一條語法錯誤的語句,然後編譯看列出的出錯資訊。)
(4)在attach process時,如果看不到任何process,盡量關閉不必要的程式,只留下opnet的project視窗和VC。如果還不行,就要給VC打SP5補丁了。不過有一種更簡單的方法,就是在工作管理員中,在進程中找到op_runsim_de v.exe進程,右鍵,然後調試,即可和VC進行聯調。
(5)修改Simulation model的environment files時,一般不需將Force Compile設為enable,因為調試時一般process model都已編譯好。如果把Force Compile設為enable的話,每次啟動simulation都會把項目中包含的所有的process model重新編譯,會耗很長時間。但是為了保證代碼為最新改寫過得,建議還是enable為好。
(6)如果不想讓debug視窗自動關閉,可以把consle_exit_pause改為TRUE,模擬完後會提示Press <ENTER> to continue.按兩次<ENTER>才會關閉debug視窗。
(7)編譯的時候產生調試資訊的參數是 /Z7 或 /Zi,(注意:/Z8並不是合法的參數)。
調試時還需要關閉編譯器的最佳化功能,所以還要加上/Od。串連的時候需要保留調試資訊,所以在bind_shobj_flags後面要加 /DEBUG。
(8) config simulation裡面的debug,目的是讓op_runsim運行在debug模式下,等效於console下面的 -debug。force_compile的作用是每次編譯時間都重建所有的模組,以使你在VC下面看到的來源程式都是最新的。
(9)在VC調試時,從斷點後開始單步運行,最後總會走到一個向彙編中的機器代碼的地方。odb那邊也不能敲任何命令。這很正常,那個彙編的地方就是OPNET的核心之類的東西。不用管它,在VC裡面再選run就行了。程式會運行到VC的下一個斷點,或者ODB重新可以敲命令了。
(10)最基本的一個問題,在OPNET調試時,報錯:
bind_so_msvc: Unable to execute bind program (Win32 error code: 2)
Check that Visual C++ has been installed correctly, and that its BIN directory is included in the Path environment variable.
那麼可以按照一般的方法來手動添加環境變數,但是就筆者經驗,即使當時通過,之後可能還會出現問題。最徹底的辦法就是VC和OPNET重裝一遍,先安裝VC,安裝時,要選擇註冊環境變數。OPNET也不能偷懶,就一步一步按順序安裝吧。
這些都是筆者和一些使用OPNET的朋友的一些總結,有什麼不足還望大家賜教,互相交流,共同進步!
OPNET通道模型概述
在OPNET模型中,當包被傳送到發送器請求發送後,實際中的情況是包將立即被發送到通訊通道上進行傳輸,因此OPNET必須對通訊通道進行建模,也就是在模型中要實現物理層的特徵,以便將通道對包產生的傳輸效果考慮進整個網路模型。OPNET將通道對包產生的傳輸效果建模為若干個計算階段(稱為pinpeline stage),最終來判斷該包能否被接收到。
Pipeline的典型參數是一個packet指標,也就是說,pipeline是針對每個包來計算它在物理通道上的傳輸效果的。為了承載
pipiline所需或計算的通道參數,每個包都包含著由transmission data attribute(TDA)的一組值構成的儲存區,當包的傳輸效果計算進入某一pipeline stage時,系統核心為TDA分配初始值或者根據計算結果來設定TDA值 。這一組TDA值可以為後續的pipeline stage提供計算的依據。
OPNET將傳輸通道劃分為三種:點對點鏈路(point to point Link),匯流排式鏈路(bus Link)和無線鏈路(radio Link)
。每一種鏈路由若干個標準的,預設的pipeline stage組成。使用者可以對預設的pipeline stage 進行修改以適應使用者所需的通道類型:使用者可以在pipeline裡定義自己的TDA,還可以調用系統核心裡的支援對TDA進行操作的核心過程(KP)來編程實現自己的通道模型。
OPNET中預設的pipeline stage模型檔案尾碼名為.ps.c,經編譯後形成的目標檔案尾碼名為.ps.o。所有的三種通道的預設
pipeline stage 檔案都儲存在<opnet目錄>/<版本目錄>/models/std/links/檔案夾下面。使用者若要自己編寫pipeline stage來代替預設模型,則需先編寫.ps.c尾碼的c或c++檔案,然後編譯形成.ps.o目標檔案。點對點鏈路的pipeline模型由四個預設的pipeline stage組成,具體描述如下:
1) 傳輸時延階段:模型檔案dpt_txdel.ps.c。傳輸時延描述的是第一個位元發送時間到最後一個位元發送時間之間的時間間隔。
計算方法:從包裡讀取傳輸該包的通道的標誌號(ID); 有了通道ID後,即可讀取通道的資料速率; 讀取包的長度;傳輸時延=包長/資料速率; 把計算而得的傳輸時延值寫到包的TDA裡。
2) 傳播時延階段:模型檔案dpt_propdel.ps.c。傳播時延描述的是第一個位元開始發送時間到第一個位元到達時間之間的時間間隔 。計算方法: 從包裡讀取傳輸該包的鏈路標誌號(ID);有了鏈路ID,即可讀取鏈路的"delay"屬性值; 把該傳播時延值寫進包的TDA中;
3) 誤碼數目分配階段:模型檔案dpt_error.ps.c。
計算方法:讀取鏈路的標誌號(ID);讀取鏈路的誤碼率"ber"屬性值,即單個位元可能誤碼的機率;讀取包長;計算"正好發生k個位元誤碼"的機率P(k),那麼可以得到"至多發生k個位元誤碼"的機率P=P(0)+P(1)+……+P(k);產生一個在{0,1}內平均分布的隨機數r;如果隨機數r小於等於"至多發生k個位元誤碼"的機率P,那麼就"認定"k就是這個包在通道上傳輸的誤碼數目;如果r大於P,那麼就將k的值加1,反覆計算以得到演算法能夠接受的誤碼數目;將誤碼數目寫進包的TDA裡。
4) 錯誤修正階段:模型檔案dpt_ecc.ps.c。
計算方法:讀取接收器的標誌號(ID);讀取接收器能糾正的誤碼數目門限值"ecc thr
eshold"屬性值;讀取前面計算的錯誤數目;將錯誤數目與錯誤修正門限"ecc threshold"比較,判決該包是否能被正確接收;將判斷結果寫進包的TDA裡。匯流排鏈路的pipeline模型由六個預設的pipeline stage組成,其中第一個階段針對每個傳輸只計算一次,而後面的五個階段針對各個可能接收到這次傳輸的接收器分別計算一次。
具體描述如下:
1) 傳輸時延階段:模型檔案dbu_txdel.ps.c。
計算方法:與點對點鏈路情況一致。
2) 封閉性計算階段:模型檔案dbu_closure.ps.c。
這個階段的意義在於判斷各個接收器節點是否能夠接收到這次傳輸,即鏈路的封閉性。針對每個接收器都有一個判斷結果。有了這個結果以後系統核心就可以決定是否再為該接收器執行後面的計算進程。這個判斷的好處是提高了模擬效率,因為若已知某接收器不能接收到這次傳輸,就不必為其計算傳播時延,衝突等值,避免了進行不必要的計算。計算方法:預設認為所有bus上的網站都能接收到這次傳輸,因此直接把判斷值寫進包的 TDA裡。
3) 傳播時延階段:模型檔案dbu_propdel.ps.c。
計算方法:讀取鏈路的標誌號(ID);讀取鏈路的單位距離的傳播時延"delay"屬性值。注意在這裡的delay屬性與點對點鏈路的delay屬性意義不一樣。這裡指的是單位距離的傳播時延,而點對點鏈路中的delay直接指的是總傳播時 延。因為點對點只涉及到單條鏈路的傳播時延,而匯流排鏈路要針對不同接收器即不同的傳播距離計算出多個傳播時延;讀取收發器之間的距離間隔;二者乘積值即為傳播時延,將其寫進包的TDA裡。
4) 衝突檢測階段:模型檔案dbu_coll.ps.c。
在某個包的整個接收時間內(第一個位元到達時間到最後一個位元到達時間之間的時間間隔),可能會發生多次傳輸事件,於是對於該包來說,可能要遭遇多次衝突事件。在OPNET中,每當發生一次衝突事件,就調用本pipeline stage一次,以記錄這次衝突事件。
這個pipeline stage對每個包傳輸不是總要調用,它只是在發生衝突時調用,而是否發生衝突是由系統核心來判別的。這個計算進程區別於其他的pipeline stage,有兩個包指標參數:第一個是先到的分組,第二個是後到的分組(就是觸發衝突事件的那一個)。
計算方法:如果前一個包剛好在後一個包開始傳輸時結束了接收,則不考慮為一次衝突。因此讀取前一個包的結束時間,將其與當前模擬時間進行比較。如果相等或小於則不認為衝突。如果大於,則將前後兩個包的記錄衝突次數TDA都加一。
5) 誤碼數目分配階段:模型檔案dbu_error.ps.c。
計算方法:與點對點鏈路的計算方法一致,根據誤碼率計算誤碼數目。
6) 錯誤修正階段:模型檔案dbu_ecc.ps.c。
包能被正確接收的判斷標準與點對點鏈路稍有不同。首先是要求包未經衝突,然後將誤碼數目與錯誤修正門限比較判斷可正確接收與否。
計算方法:讀取包的衝突數目;如果衝突數目不為0或節點被disabled,則直接判斷為不能正確接收;將誤碼數目與錯誤修正門限比較以決定能否正確接收,將判斷結果寫進包的TDA裡。具體步驟與點對點鏈路一致。
關於application模組的一些心得在這裡把自己看application模組的一些筆記整理一下貼出來,和大家一起交流。
說到application模組,首先得先說說application configure和profile configure。在online document中有著詳細的介紹(Main Menu中的Models->Model descriptions->Methodologies & Case Studier->Configuring Application and Profiels)。
這裡簡單說一說:profile用來描述使用者的行為的:使用者使用什麼類型的應用,什麼時候使用這樣應用,使用多久?
application具體描述應用的動作,比如說http應用,就規定每次取得頁面的大小和時間 間隔。一個profile可以包含多個application。
自己實際操作中碰到的錯誤提示及解決方案:
一.第一個提示
oms_string_support.ex.tmp.c
C:\Users\chenshengli\op_admin\tmp\oms_string_support.ex.tmp.c : fatal error C1074: “IDB”是 PDB 檔案 的非法擴充
解決的方法是:進入到安裝目錄下的modeler.exe,將相容性取消,然後以管理員身份運行。上面的問題就能解決了。(以後每次運行OPNET Modeler都要用管理員身份進行運行)
二.解決好第一個提示後出現的第二個提示
cannot open include file‘windef.h’:no such file or directory
解決方案:在安裝VS的盤裡搜尋windef.h檔案,然後將所在檔案夾路徑複製添加到右鍵我的電腦 屬性 進階 環境變數 PATH和INCLUDE下面
三.接下來出現的錯誤是無法開啟檔案“kernel32.lib”
解決方案是:在環境變數中對lib進行編輯
D:\Program Files\Microsoft Visual Studio 9.0\VC\lib;D:\Program Files\OPNET\14.5.A\sys\lib;D:\Program Files\OPNET\14.5.A\sys\pc_intel_win32\lib;C:\Program Files\Microsoft SDKs\Windows\v6.0A\Lib
四.錯誤提示是缺失MSVCR90.DLL
解決方案是從網上下載一個MSVCR90.DLL,放到 \System32下
五.出現的錯誤是runtime error (R6034)
解決方案是:我的是Visual Studio 2008,複製opnet_dir>\sys\pc_intel_win32\bin\manifest_NET2008目錄下檔案(有5個)到<opnet_dir>\sys\pc_intel_win32\bin,然後把windows SDK下的bin中的mt.exe檔案拷貝到OPNET的bin檔案夾下,從開始菜單中運行cmd輸入以下命令:
Mt.exe –manifest op_runsim.exe.manifest –outputresource:op_runsim.exe;1斷行符號沒有出現錯誤(Fail)才算通過。
OPNET 安裝運行問題總結