【OPNET学习系列文章之4】属性和统计量

本文在建立在上一篇博文【两发一收】的基础上的,基本代码不变,增加了一些东西。

本文要实现的功能是对网络的属性进行获取和显示并设置统计量统计仿真中的相关数据。

 一、属性

属性需要在网络层才能设置,因此在进程模型设置的属要进行提升。

1.在进程模型设置属性,以发送节点0为例

(1)设置进程模型设置:

Interface->Model Attribute,假设我们随便设置属性(以后根据具体仿真需要设置)node_size:

 【OPNET学习系列文章之4】属性和统计量

设置完成,单击OK,保存关闭进程模型。

(2)在节点模型将(1) 设置的属性提升至网络层。

右击P_0模块,单击Edit Attributes,查看node_size的值是否为promoted,如果不是则设置为promoted:

 【OPNET学习系列文章之4】属性和统计量

单击OK,保存,关闭。

(3)在网络层,右击0节点,单击Edit Attributes。设置属性p_0的值(该值是我随便设的),如下:

 【OPNET学习系列文章之4】属性和统计量

单击OK,保存。

(4)提取刚才设置的属性

进入0节点的进程模型,单击工具栏【SV】图标设置状态变量node_size为double型:

 【OPNET学习系列文章之4】属性和统计量

单击OK,双击st_0节点的上半部分(初始化模块的上半部分):输入

op_ima_obj_attr_get(op_id_self(), "node_size", &node_size);

printf("node_size,%10.5f\n", node_size);

保存,关闭。

运行仿真,结果显示如图所示。

 【OPNET学习系列文章之4】属性和统计量

2.在节点模型设置属性,以发送节点1为例

(1)在节点模型,Interface->Model Attribute,假设我们随便设置属性(以后根据具体仿真需要设置)node_color:

 【OPNET学习系列文章之4】属性和统计量

设置完成,单击OK,保存关闭节点模型。

(2)在网络层,右击1节点,单击Edit Attributes。设置属性node_color的值(该值是我随便设的),如下:

 【OPNET学习系列文章之4】属性和统计量

单击OK,保存。

(3)提取刚才设置的属性

进入1节点的进程模型,单击【SV】设置变量node_color为int型:

 【OPNET学习系列文章之4】属性和统计量

单击OK,双击st_0节点的上半部分(初始化模块的上半部分):输入

op_ima_obj_attr_get(op_topo_parent(op_id_self()),"node_color",&node_color);

printf("node_color,%d\n",node_color);

保存,关闭。

运行程序,显示结果如下:

 【OPNET学习系列文章之4】属性和统计量

 二、统计量

以2节点为例,统计接收包的数目

1.定义变量

2的节点的进程模型中,单击【SV】设置变量,如下:

 【OPNET学习系列文章之4】属性和统计量

2.设置统计量

Interface->Local Statistics/Global Statistics,设置如下:

 【OPNET学习系列文章之4】属性和统计量

Stat Name :统计量名;

Group:为该统计量名的分组,自己定义;

【OPNET学习系列文章之4】属性和统计量

Capture Mode: 统计模型,一般选bucket;

Every:多长时间统计一次;

Bucket mode:有最大值,最小值,平均值,总数,延时平均时间等等。

Draw style:结果的显示方式,线型.....

设置完成,单击OK。

3.在初始化状态将统计量注册

 在st_0进行注册(st_0为初始化化模块),双击st_0上半部分:

packet_count_handle=op_stat_reg("pk.packet_count",OPC_STAT_INDEX_NONE,OPC_STAT_LOCAL);

packet_count_handle为第一部分定义的变量名;

op_stat_reg注册函数;

pk.packet_count:packet_count为第二部部分定义的统计量名,pk为包名。

第二个参数一般设置为OPC_STAT_INDEX_NONE;

第三个参数为你设置是局部统计量OPC_STAT_LOCAL或者全局统计量OPC_STAT_GLOBAL。

保存关闭。

4.在发送模块,写统计函数

在st_2、st_3,双击上半部分,在收包语句之后,写

op_stat_write (packet_count_handle, 1.0);

第一个参数为统计量名称,可以使发包个数,收包个数,发送延时...我们这里统计的是发包个数,所以是在第一部分定义的变量名;

第二个参数,我们统计的是发包个数,所以每发一个包就+1,所以设置为1,又因为改变的的属性值为double,所以是1.0。假如我们要统计延时,该值就设置为发送一个包的延时。保存,编译,关闭。

5.回到网络层,选择要统计的变量

在接收节点2右击,Choose Individual DES Statistics。

因为我们刚才是在进程模块设置的统计量,现在选择Module Statistics下的packet_count

 【OPNET学习系列文章之4】属性和统计量

单击OK。

6.运行程序,运行完成

在网络模块右击,选择view result,查看结果如图所示。

【OPNET学习系列文章之4】属性和统计量