目的:设计一个模块,能够记录它所收到的包的数量 ,然后将包数量写到统计表中。(此为opnet 文挡当中的例子,第二部分 process)
设计模块:
1,模块分3个状态 初始态 initilization 到达态 arrival ,空闲态 idle
2,做状态转移图FSM .initilization状态,arrival 状态为强迫状态,idle状态为非强迫状态。
从idle状态转移到arrival状态的条件为 数据包packet的到达。
3,定义状态和变量
#define ARRIVAL (op_intrpt_type()==opc_INTRPT_STRM)
ARRIVAL 为状态转移条件。它为真的条件为:op_intrpt_type() (中断类型)为 opc_INTRPT_STRM (流中断)
4, 定义两个状态变量(state variables)
Type Name Comments
int pk_count Counts total packets
Stathandle pk_cnt_stathandle Statistic to record packet count
其中定义 pk_count 用来记录数据包的量,可以理解,可是为什么要定义 pk_cnt_stathandle 呢 ?这个变量的作用是什么 ?
5,create state executives 创建状态代码
a ,初始状态进入代码 :
pk_count = 0;
//设置 数据包的统计量的初始值为 0
pk_cnt_stathandle = op_stat_reg ("packet count", OPC_STAT_INDEX_NONE, OPC_STAT_LOCAL);
//这个又是干什么用的呢 ?不知道 哦
b,arrival 状态的进入代码
进入了arrival 状态,当然pk_count 必须自加1;destroy 掉进入的packet,先要获得使系统中断的packet stream的句柄。
++pk_count; //自加1
op_pk_destroy (op_pk_get (op_intrpt_strm ()));//得到流的句柄,销毁数据包
op_stat_write (pk_cnt_stathandle, pk_count); //将变量写入统计表
6,编辑进程接口 edit process interface
7,实现结点和网络模型
8,运行仿真