opnet之自行设计csma/ca

来源:互联网 发布:远程软件哪个好用mac 编辑:程序博客网 时间:2024/05/20 23:58

自行设计的csma/ca

init

初始化:

  • 初始化TV
  • 读入仿真属性和对象属性到SV

SRC_RX

if(pcs_state == 0)&&(busy == 0)
{
next_event_data = op_intrpt_schedule_self(op_sim_time()+difs,ROB_INIT);
busy == 1; //这个busy应该只属于这个节点所有
rob=-1
}

//这个if语句不执行的话包会在队列中堆积

SENSE

pcs_state = (int)op_stat_local_read(op_intrpt_stat());
if(pcs_state == 1)
{
删除在SRC_RX预设的ROB_INIT自中断
}
//如果sense到信道空闲,也会查看队列中是否有包,有发送
if(pcs_state == 0)&&(busy == 0)&&(队列有包)
{
next_event_data = op_intrpt_schedule_self(op_sim_time()+difs,ROB_INIT);
busy == 1; //这个busy应该只属于这个节点所有
rob=-1
}

ROB

if(rob == -1)
{
rob = aSlotTime*(int)op_dist_uniform(cw_current);
}
next_event_data = op_ intrpt_schedule_self(op_sim_time()+rob,DATA_TX_INIT);
rob = -1;

DATA_TX

删除ROB中在竞争窗口中所设的其他中断
op_pk_sent();
timeout = 传输时间+传播时间+帧间隔
设置自中断 1.1*timeout+op_sim_time()

DATA_RX

删除DATA_TX中的time_out中断
op_intrpt_schedule_self(op_sim_time()+sifs,ACK_TX_INIT);

ACK_TX

发送ack包
timeout = 传输时间+传播时间+帧间隔
设置自中断 1.1*timeout+op_sim_time()

ACK_RX

删除DATA_RX中预设的time_out中断
busy = 0;

TIME_OUT

if(重发次数小于指定值
{
重发data或者ack包;
}
else{
丢包;
}

tags:opnet

0 0
原创粉丝点击