在【opnet 入门例程2–点到点单工收发模型(1)】中,我们使用的是系统自带的进程模型。
这里我们自己写一个进程模型。并统计数据传输延时的变化。
File–>new–>process model
下面写代码。【详细含义及操作在前面的文章有写】
定义PK_ARRIVAL转移条件
#define PK_ARRIVAL (op_intrpt_type()==OPC_INTRPT_STRM)
其中delay_handle为统计句柄,作用之前提到过,用来将delay的值传递到统计量中去,以便仿真后查看结果。
Interface–>Global statistics
全局统计量的名字起为end to end delay
delay_handle = op_stat_reg (“end to end delay”,OPC_STAT_INDEX_NONE,OPC_STAT_GLOBAL);
用来将全局统计量end to end delay和统计句柄绑定。
index = op_intrpt_strm(); //获取中断流索引,这里只有一个接收机,索引其实就是0.
pkptr = op_pk_get(index); //根据流索引获取数据包
create_time = op_pk_creation_time_get(pkptr); //获取数据包的创建时间
sim_time = op_sim_time(); //获取当前仿真时间
delay = sim_time - create_time; //传输时延=当前仿真时间 - 包创建时间
op_stat_write(delay_handle,delay); // 将时延值写入统计句柄,而统计句柄与全局统计量是绑定的。
op_pk_destroy(pkptr); //处理完,销毁数据包
在TB临时变量中声明上面用到的变量。
int index;
Packet *pkptr;
double create_time,sim_time;
源发送包,目的节点接收包。所以进程模型是要在目的节点中使用。
设置myseu_sink中的p_0状态机的属性。process model设置为seu_ete_delay。
DES–>choose individual statistics
run…
上图记录的是所有数据包的时延情况。
查看平均值:
概率分布:
同理,回到进程模型,在状态变量SV中声明一个包个数变量,以及对应的统计句柄。
接下来声明一个统计量与包个数统计句柄相绑定。
首先声明一个全局统计量packet number。
然后再init状态的入口代码里进行绑定关联。并且对pk_number=0,初始化包个数的值。
pk_num_handle = op_stat_reg (“packet number”,OPC_STAT_INDEX_NONE,OPC_STAT_GLOBAL);
pk_number=0;
arrival状态接收到包,要记录个数。pk_number++;并将记录的个数写进统计句柄。op_stat_write(pk_num_handle,pk_number);
编译成功:
选择展示统计量并运行仿真
仿真结果: