OPNET學(xué)習(xí)手冊(cè)經(jīng)驗(yàn)本_第1頁(yè)
OPNET學(xué)習(xí)手冊(cè)經(jīng)驗(yàn)本_第2頁(yè)
OPNET學(xué)習(xí)手冊(cè)經(jīng)驗(yàn)本_第3頁(yè)
OPNET學(xué)習(xí)手冊(cè)經(jīng)驗(yàn)本_第4頁(yè)
OPNET學(xué)習(xí)手冊(cè)經(jīng)驗(yàn)本_第5頁(yè)
已閱讀5頁(yè),還剩11頁(yè)未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

OPNET初學(xué)者建議

1、學(xué)習(xí)不要指望看中文資料,首先要認(rèn)真的學(xué)習(xí)英文的OPNET幫助里面的GeneralTutorials。(以O(shè)PNET

10.0.A為例)必須邊看邊做!Tutorials里面的3部分,BasicLessons的前5節(jié)必須做,ModelerLessons的前4節(jié)必須做,第3部分可以先不作,以上各小節(jié),邊做邊歸納,可以保證大家對(duì)OPNET整個(gè)建模的了解。

2、現(xiàn)在開(kāi)始練兵了,不要指望馬上進(jìn)入你要做的模型,也不要太急,盲目的在原來(lái)庫(kù)的模型上修改。個(gè)人建議,不管你做有線還是無(wú)線的研究,那么請(qǐng)你先把自帶的ethcoax_net這個(gè)模型認(rèn)真看懂,因?yàn)樗脑肀容^簡(jiǎn)單??梢哉f(shuō)不了解協(xié)議就去搭建模型是極為錯(cuò)誤和危險(xiǎn)的,所以先把802.3的協(xié)議看懂(基本上每本網(wǎng)絡(luò)書(shū)上都有),然后認(rèn)真學(xué)習(xí)ethcoax_net這個(gè)模型,基本做到每句話干什么。任何不懂的請(qǐng)你在英文幫助里面找,幫助的索引做的非常好,每個(gè)語(yǔ)句也有詳細(xì)說(shuō)明。

3、因?yàn)楝F(xiàn)在已經(jīng)有兩本OPNET的書(shū)了,大家可以買(mǎi)來(lái)看看。會(huì)有幫助的,其實(shí)這個(gè)論壇上的很多問(wèn)題,大家完成了前兩步,再找找書(shū)看都可以解決。

4、做自己的模型。邁出這一步是有一定難度的,值得提醒大家的是先把你要做的協(xié)議、流程完全搞清楚再下手。復(fù)雜的系統(tǒng)需要走軟件工程設(shè)計(jì)的步驟,工具總是工具,它不是最重要的。自己的模型在做的過(guò)程中遇到問(wèn)題,最好的老師是OPNET里面自帶的庫(kù)模型,比如無(wú)線部分,WLAN模塊里面有很多可以借鑒的地方,等等。(不過(guò)WLAN模型確實(shí)寫(xiě)的不怎么樣,但OPNET代碼的某些設(shè)計(jì)對(duì)我們編程值得借鑒,呵呵)請(qǐng)記住,庫(kù)帶的模型是最好的老師!

第一,要想了解OPNET,OPNET幫助文檔第一部分是非常、非常、非常重要的,包括OPNET離散事件仿真的概念、通信的機(jī)理等等,是OPNET的基礎(chǔ)中的基礎(chǔ),對(duì)于理解OPNET是必不可少的。第一次看可能會(huì)有很多不懂的地方,不過(guò)OPNET用多了,自然就理解了。

第二,要想熟練掌握OPNET,能夠用OPNET建模,那么必須熟練掌握C/C++語(yǔ)言,積累一定的編程、調(diào)試經(jīng)驗(yàn)以及閱讀分析源代碼的能力。用VC的話,MSDN是必備的(譚浩強(qiáng)的書(shū)都可以丟了,基本上算是垃圾)。

第三,要想精通OPNET,能夠靈活自如地應(yīng)用OPNET,還需要熟悉OPNET的各部件、各功能,包括ACE、FlowAnalysis、TerranModeling、NetDoctor、HLA等等一系列工具/接口OPNET調(diào)試經(jīng)驗(yàn)總結(jié)基于DebugginginOPNETwithMicrosoftVisualC++調(diào)試的文檔(資料下載區(qū)提供),有一些經(jīng)驗(yàn)總結(jié)如下:

(1)修改Preference中的環(huán)境變量時(shí),/Od與/Zi之間要有空格,另外注意O不是0。

(2)除了修改bind_shobj_flags、comp_flags、comp_flags_cpp外,還要修改bind_static_flags:即后面添加/DEBUG??梢詮奈臋n中的示意圖中看出。記著,中間一定要有空格。

(3)如出現(xiàn)上述設(shè)置上的問(wèn)題,可以從編譯結(jié)果中查看問(wèn)題。(建議可以故意在一個(gè)processmodel中加一條語(yǔ)法錯(cuò)誤的語(yǔ)句,然后編譯看列出的出錯(cuò)信息。)

(4)在attachprocess時(shí),如果看不到任何process,盡量關(guān)閉不必要的程序,只留下opnet的project窗口和VC。如果還不行,就要給VC打SP5補(bǔ)丁了。不過(guò)有一種更簡(jiǎn)單的方法,就是在任務(wù)管理器中,在進(jìn)程中找到op_runsim_dev.exe進(jìn)程,右鍵,然后調(diào)試,即可和VC進(jìn)行聯(lián)調(diào)。

(5)修改Simulationmodel的environmentfiles時(shí),一般不需將ForceCompile設(shè)為enable,因?yàn)檎{(diào)試時(shí)一般processmodel都已編譯好。如果把ForceCompile設(shè)為enable的話,每次啟動(dòng)simulation都會(huì)把項(xiàng)目中包含的所有的processmodel重新編譯,會(huì)耗很長(zhǎng)時(shí)間。但是為了保證代碼為最新改寫(xiě)過(guò)得,建議還是enable為好。

(6)如果不想讓debug窗口自動(dòng)關(guān)閉,可以把consle_exit_pause改為T(mén)RUE,仿真完后會(huì)提示Press<ENTER>tocontinue.按兩次<ENTER>才會(huì)關(guān)閉debug窗口。

(7)編譯的時(shí)候產(chǎn)生調(diào)試信息的參數(shù)是/Z7或/Zi,(注意:/Z8并不是合法的參數(shù))。調(diào)試時(shí)還需要關(guān)閉編譯器的優(yōu)化功能,所以還要加上/Od。連接的時(shí)候需要保留調(diào)試信息,所以在bind_shobj_flags后面要加上/DEBUG。

(8)configsimulation里面的debug,目的是讓op_runsim運(yùn)行在debug模式下,等效于console下面的-debug。force_compile的作用是每次編譯時(shí)都重建所有的模塊,以使你在VC下面看到的源程序都是最新的。

(9)在VC調(diào)試時(shí),從斷點(diǎn)后開(kāi)始單步運(yùn)行,最后總會(huì)走到一個(gè)向匯編中的機(jī)器代碼的地方。odb那邊也不能敲任何命令。這很正常,那個(gè)匯編的地方就是OPNET的內(nèi)核之類的東西。不用管它,在VC里面再選run就行了。程序會(huì)運(yùn)行到VC的下一個(gè)斷點(diǎn),或者ODB重新可以敲命令了。

(10)最基本的一個(gè)問(wèn)題,在OPNET調(diào)試時(shí),報(bào)錯(cuò):

bind_so_msvc:Unabletoexecutebindprogram(Win32errorcode:2)

CheckthatVisualC++hasbeeninstalledcorrectly,andthat

itsBINdirectoryisincludedinthePathenvironmentvariable.

那么可以按照一般的方法來(lái)手動(dòng)添加環(huán)境變量,但是就筆者經(jīng)驗(yàn),即使當(dāng)時(shí)通過(guò),之后可能還會(huì)出現(xiàn)問(wèn)題。最徹底的辦法就是VC和OPNET重裝一遍,先安裝VC,安裝時(shí),要選擇注冊(cè)環(huán)境變量。OPNET也不能偷懶,就一步一步按順序安裝吧OPNET常見(jiàn)問(wèn)題1.如何設(shè)置全局變量?

在.h文件里定義變量,然后在process的HEADBLOCK里include

這個(gè)頭文件,就可以使用全局變量了。

2.OPNET中如何更方便的看程序?

1.opnet中的設(shè):

preferences->editor_prog

2.sourceinsight的設(shè)置

operation->preferences->symbolLookups->Projectsymbolpath->AddProjectto

Path

(添加自己創(chuàng)建一個(gè)包含所有opnetmodel和include目錄的project)

當(dāng)然,這個(gè)有些不足,就是那個(gè)sv,tv,hb等中定義的內(nèi)容,不能進(jìn)行關(guān)聯(lián)。

3.OPNET中的函數(shù)FIN,F(xiàn)RET以及FOUT都是什么功能?

為了使一個(gè)用戶定義的函數(shù)被執(zhí)行,該函數(shù)必須與一個(gè)特殊的堆棧跟蹤代碼相連。堆

棧跟蹤技術(shù)靠在函數(shù)的入口點(diǎn)和出口點(diǎn)插入預(yù)處理器宏

指令完成(一個(gè)函數(shù)只有一個(gè)入口點(diǎn),但可以有多個(gè)出口點(diǎn)(由C語(yǔ)言的return聲明決定

))。這些宏指令為:FIN、FOUT和FRET。FIN被插入到

函數(shù)的入口點(diǎn),F(xiàn)OUT被插入到函數(shù)的出口點(diǎn),但卻不返回任何值,F(xiàn)RET被插入到函數(shù)的

出口點(diǎn),返回一個(gè)值。注意這些宏指令不需要以分號(hào)結(jié)

束(它們自我包含),F(xiàn)IN的參數(shù)中也不需要雙引號(hào)。

Opnet提供的所有的示例模型都包含了這些宏指令,并且建議用戶定義的函數(shù)也包含這

些宏指令。如果FIN、FOUT、和FRET被正確插入了用戶

代碼中,我們就可以使用op_vuerr來(lái)找出程序錯(cuò)誤的位置,哪怕是在一個(gè)嵌套的模型函

數(shù)調(diào)用中。

4.localstatistics和globalstatistics的區(qū)別?

localstatistics表示的是本地的統(tǒng)計(jì)量,而globalstatistics是全局的統(tǒng)計(jì)量,

比如你做了一個(gè)節(jié)點(diǎn)模型,此節(jié)點(diǎn)發(fā)送數(shù)據(jù)包,然后編程把發(fā)送的數(shù)據(jù)包數(shù)分別寫(xiě)入

一個(gè)localstatistics和globalstatistics中,假如你在工程中用到了兩個(gè)這樣的

節(jié)點(diǎn),那么你可以分別viewresult每一個(gè)節(jié)點(diǎn)發(fā)送的數(shù)據(jù)包數(shù),而globalstatistics

則是這兩個(gè)節(jié)點(diǎn)一共發(fā)送的數(shù)據(jù)包數(shù)。

5.Objid和userid的區(qū)別?

Objid是系統(tǒng)分配的,全局唯一,整數(shù)。userid是自己可以設(shè)置的,可以不唯一。

6.如何將模塊添加到OPNET中?

edit->preferences->mod_dirs添加模塊路徑即可。

7.為什么每次新建一個(gè)project都給我保存在c:\op_models目錄下,我想換一個(gè)地

方,怎么設(shè)置?

edit->preferences->mod_dirs中,新建一個(gè)路徑,并作為第一路徑即可。

8.想查找一個(gè)變量的使用場(chǎng)合,包括不同process,不同node中的header和funtion,如

何做?

在OPNET中變量是在一個(gè)PROCESS中存在的。不同的PROCESS之間則是通過(guò)進(jìn)程之間的通信

機(jī)制來(lái)共享信息的。因此你查找變量的作用范圍應(yīng)該是

在一個(gè)PROCESS內(nèi)的。編譯后每個(gè)PROCESS會(huì)產(chǎn)生一個(gè)C或C++文件。在那個(gè)文件里就可以

查到變量的應(yīng)用地方。不同的進(jìn)程可能具有相同的

ATTRIBUTE.而為了減少NODE的ATTRIBUTE數(shù)目可以采用MERGE/RENAMEATTRIBUTE的方式

。這時(shí)這些ATTRIBUTE具體對(duì)應(yīng)到各個(gè)PROCESS的哪個(gè)

ATTRIBUTE可以通過(guò)NODEINTERFACE菜單下的MERGE/RENAMEATTRIBUTE找到。

9.請(qǐng)問(wèn)OPNET怎樣將圖導(dǎo)出來(lái)?

一:可以從Topology->ExportTopology->……導(dǎo)出Project的幾種圖形,有bitmap,ht

ml等格式。node,process都可以從file中的Export

Bitmap導(dǎo)出拓?fù)鋱D。

二:對(duì)于分析出來(lái)的曲線,按鼠標(biāo)右鍵,其中有個(gè)ExportGraphDatatoSpreadshee

t,然后會(huì)有提示說(shuō)你文件保存在什么地方,一般缺省

是保存在c:\op_admin\tmp目錄下。文件你可以用UltraEdit打開(kāi)來(lái)看,是兩列數(shù)據(jù)

,一列是仿真時(shí)間,一列是仿真數(shù)據(jù),然后你就可以想

用什么工具畫(huà)圖就無(wú)所謂了。

補(bǔ)充:其實(shí)很好用的還有就是直接抓圖,效果不錯(cuò)。

9.請(qǐng)問(wèn)OPNET怎樣將圖導(dǎo)出來(lái)?

一:可以從Topology->ExportTopology->……導(dǎo)出Project的幾種圖形,有bitmap,ht

ml等格式。node,process都可以從file中的Export

Bitmap導(dǎo)出拓?fù)鋱D。

二:對(duì)于分析出來(lái)的曲線,按鼠標(biāo)右鍵,其中有個(gè)ExportGraphDatatoSpreadshee

t,然后會(huì)有提示說(shuō)你文件保存在什么地方,一般缺省

是保存在c:\op_admin\tmp目錄下。文件你可以用UltraEdit打開(kāi)來(lái)看,是兩列數(shù)據(jù)

,一列是仿真時(shí)間,一列是仿真數(shù)據(jù),然后你就可以想

用什么工具畫(huà)圖就無(wú)所謂了。

補(bǔ)充:其實(shí)很好用的還有就是直接抓圖,效果不錯(cuò)。

10.在opnet中關(guān)于時(shí)延的問(wèn)題。

數(shù)據(jù)速率是用來(lái)和包長(zhǎng)結(jié)合計(jì)算傳輸時(shí)延的,而“delay”屬性是用來(lái)描述電波的傳播時(shí)

延的。在點(diǎn)到點(diǎn)鏈路屬性里,“delay”就是總傳播時(shí)

延;在多點(diǎn)鏈路里,“delay”指單位距離的傳播時(shí)延。用戶可以修改傳播時(shí)延的計(jì)算

方法,那個(gè)“DistanceRelated”就是表示在自定義的

傳播時(shí)延pipelinestage里基于距離計(jì)算傳播時(shí)延。

11..在opnet中關(guān)于統(tǒng)計(jì)一些速率方面的參數(shù)。

統(tǒng)計(jì)流速率的時(shí)候,首先應(yīng)該在LocalStatistics中將這個(gè)統(tǒng)計(jì)項(xiàng)的CaptureMode設(shè)成

sum/time,然后在程序中每次收到一個(gè)數(shù)據(jù)包,就將

這個(gè)包的長(zhǎng)度L寫(xiě)入,比如op_stat_write(handle,L),隨后再馬上調(diào)用一個(gè)op_stat_wr

ite(handle,0)來(lái)結(jié)束這次寫(xiě)入,就可以了。

12.關(guān)于beginintrpt和endsimintrpt

仿真0時(shí)刻時(shí)需要進(jìn)行的初始化,則需要設(shè)beginintrpt,仿真結(jié)束時(shí)刻需要進(jìn)行一些工

組,則需要enableendsimintrpt

13.用VC調(diào)試的時(shí)候,statevariable的值無(wú)法看到,怎么辦?

用op_sv_ptr這個(gè)指針。它指向了所有的狀態(tài)變量。

14.關(guān)于ElapsedtimeandSimulationtime?

一個(gè)是仿真程序運(yùn)行的時(shí)間,反映仿真程序執(zhí)行的速度。而另一個(gè)是所仿真的系統(tǒng)的時(shí)

間進(jìn)度,反映當(dāng)前的仿真執(zhí)行的進(jìn)度。

仿真時(shí)間的修改是通過(guò)事件的發(fā)生來(lái)進(jìn)行的。譬如說(shuō)你在0s時(shí)作一件事持續(xù)時(shí)間為5秒,

5秒鐘結(jié)束后會(huì)觸發(fā)一個(gè)事件,這個(gè)事件將系統(tǒng)的仿真

時(shí)間改為5s。你使用OPNET的模型,它在接收到事件時(shí)會(huì)進(jìn)行相應(yīng)的仿真時(shí)間的更新。而

你自己也可根據(jù)需要更新仿真時(shí)間。你采用

op_intrpt_schedule_self(op_sim_time()+需要的時(shí)間,intrptcode),就可以在當(dāng)前時(shí)

刻的所需的時(shí)間以后產(chǎn)生一個(gè)中斷,從而觸發(fā)一個(gè)事件

,系統(tǒng)的仿真事件也就被更新為此時(shí)間。OPNET中數(shù)據(jù)的收集方式是可選的,可以選擇為

逐點(diǎn)的,也可以選擇按照漏斗進(jìn)行平滑的根據(jù)自己的需

要而定。

15.OPNet運(yùn)行時(shí)無(wú)法進(jìn)行C代碼編譯的解決辦法

當(dāng)你出現(xiàn)這種情況時(shí),OPNet總是提示說(shuō)comp_msvc不能執(zhí)行,因?yàn)閂isualC++沒(méi)有正

確安裝,這時(shí)你需要修改系統(tǒng)的環(huán)境變量。具體方法如

下(Win2000):

1.正確安裝VC++,缺省目錄為(以下均以缺省目錄為例)

C:\ProgramFiles\Mic

rosoftVisualStudio

2.在桌面鼠標(biāo)右擊"我的電腦"圖標(biāo),選擇"屬性".在出現(xiàn)的界面中,選擇"高級(jí)",然

后選擇"環(huán)境變量"。

3.這里需要修改用戶的"用戶變量",而不是"系統(tǒng)變量"增加下列參數(shù):

變量名include

變量值C:\ProgramFiles\MicrosoftVisualStudi0\VC98\atl\include;

C:\ProgramFiles\MicrosoftVisualStudio\VC98\mfc\include;

C:\ProgramFiles\MicrosoftVisualStudio\VC98\include

變量名lib

變量值C:\ProgramFiles\MicrosoftVisualStudio\VC98\mfc\lib

C:\ProgramFiles\MicrosoftVisualStudio\VC98\lib

變量名MSDevDir

變量值C:\ProgramFiles\MicrosoftVisualStudio\Common\MSDev98

變量名path

變量值C:\ProgramFiles\MicrosoftVisualStudio\Common\Tools\WinNT

C:\ProgramFiles\MicrosoftVisualStudio\Common\MSDev98\bin

C:\ProgramFiles\MicrosoftVisualStudio\Common\Tools\ProgramFiles\

MicrosoftVisualStudio\VC98\bin

4.

按"確定"按鈕,退出設(shè)置.

如果你在安裝VC的時(shí)候讓安裝程序來(lái)修改環(huán)境變量就完全可以就避免這些步驟.

16..請(qǐng)問(wèn)opnet中的移動(dòng)臺(tái)的trajectory(即運(yùn)動(dòng)軌跡)能否用一個(gè)專門(mén)的代碼來(lái)生成

,而不是用鼠標(biāo)事先畫(huà)出?如何實(shí)現(xiàn)opnet與此段代碼的

交互?

要做到運(yùn)動(dòng)軌跡的交互性,你得修改一些process和pipeline。運(yùn)動(dòng)的結(jié)果無(wú)非是和基

站的距離變化,然后利用衰落模型得到snr,ber等參數(shù)

,所以你可以修改dra_propdel.ps.c,umts_ue_dra_power,umts_dra_snr等process.

如在dra_propdel.ps.c中把start_pro_distance用自己

的距離函數(shù)代替即可。

17.前面提到的隨機(jī)性服從一些隨機(jī)分布,如高斯分布、泊松分布等等,我想問(wèn)一下,

opnet中有沒(méi)有現(xiàn)成的概率分布函數(shù)供調(diào)用?如何調(diào)用

?

用op_dist_outcome這一類的函數(shù),在onlinedocument中介紹的很詳細(xì)。

18.對(duì)opnet的認(rèn)識(shí),它是在project、node以及process三個(gè)域上進(jìn)行仿真,而且好像代

碼都是在process域中的進(jìn)入、退出以及轉(zhuǎn)化這些地方

編寫(xiě),那么要實(shí)現(xiàn)的移動(dòng)臺(tái)隨機(jī)產(chǎn)生的代碼好像沒(méi)有一個(gè)公共的全局性的平臺(tái)可以放置

(就像C語(yǔ)言中的全局變量聲明段)?這個(gè)問(wèn)題如何解決

函數(shù)應(yīng)該在process的FB中,F(xiàn)SM只是調(diào)用而已,全局變量通常在外部.h中,也可在HB中

。

19.OPNET的輸出結(jié)果選項(xiàng)“Asis”,“Average”,“Time_average”有什么區(qū)別?

在這些選項(xiàng)下得到的曲線不一樣:

Asis,就是不做任何處理,

Average就是做平均

Time_average就是做時(shí)間平均

20.請(qǐng)問(wèn)OPNET中的animation指什么?

激活節(jié)點(diǎn)變化過(guò)程記錄功能并記錄statistic的變化過(guò)程。

21.OPNET中如何刪除一個(gè)senario,而保留工程?

在menu->senarios->managesenarios里。

22.請(qǐng)問(wèn)OPNET中的animation指什么?

激活節(jié)點(diǎn)變化過(guò)程記錄功能,并記錄statistic的變化過(guò)程,可以作為動(dòng)畫(huà)演示。

23.opnet的節(jié)點(diǎn)域中處理模塊之間如何共享變量?

可以試試以下2種方法:

1。在HB中定義全局變量

2。添加節(jié)點(diǎn)屬性,然后使用op_ima_xxx_xxx()函數(shù),就是那個(gè)IMA包。

24.在nodeinterfaces里面設(shè)置屬性為set,promoted和hidden有什么意義?

hidden可以在仿真的時(shí)候看不到設(shè)置的這個(gè)參數(shù),promoted可以在仿真的過(guò)程中根據(jù)需

要改變參數(shù)的值

25.我在學(xué)習(xí)opnet的tutorial的packetswitching1時(shí)最后仿真出現(xiàn)下面的錯(cuò)誤,請(qǐng)問(wèn)

如何解決?

CreatinglibraryPS_pksw_net-scenario1.i0.nt.libandobjectPS_pksw_net-

io1.i0.nt.exp

dpt_propdel.i0.ps.o:errorLNK2001:unresolvedexternalsymbol_link_de

PS_pksw_net-scenario1.i0.nt.so:fatalerrorLNK1120:1unresolvedexter

在運(yùn)行仿真時(shí),選擇declareexternal

file,將link_delay.h文件包含即可。

26.請(qǐng)問(wèn)opnet里如何提取統(tǒng)計(jì)信息作為反饋控制變量?例如將丟失率提取出來(lái)后,通過(guò)

函數(shù)將其反饋回模型中進(jìn)行控制。

可以試試stat_intrpt函數(shù)。

27.模型中的數(shù)據(jù)線中的srcstream[n]和deststream[n]中括號(hào)中的序號(hào)n分別表示

什么意思?

op_pk_get(STRMNUM)的參數(shù),會(huì)根據(jù)n來(lái)選擇數(shù)據(jù)線的。

28.pipelinestage的函數(shù)是怎么調(diào)用的???為什么我的數(shù)據(jù)在被接收端的時(shí)候那幾個(gè)

pipeline函數(shù)并沒(méi)有執(zhí)行完呢?只執(zhí)行了3個(gè)函數(shù),后

面就沒(méi)有了,結(jié)果數(shù)據(jù)不知道扔哪去了,上層也沒(méi)有stream中斷是怎么回事呢?

pipelinestate函數(shù)體接口是規(guī)定的,由KP調(diào)用。在stage2有連通性的檢查,如果f

alse,則以后的stage都不需執(zhí)行了。

29.仔細(xì)察看了一下程序,F(xiàn)IN和FOUT都是配對(duì)的。在一個(gè)Idle的狀態(tài)中,什么操作也沒(méi)

做。但是程序執(zhí)行了好長(zhǎng)時(shí)間之后,突然告訴說(shuō)

Abnormalfunctionstackfunction。就是在Idle狀態(tài)出的錯(cuò)??墒悄膫€(gè)狀態(tài)根本就是

空操作。而在.pr.c文件中,發(fā)現(xiàn)所有的process的.pr.c

文件中的那個(gè)最全的函數(shù)都是只有FIN,沒(méi)有FOUT的。請(qǐng)問(wèn)出現(xiàn)上述錯(cuò)誤還有可能是何原

因?

查看事件列表,有可能是事件列表滿的緣故,你可以試著改變preference里面的一個(gè)event_speed_parameter參數(shù)出現(xiàn)該問(wèn)題的設(shè)置不同,出現(xiàn)

的時(shí)間也會(huì)不同。

30.請(qǐng)問(wèn)OPNET的背景路由流量的如何配置?

三種方法:

applicationconfigi.

conersationpair

linkload

31.怎樣在mac層獲取在pipelinestage中計(jì)算的某些參數(shù)的數(shù)值,如接收功率的數(shù)值?

可以用pwr=op_td_get_dbl(pkptr,OPC_TDA_RA_RCVD_POWER)。

32.我對(duì)某個(gè)pipeline函數(shù)做了一點(diǎn)修改然后以另外一個(gè)名字另存了一下,但是在模塊

中卻不能把原來(lái)的pipeline函數(shù)改成重新命名的

pipeline函數(shù)這是怎么回事???

你修改后的文件名要與函數(shù)名相同,然后得用OPNET自帶的EXTERNALINTERFACE提供的工

具編譯就可以了。OPNET與VC調(diào)試經(jīng)驗(yàn)總結(jié)

基于DebugginginOPNETwithMicrosoftVisualC++調(diào)試的文檔(資料下載區(qū)提供)

,有一些經(jīng)驗(yàn)總結(jié)如下:

(1)修改Preference中的環(huán)境變量時(shí),/Od與/Zi之間要有空格,另外注意O不是0。

(2)除了修改bind_shobj_flags、comp_flags、comp_flags_cpp外,還要修改bind_static_flags:即后面添加/DEBUG??梢詮奈臋n中的示意

圖中看出。記著,中間一定要有空格。

(3)如出現(xiàn)上述設(shè)置上的問(wèn)題,可以從編譯結(jié)果中查看問(wèn)題。(建議可以故意在一個(gè)p

rocessmodel中加一條語(yǔ)法錯(cuò)誤的語(yǔ)句,然后編譯看列

出的出錯(cuò)信息。)

(4)在attachprocess時(shí),如果看不到任何process,盡量關(guān)閉不必要的程序,只留下

opnet的project窗口和VC。如果還不行,就要給VC打SP5

補(bǔ)丁了。不過(guò)有一種更簡(jiǎn)單的方法,就是在任務(wù)管理器中,在進(jìn)程中找到op_runsim_de

v.exe進(jìn)程,右鍵,然后調(diào)試,即可和VC進(jìn)行聯(lián)調(diào)。

(5)修改Simulationmodel的environmentfiles時(shí),一般不需將ForceCompile設(shè)為e

nable,因?yàn)檎{(diào)試時(shí)一般processmodel都已編譯好。如

果把ForceCompile設(shè)為enable的話,每次啟動(dòng)simulation都會(huì)把項(xiàng)目中包含的所有的p

rocessmodel重新編譯,會(huì)耗很長(zhǎng)時(shí)間。但是為了保證

代碼為最新改寫(xiě)過(guò)得,建議還是enable為好。

(6)如果不想讓debug窗口自動(dòng)關(guān)閉,可以把consle_exit_pause改為T(mén)RUE,仿真完后會(huì)

提示Press<ENTER>tocontinue.按兩次<ENTER>才會(huì)

關(guān)閉debug窗口。

(7)編譯的時(shí)候產(chǎn)生調(diào)試信息的參數(shù)是/Z7或/Zi,(注意:/Z8并不是合法的參數(shù))。

調(diào)試時(shí)還需要關(guān)閉編譯器的優(yōu)化功能,所以還要加

上/Od。連接的時(shí)候需要保留調(diào)試信息,所以在bind_shobj_flags后面要加上/DEBUG。

(8)configsimulation里面的debug,目的是讓op_runsim運(yùn)行在debug模式下,等效

于console下面的-debug。force_compile的作用是每次

編譯時(shí)都重建所有的模塊,以使你在VC下面看到的源程序都是最新的。

(9)在VC調(diào)試時(shí),從斷點(diǎn)后開(kāi)始單步運(yùn)行,最后總會(huì)走到一個(gè)向匯編中的機(jī)器代碼的地

方。odb那邊也不能敲任何命令。這很正常,那個(gè)匯編

的地方就是OPNET的內(nèi)核之類的東西。不用管它,在VC里面再選Go(F5)就行了。程序會(huì)運(yùn)行到VC的下一個(gè)斷點(diǎn),或者ODB重新可以敲命令了。

(10)最基本的一個(gè)問(wèn)題,在OPNET調(diào)試時(shí),報(bào)錯(cuò):

bind_so_msvc:Unabletoexecutebindprogram(Win32errorcode:2)

CheckthatVisualC++hasbeeninstalledcorrectly,andthat

itsBINdirectoryisincludedinthePathenvironmentvariable.

那么可以按照一般的方法來(lái)手動(dòng)添加環(huán)境變量,但是就筆者經(jīng)驗(yàn),即使當(dāng)時(shí)通過(guò),之后

可能還會(huì)出現(xiàn)問(wèn)題。最徹底的辦法就是VC和OPNET重裝一

遍,先安裝VC,安裝時(shí),要選擇注冊(cè)環(huán)境變量。OPNET也不能偷懶,就一步一步按順序安

裝吧。(11)

這些都是筆者和一些使用OPNET的朋友的一些總結(jié),有什么不足還望大家賜教,互相交流,共同進(jìn)步!

OPNET信道模型概述

在OPNET模型中,當(dāng)包被傳送到發(fā)送器請(qǐng)求發(fā)送后,實(shí)際中的情況是包將立

即被發(fā)送到通信信道上進(jìn)行傳輸,因此OPNET必須對(duì)通信

信道進(jìn)行建模,也就是在模型中要實(shí)現(xiàn)物理層的特征,以便將信道對(duì)包產(chǎn)生的傳輸效果

考慮進(jìn)整個(gè)網(wǎng)絡(luò)模型。OPNET將信道對(duì)包產(chǎn)生的傳輸效果

建模為若干個(gè)計(jì)算階段(稱為pinpelinestage),最終來(lái)判斷該包能否被接收到。

Pipeline的典型參數(shù)是一個(gè)packet指針,也就是說(shuō),pipeline是針對(duì)每

個(gè)包來(lái)計(jì)算它在物理信道上的傳輸效果的。為了承載

pipiline所需或計(jì)算的信道參數(shù),每個(gè)包都包含著由transmissiondataattribute(T

DA)的一組值構(gòu)成的存儲(chǔ)區(qū),當(dāng)包的傳輸效果計(jì)算進(jìn)入某

一pipelinestage時(shí),系統(tǒng)內(nèi)核為T(mén)DA分配初始值或者根據(jù)計(jì)算結(jié)果來(lái)設(shè)置TDA值。這一

組TDA值可以為后續(xù)的pipelinestage提供計(jì)算的依據(jù)

。

OPNET將傳輸信道劃分為三種:點(diǎn)對(duì)點(diǎn)鏈路(pointtopointLink),

總線式鏈路(busLink)和無(wú)線鏈路(radioLink)

。每一種鏈路由若干個(gè)標(biāo)準(zhǔn)的,缺省的pipelinestage組成。用戶可以對(duì)缺省的pipeli

nestage進(jìn)行修改以適應(yīng)用戶所需的信道類型:用戶可

以在pipeline里定義自己的TDA,還可以調(diào)用系統(tǒng)內(nèi)核里的支持對(duì)TDA進(jìn)行操作的內(nèi)核過(guò)

程(KP)來(lái)編程實(shí)現(xiàn)自己的信道模型。

OPNET中缺省的pipelinestage模型文件后綴名為.ps.c,經(jīng)編譯后形成的

目標(biāo)文件后綴名為.ps.o。所有的三種信道的缺省

pipelinestage文件都存儲(chǔ)在<opnet目錄>/<版本目錄>/models/std/links/文件夾下面

。用戶若要自己編寫(xiě)pipelinestage來(lái)代替缺省模型

,則需先編寫(xiě).ps.c后綴的c或c++文件,然后編譯形成.ps.o目標(biāo)文件。

點(diǎn)對(duì)點(diǎn)鏈路的pipeline模型

由四個(gè)缺省的pipelinestage組成,具體描述如下:

1)傳輸時(shí)延階段:模型文件dpt_txdel.ps.c。傳輸時(shí)延描述的是第一個(gè)比特發(fā)送時(shí)間

到最后一個(gè)比特發(fā)送時(shí)間之間的時(shí)間間隔。

計(jì)算方法:從包里讀取傳輸該包的信道的標(biāo)志號(hào)(ID);有了信道ID后,即可讀取信道

的數(shù)據(jù)速率;讀取包的長(zhǎng)度;傳輸時(shí)延=包長(zhǎng)/數(shù)據(jù)速

率;把計(jì)算而得的傳輸時(shí)延值寫(xiě)到包的TDA里。

2)傳播時(shí)延階段:模型文件dpt_propdel.ps.c。傳播時(shí)延描述的是第一個(gè)比特開(kāi)始發(fā)

送時(shí)間到第一個(gè)比特到達(dá)時(shí)間之間的時(shí)間間隔。

計(jì)算方法:從包里讀取傳輸該包的鏈路標(biāo)志號(hào)(ID);有了鏈路ID,即可讀取鏈路的"

delay"屬性值;把該傳播時(shí)延值寫(xiě)進(jìn)包的TDA中;

3)誤碼數(shù)目分配階段:模型文件dpt_error.ps.c。

計(jì)算方法:讀取鏈路的標(biāo)志號(hào)(ID);讀取鏈路的誤碼率"ber"屬性值,即單個(gè)比特可能

誤碼的概率;讀取包長(zhǎng);計(jì)算"正好發(fā)生k個(gè)比特誤碼"

的概率P(k),那么可以得到"至多發(fā)生k個(gè)比特誤碼"的概率P=P(0)+P(1)+……+P(

k);產(chǎn)生一個(gè)在{0,1}內(nèi)平均分布的隨機(jī)數(shù)r;如果隨

機(jī)數(shù)r小于等于"至多發(fā)生k個(gè)比特誤碼"的概率P,那么就"認(rèn)定"k就是這個(gè)包在信道上傳

輸?shù)恼`碼數(shù)目;如果r大于P,那么就將k的值加1,反復(fù)

計(jì)算以得到算法能夠接受的誤碼數(shù)目;將誤碼數(shù)目寫(xiě)進(jìn)包的TDA里。

4)糾錯(cuò)階段:模型文件dpt_ecc.ps.c。

計(jì)算方法:讀取接收器的標(biāo)志號(hào)(ID);讀取接收器能糾正的誤碼數(shù)目門(mén)限值"eccthr

eshold"屬性值;讀取前面計(jì)算的錯(cuò)誤數(shù)目;將錯(cuò)誤數(shù)目

與糾錯(cuò)門(mén)限"eccthreshold"比較,判決該包是否能被正確接收;將判斷結(jié)果寫(xiě)進(jìn)包的

TDA里。

總線鏈路的pipeline模型

由六個(gè)缺省的pipelinestage組成,其中第一個(gè)階段針對(duì)每個(gè)傳輸只計(jì)算一次,而后面

的五個(gè)階段針對(duì)各個(gè)可能接收到這次傳輸?shù)慕邮掌鞣謩e

計(jì)算一次。

具體描述如下:

1)傳輸時(shí)延階段:模型文件dbu_txdel.ps.c。

計(jì)算方法:與點(diǎn)對(duì)點(diǎn)鏈路情況一致。

2)封閉性計(jì)算階段:模型文件dbu_closure.ps.c。

這個(gè)階段的意義在于判斷各個(gè)接收器節(jié)點(diǎn)是否能夠接收到這次傳輸,即鏈路的封閉性。

針對(duì)每個(gè)接收器都有一個(gè)判斷結(jié)果。有了這個(gè)結(jié)果以后

系統(tǒng)內(nèi)核就可以決定是否再為該接收器執(zhí)行后面的計(jì)算進(jìn)程。這個(gè)判斷的好處

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論