OPNET的常識總結

1、強制與非強制

強制:執行完後馬上離開。(綠色)

非強制:執行完後等待其它條件觸發離開。(紅色)

2、定義變量

HB:頭區域,定義常量,頭文件,宏,全局變量,數據結構,數據類型及函數聲明。

SV:狀態變量區,定義狀態變量,狀態變量在不同的進程切換之間,保持值不變。

TV:狀態變量區,定義臨時變量,臨時變量在不同的進程切換之間,無法保持值不變。

FB:函數區域,定義和進程相關函數。

DB:診斷區域,定義C/C++語句,將診斷信息輸出到標準輸出設備中。

TB:終止區域,定義C/C++語句,這些語句將在進程銷燬時執行,一般爲釋放內存等語句。

HB中定義全局變量,而SV是狀態變量。全局變量是在項目裏保持的,而狀態變量是在單個進程裏保持的。同一項目中的不同進程中的HB定義的變量不可重複初始化。SV爲整個進程範圍的“全局變量”,它的值在進程範圍內(強制和非強制狀態)保留,狀態變量爲每個進程保持個性化提供機制TV是臨時狀態,當離開一個狀態後,值原則上不會保留;另外,TV變量只有在從某個狀態轉到內核時,TV變量才被系統自動銷燬(除自己動態分配內存的),即有兩個連續的強制狀態,TV變量在兩者之中是保留的。

統計量用來記錄感興趣的值,仿真結束後,這些值可以自動轉化爲圖形以供分析。

當需將一個進程模型的狀態變量複製到本進程模塊時,可以在SV中點Edit ASCII,來複制代碼。

 進程中將不讓用戶隨便動的屬性設成hidden,這樣在節點中就看不到了。
     在init 狀態的上半部雙擊鼠標,打開它的入口代碼。
     在init 狀態的下半部雙擊鼠標,打開它的出口代碼。
     轉移描述從一種狀態到另一種狀態的過程和條件。包括四個組件:源狀態,目的狀態,轉移條件和轉移執行代碼。

     仿真核心爲整個仿真有秩序地運行維護了一個事件列表,當一個事件到達事件列表的隊首時它變成一箇中斷,並調度給指定的模塊。
     狀態與狀態之間通過轉移線transitions 相連。轉移線可以是帶條件的(必須滿足條件才能轉移)或者無條件的(直接轉移)。

 

3average/time_average

   時間順序:  T1----->T3--------->T2

    在T1T2這個時間段,收到m個包。其中,T1T3收到m1個包,T3T2收到m2個包。其中T1 < T3 < T2

1average

average表示m/(T2 - T1)

2time_average

time_average表示m1/(T3 - T1) + m2/(T2 - T3)

也就是說time_average與分佈有關。

4、與VC的調試

     一般的方法是ODB初始化以後,打開VC,在Debug 菜單下單擊attach to process,然後選擇op_runsim_dev.exe(或者op_runsim_opt.exe),這樣就可以利用VC 提供的調試功能進行OPNET 程序調試。一般情況下attach to process 選項框爲空,這可
能不是VC和OPNET程序本身的問題,因爲有些應用軟件的進程和op_runsim_dev.exe(或者op_runsim_opt.exe)進程衝突,如一些殺毒軟件,acrobat 等,或者是其他進程開得過多所致。

這時打開任務管理器,找到op_runsim_dev.exe,右鍵選擇調試。這時會彈出VC。

彈出來的VC工程沒有原代碼,需要自己手打打開過程原代碼,然後在代碼中設置斷點。

回到ODB中點擊continue即可在斷點出停止。

5、統計

兩種方法:

1)進程域:node statistics

2)自定義:

1)在狀態變量(SV)中定義統計值。

2)註冊統計量。

3)寫入到變量。

下面是我自定義統計量的操作步驟:

1.打開一個進程模型(process model),在進程模型的菜單Interfaces 下拉選項中有局部或者全局統計量

Local Statistics 和Global Statistics 的操作步驟一樣,故 本文以Global Statistics 爲例來說明情況。

假定,建立了一個名爲:packet_size的全局統計量。

2.必須爲這個全局統計量建立一個統計句柄,此不操作需在狀態變量塊(SV)中操作,創建一個統計句柄(Stathandle),命名爲PZ;

3  前面兩部分別創建了全局統計量packet_size和統計句柄PZ,但是必須讓兩者聯繫起來才能起到想要的作用,故必須用

opnet的核心函數進行統計量註冊,此步驟一般在有限狀態機(FSM)的init中的入口代碼中實現。

註冊代碼爲:PZ =op_stat_reg("pakcet_size",OPC_STAT_INDEX_NONE, OPC_STAT_GLOBAL);

 註冊好統計變量後就可以使用了。

4。在你需要使用此統計量的函數塊,編寫相應的代碼,賦值給這個統計句柄PZ,就可以收集到全局統計量 packet_size 了。

這裏我們假設變量abcde由你感興趣的值。
        double    abcde;
        …… // 如何取得abcde得值要看你的需要了。
        op_stat_write (PZ, abcde);

 

附帶的統計量用到的:

關於統計量類型文件的兩種描述(矢量文件和標量文件)。

op_stat_annotate()爲矢量輸出文件中的一個狀態統計增加一個標籤。

op_stat_rename(),對矢量輸出文件中的一個狀態統計重命名。

op_stat_reg()根據進程模塊中統計量的名字(在Process Model 編輯器中的Interfaces菜單中選擇Local StatisticsGlobal Statistics定義的Stat Name屬性)返回一個統計量句柄(Statistic handle),它作爲進程寫入本地或全局統計量的依據。 

  op_stat_obj_reg()op_stat_reg()類似,但不侷限於應用在進程模塊,它還可以用來訪問鏈路、路徑、子模塊的本地統計量。  

op_stat_dim_size_get()得到進程模塊中定義的統計量的維數(Dimension),而op_stat_obj_dim_size_get()還可以得到路徑、鏈路等對象的統計量的維數。

op_stat_write()在當前時刻將結果寫給某個指定的統計量

op_stat_write_t()在某個指定的時間將結果寫給某個指定的統計量。標量統計量可以在仿真過程的任何時間寫入。對於每個標量統計量只對應一個值,它與仿真時間無關,只和當前整個仿真有關

op_stat_scalar_write()直接將結果寫入標量輸出文件中。除了以上將統計量寫入文件的操作,進程模塊還支持讀取輸入統計量的操作(此時進程模塊爲狀態線信息的目的地),

op_stat_local_read()可以得到指定狀態線的當前值,這種方法是進程模塊(或與其他節點模型內對象)間的一種通信機制。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章