OPNET學習入門指南2_第1頁
OPNET學習入門指南2_第2頁
OPNET學習入門指南2_第3頁
OPNET學習入門指南2_第4頁
OPNET學習入門指南2_第5頁
已閱讀5頁,還剩10頁未讀 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領

文檔簡介

第頁OPNET學習入門指南1.預備知識這局部給大家介紹一下在參加課題組之后,和正式的投入課題開展工作之前大家需要具備的一些根本的背景知識。這些知識都是在大家以后的課題中或多或少,或明或暗的需要使用到的,打下一個扎實的理論根底對后面工作的開展有極大的好處,這個大家往后一定能夠體會到。正所謂“磨刀不誤砍柴工〞,大家應該抓住這段珍貴的時間,盡可能針對這些知識有的放矢的多看,多想,多練習,多討論,多交流。以便于能更快速的上手工作。1.1OPNET安裝OPNET安裝過程還是比擬復雜的,后面有專門的安裝說明,這里主要提醒一下,的,建議使用,因為version高,使用界面更傻瓜一些,而且根本上國內(nèi)那根本介紹OPNET的書里大多是根據(jù),它能自動找到8.1的license。1.2OPNET書籍選用 國內(nèi)OPNET的書就那幾本,個人感覺都差不多,講得不夠深入。我一開場在書店買的一本是人民郵電出版社出版的,講得不詳細,我只在學習各種編輯器熟悉菜單的時候用到了它。圖書館一共有六本OPNET的書,講解最詳細的一本是清華大學出版的,陳敏編著的,建議采用,我這里也有這個書的電子檔。其它幾本可以有選擇性的看看:李馨,葉明編的?OPNETModeler網(wǎng)絡建模與仿真?的OPNET核心函數(shù)介紹章節(jié)寫得比擬好,每個函數(shù)的實際應用都寫出來了,而且函數(shù)也做了相應歸類,不多掌握起來快;孟晨編的?OPNET通信仿真開發(fā)手冊?中的OPNET編程根底局部寫得很詳實,對一些根本的代碼做了介紹,并且對狀態(tài)機的強制性狀態(tài)和非強制性狀態(tài)的區(qū)別以及它們的合理使用講解得很清楚。當然OPNET學習的最好資料還是OPNET自帶的英文幫助Tutorial,上面有各種例子,并且有分類好的最全的核心函數(shù)。1.3OPNET建模機制和仿真流程學習OPNET之前,熟悉一下OPNET的建模機制和仿真流程是很有好處的,這樣更有針對性,不會出現(xiàn),打完了書上的例子,結(jié)果都出來了但是還不清楚自己在干什么的情況。OPNET采用分層建模的機制,從網(wǎng)絡物件層次關系看,提供了三個層次的模型,從低到高依次是進程模型——以狀態(tài)機來描述協(xié)議;節(jié)點模型——由相應的協(xié)議模型構(gòu)成,反映設備特性;最上層為網(wǎng)絡模型,表現(xiàn)網(wǎng)絡的拓撲構(gòu)造。三層模型和實際的協(xié)議,設備網(wǎng)絡完全對應,最大限度的貼近了實際的網(wǎng)絡系統(tǒng)。下面會對OPNET的這三個域——網(wǎng)絡域〔networkdomain〕、節(jié)點域〔nodedomain〕和進程域〔processdomain〕進展進一步的介紹。OPNET這三個域分別都對應著相應的編輯器。網(wǎng)絡域有工程編輯器和鏈路編輯器用來對整個網(wǎng)絡的框架進展設計—工程編輯器設計網(wǎng)絡大小,節(jié)點擺放;鏈路編輯器設計網(wǎng)絡拓撲構(gòu)造,鏈路的各種參數(shù)進展設計。節(jié)點域有節(jié)點編輯器,用于對各個節(jié)點內(nèi)部進展具體的設計,涉及到各個模塊的擺放,各個模塊屬性的設置;進程域有進程編輯器用來對每個模塊里所調(diào)用的進程進展編程設計,它是最底層的也是設計中的難點所在,進程的編寫實現(xiàn)了每個模塊的根本功能。另外還有包格式編輯器用來對系統(tǒng)中所用到的數(shù)據(jù)包進展設計,探針編輯器用來收集感興趣的統(tǒng)計量,ICI編輯器那么用來創(chuàng)立,查看,編輯接口控制信息。一般opnet系統(tǒng)級仿真的根本流程如下:定義包格式——>定義鏈路模型——>定義節(jié)點模型——>構(gòu)建網(wǎng)絡模型——>收集統(tǒng)計量——>運行仿真,進展程序調(diào)試——>觀察仿真結(jié)果——>進展結(jié)果分析當然在這個流程開場之前就要對整個系統(tǒng)有一個全面的設想,這個順序只是方便軟件的使用,防止重復性的工作。1.4OPNET中的一些根本概念.對象〔Object〕Object是Model的一局部,其可以在model中扮演下面的功能:a)定義行為b)創(chuàng)立信息c)儲存和管理信息d)處理、修改、轉(zhuǎn)發(fā)信息e)對事件作出響應f)包含其他的object1.4.2.object的Attribute和一些允許訪問Attribute或者使Attribute生效的程序組成了object的接口。這些程序可以是OPNET自動生成的,也可以是用戶編寫的。包含有子object的object稱之為復合對象〔compoundobject〕。1.4.3.Attribute除了可以描述object外,還可以用在model上用來表示model的參數(shù)。model的attributes機制可以提高model的可重用性。具體地說,model的attribute被定義為model的一局部,但同時,他們也出現(xiàn)在object里,他們是在object的model被規(guī)定后被object獲得的。這是object的本能操作。類似這種modelattribute機制,objectattribute也可以被向上傳給model,這種機制就是所謂的attributepromotion。Promotion導致objectattribute不再有值,而是作為model的attribute出現(xiàn)在上層屬性中。對于一路promote到所有model之上的attribute,我們可以把它看作是simulation的attribute。從而把研究的系統(tǒng)看成是這些attributes的函數(shù)。.衍生模型〔DerivedModels〕有的時候,我們想只改變一個model的一些attributes就可以得到一個新的model。這種機制稱為模型的衍生〔modelderivation〕。衍生出的model稱為derivedmodel,被衍生的model稱為parentmodel,沒有parentmodel的model稱為basemodel。2.OPNET各域入門介紹網(wǎng)絡域networkdomain定義了通信網(wǎng)的拓撲構(gòu)造。通信的實體是節(jié)點nodes。OPNET提供單向和全雙工的點到點鏈路,也提供總線鏈路用以允許對任意大小的節(jié)點組進展播送通信。2.2.節(jié)點域 節(jié)點域nodedomain用來對通信設備進展建模,諸如路由器、網(wǎng)橋、工作站、終端等等。節(jié)點模塊Nodemodel是通過節(jié)點編輯器NodeEditor生成,通過一些更小的模塊〔module〕來表現(xiàn)。一些模塊具有一定的功能,這些功能已經(jīng)定義好了,只用通過配置一組內(nèi)部參數(shù)〔built-inparameters〕就可以了。它們包括各種各樣用來在networkdomain連接通信連路的發(fā)送器和接收器。還有一些模塊:處理器〔processors〕和隊列〔queues〕,也是高度可編程的,它們的動作通過進程〔Processmodel〕來描述。2.3.進程域 進程域是最底層的域也是最難上手的域,如果全部使用OPNET自帶的進程模塊,那么我們永遠只能是個OPNET使用者,但如果你想要搭建系統(tǒng)實現(xiàn)自己的一些想法,那么我們必須得學會進程的編寫,開發(fā)自己的進程模塊,上述到軟件開發(fā)的層次。進程模型nodemodel中的各個module通過三種鏈接互連,分別是:packetstreams,statisticwires,logicalassociations。Packetstreams傳送格式化的消息,我們稱為packet。統(tǒng)計線Statisticwire傳送簡單的數(shù)字信號和控制信息,一般用于一個module用來監(jiān)測其他module的性能和狀態(tài)。Statisticwire和Packetstream都有參數(shù)用來配置它們的行為。Logicalassociations用來確認module之間的綁定。目前,它們只被用在發(fā)送器和接收器之間,用來說明它們在接入到Networkdomain上的鏈路時,應當被當作一對module來使用。一個進程〔process〕可以被認為近似于一個執(zhí)行程序。OPNET中的Process是基于Processmodel,他們是在ProcessEditor中定義的。進程組〔processgroup〕由許多process組成,這些process都是在同一個processor或者queue中執(zhí)行。當仿真開場的時候,每個module只能有一個process,稱之為rootprocess。這個process之后能夠創(chuàng)立新的process,他們之后也能再創(chuàng)立其他的process。在仿真中被創(chuàng)立的process稱之為動態(tài)進程〔dynamicprocess〕。任何時刻只能有一個process處于執(zhí)行狀態(tài)。當一個Process開場執(zhí)行后,我們說這個process被調(diào)用〔invoked〕了。當一個process調(diào)用另一個process時,調(diào)用〔invoking〕process被暫時掛起直到被調(diào)用〔invoked〕process被阻止〔block〕。一個process如果完成了它當前調(diào)用的處理就將被阻止。當invokedprocess被阻止時,invokingprocess就將從它掛起的地方繼續(xù)執(zhí)行。OPNET中的Process能夠?qū)χ袛唷瞚nterrupt〕或者調(diào)用〔invocation〕產(chǎn)生響應。Interrupt可能產(chǎn)生自processgroup之外的源,或者processgroup中的其他成員,或者這個process自己。Interrupt一般對應于一些事件,包括消息到達、計時器到時、資源釋放或者其他模塊的狀態(tài)改變等等。OPNET的processeditor使用Proto-C的語言來描述processmodel。Proto-C基于狀態(tài)轉(zhuǎn)移圖〔StateTransitionDiagramsSTD〕、一個高級指令庫〔kernelProcedures〕和C或C++的通用部件。STD定義了模型的各個process所處的狀態(tài),以及使進程在狀態(tài)之間轉(zhuǎn)移的條件。這種條件稱之為transition。KernelProcedures主要一系列的函數(shù)包組成,這些包詳見參考文檔。STD在ProcessEditor中生成。STD除了一些傳統(tǒng)的STD具有的能力外,還有一系列擴展:a)狀態(tài)變量〔StateVariables〕。process可以擁有一些私有statevariables,這些statevariables可以是任意的數(shù)據(jù)類型,包括OPNET專有的、通用的C/C++、用戶定義類型等等。這種能力使得process能夠靈活的控制counter、routingtables、與性能相關的statistics、需要轉(zhuǎn)發(fā)的message。任意組合的statevariable可以在一個process所有的動作和決定中使用。b)狀態(tài)執(zhí)行〔StateExecutives〕。通過C/C++語言描述了process進入和離開狀態(tài)時的操作,典型的操作包括:修改狀態(tài)信息,創(chuàng)立或接收消息,更新發(fā)送消息的內(nèi)容,更新統(tǒng)計數(shù)據(jù),設置計時器以及對計時器作出響應。c)轉(zhuǎn)移條件〔TransitionConditions〕。通過C/C++語言描述布爾變量,要涉及interrupt的屬性以及statevariables的組合。d)轉(zhuǎn)移執(zhí)行〔TransitionExecutives〕。轉(zhuǎn)移時可能會定義一些通用的操作。3.OPNET進程編程心得3.1.OPNET自帶模塊介紹OPNET一共有以下幾種模塊:進程模塊〔processor〕,隊列模塊〔queue〕,各種類型的發(fā)射機和接收機。其中支持processmodel的能夠自覺編寫進程進展建模的模塊只有進程模塊和隊列模塊,發(fā)射機和接收機等出于方便和功能的原因,已經(jīng)被預定義了,只需編輯其屬性即可。Queue還可以讓用戶定義內(nèi)部的子隊列(subqueues),以及如何管理這些subqueue的方法。但是它們的根本建模技術(shù)還是一樣的。

3.2.OPNET進程驅(qū)動原理所有進程process由interrupt驅(qū)動。所以process的第一個操作就是判斷interrupt的類型,進而解析interrupt的屬性。各種中斷詳見書本。進程在阻止(Blocked)和活動(Active)兩個狀態(tài)間循環(huán),如果interrupt來了那么由blocked進入active,完成操作后回到blocked。3.3.OPNET中各種變量的區(qū)分OPNET中有三種變量全局變量,狀態(tài)變量和臨時變量。全局變量生存期最長,作用范圍最大,它在仿真的任何時刻,在仿真系統(tǒng)的任何進程都是可見的,因而它經(jīng)常被用來定義各個進程想要共享公用的一些變量。比方在仿真EPON時,我將OLT的時鐘定義成全局變量,方便各個進程對其的調(diào)用。全局變量是在進程的HB中定義的,它在某一個進程里被主聲明,在其它需要調(diào)用它的進程中用“extern〞進展外部聲明。狀態(tài)變量是專屬于該進程的,只要該進程被調(diào)用它就存在,但是別的進程不能直接訪問它,當然通過調(diào)用一些函數(shù)它還是能夠被獲知的,它在SV中被定義。節(jié)點的一些統(tǒng)計變量一般采用狀態(tài)變量,比方EPON仿真中各個ONU內(nèi)處理模塊發(fā)送的數(shù)據(jù)量和數(shù)據(jù)包的個數(shù)等都是用的狀態(tài)變量。臨時變量生成期最短,它不需要在進程的兩次調(diào)用之間保持不變,比方for循環(huán)中自加變量i,因為只是使用上的需要,并不對它運行的結(jié)果關注所以用了臨時變量3.4.各進程間數(shù)據(jù)共享機制有三種機制用來作為multipleprocessess下,各個process之間的通信方式:a)modulememory同模塊共享內(nèi)存:通過函數(shù)op_pro_modmem_install()和op_pro_modmem_access()訪問。為了保證process間通信機制,各個process應當遵循sharedmemory的數(shù)據(jù)類型,這就要求process都要知道,因而sharedmemory的數(shù)據(jù)構(gòu)造定義應當房子外部定義".h"文件中,并包含在每個process的headerblock中。sharedmemory一開場是沒有的,是由process來決定什么時候分配以及分配多大,這些通過op_pro_modmem_access()來完成。內(nèi)存的分配一般是通過op_prg_meme_alloc()來完成。b)父子共享內(nèi)存:只有以父子關系聯(lián)系在一起的process才能訪問的私有共享內(nèi)存。這種共享內(nèi)存只能在childprocess由op_pro_create()產(chǎn)生時由op_prg_mem_alloc()分配,且不能被替換。通過op_pro_parmem_access()訪問。通過op_pro_invoke()通知對方對共享內(nèi)存的內(nèi)容進展的修改和,以及對內(nèi)容的檢查。c)參數(shù)內(nèi)存(argumentmemory)將內(nèi)存地址作為op_pro_invoke()的參數(shù)傳給別的進程用以通信,通過op_pro_argmem_access()來完成訪問。與前兩個不同的是,這局部內(nèi)存不是永恒的。3.5.進程中輸入輸出流當packet從inputstream到達時,接收模塊的一個process由于streaminterrupt而被調(diào)用。這個process通過op_intrpt_strm()來得悉這個packet是從哪個stream里來的。Inputstream通常用非負的整數(shù)作為標號(index)。process通過op_pk_get()和streamindex來獲得packets。通過op_strm_pksize()得悉仍然留在inputstream中的packet的數(shù)量。對于outputstream來說,跟inputstream類似,也有一些函數(shù):op_pk_send(),op_pk_send_delayed(),op_pk_send_forced(),op_pk_send_quiet()。也是用非負整數(shù)用來作標號。3.6.進程中狀態(tài)圖3.6.1process在任意時刻只能處在一個狀態(tài)下。process可以根據(jù)它收到的interrupt在狀態(tài)之間轉(zhuǎn)移。每個狀態(tài)的執(zhí)行過程分為兩個局部。進入執(zhí)行(enterexecutives)和離開執(zhí)行(exitexecutives),分別在進入和離開該狀態(tài)的時候執(zhí)行。Process定義了兩種狀態(tài),稱之為強制狀態(tài)(forcedstates)和非強制狀態(tài)(unforcedstates),分別用綠色和紅色表示。Unforcedstates允許在process在enter和exit之間暫停。一旦process執(zhí)行完unforcedstates下的enterexecutives,就被block,并將控制權(quán)交還給調(diào)用它的其他process。如果這個process是被SimulationKernel調(diào)用的,block就意味著這個event的完畢。但是此時這個process依然被掛起,直到下一個新的調(diào)用產(chǎn)生使得它進入當前狀態(tài)的exitexecutives。Forcedstates是不允許process等待的。所以一般它的exitexecutives是空白的。這是它與Unforcedstates的最大區(qū)別。3.6initialstates是process被第一次調(diào)用時的起始位置。通過setinitialstate或makeinitialstate來設置。beginsimulationinterrupts是一種moduleattribute,用來完成對initialstate的進入。通過module的begsimintrpt屬性來選擇。當然也可以不選擇使用beginsimulationinterrupts而使用普通的interrupt(不推薦)。3.6.3.對于狀態(tài)轉(zhuǎn)移的規(guī)定有四個組成局部:源狀態(tài)、目的狀態(tài)、條件表達式、執(zhí)行表達式??梢赃@樣解讀:當處在源狀態(tài)下,如果條件是真,那么執(zhí)行操作,并且轉(zhuǎn)移到目的狀態(tài)。轉(zhuǎn)移條件是布爾表達式。表達式可能是很多東西復雜東西的組合。所有支持條件表達式的計算都必須在exitexecutives的末尾執(zhí)行,因為它們馬上就要在后面的計算條件表達式的值時用到。 常用的是使用宏來定義復雜或循環(huán)表達式,幾乎所有Proto-C的宏都是在headerblock中定義的,宏也可以在外部文件".h"中定義。然后通過在headerblock中用#include包含進來。宏的定義是#define。(跟C幾乎一模一樣)3.7.OPNET中ODB調(diào)試經(jīng)歷 調(diào)試程序應該是新手最花時間的一局部,剛開場那些五花八門的錯誤甚至可能讓人喪失信心,所幸OPNET自帶的調(diào)試工具已經(jīng)很強大了。從錯誤日志里頭可以很清楚的看到一些語法錯誤。最難發(fā)現(xiàn)的是邏輯錯誤,對于邏輯

溫馨提示

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

最新文檔

評論

0/150

提交評論