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;

前面两部分别创建了全局统计量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()可以得到指定状态线的当前值,这种方法是进程模块(或与其他节点模型内对象)间的一种通信机制。

  • 3
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值