网络包含两个节点,一个发送节点,一个接收节点。发送节点按照某种随机的规律产生数据包(包大小和包间隔可自己定义),然后发送给接收节点。传输过程中会有一些随机的差错(误包率也可自己定义)。接收节点收到正确的包之后统计吞吐量。并可将接收吞吐量与发送吞吐量进行比较,观察误包率对接收吞吐量的影响。

模型中发送节点模型为一个处理器类的节点,其进程模型为:

其用于产生ICI数据结构,并且使用远程中断进行发送和检错重传

发送节点为六个状态,其中五个为强制状态一个为非强制状态,无转移函数

Init的入口代码为

pk_code=0;

pk_count=0;

pk_number=0;

该函数作用为获得仿真属性值,参数为属性类型、属性名、指向属性值得指针

op_ima_sim_attr_get(OPC_DOUBLE,"FailureRate",&frate);

获得分级名称指定的对象ID

dest_id=op_id_from_hierarchical_name("top.my_rx_node.rx_pro") ;为接收节点的进程

统计量注册,返回统计量句柄

transmitted_index= op_stat_reg("Transmitted Index", OPC_STAT_INDEX_NONE,OPC_STAT_GLOBAL);

transmitted_traffic= op_stat_reg("Transmitted Traffic", OPC_STAT_INDEX_NONE,OPC_STAT_GLOBAL);

generate_index= op_stat_reg("Generating Index", OPC_STAT_INDEX_NONE,OPC_STAT_GLOBAL);

ack_state=1;

该函数作用是为调用进程预设一个中断,第一个参数为预设的中断时间,第二个参数是用户自定义的代码,在头文件中有声明,op_sim_time为获取当前仿真时间

op_intrpt_schedule_self(op_sim_time(),INTRPT_NEW_PKT);

init状态执行完之后,进入idle状态,其入口代码为

if(pk_count>0&& ack_state)

op_intrpt_schedule_self(op_sim_time(),PK_SEND);

头文件

#defineINTRPT_NEW_PKT  0  自定义中断

#definePK_SEND 1   自定义中断

#defineRE_SEND 2   自定义中断

#defineGEN (op_intrpt_type() == OPC_INTRPT_SELF && op_intrpt_code() ==INTRPT_NEW_PKT)

GEN条件中断类型为自中断,且中断值为INTRPT_NEW_PKT,第一次中断

#defineSEND (op_intrpt_type() == OPC_INTRPT_SELF && op_intrpt_code() ==PK_SEND && ack_state == OPC_TRUE)

SEND条件:中断类型为自中断,且中断值为PK_SEND

#defineACK (op_intrpt_type() == OPC_INTRPT_REMOTE && op_intrpt_code()  == pk_code)

ACK条件中断类型为远程中断,并且中断值为pk_code

#defineRESEND (op_intrpt_type() == OPC_INTRPT_SELF && op_intrpt_code() ==RE_SEND)

RESEND条件:中断类型为自中断,并且中断值为RE_SEND

第一次条件GEN成立,进入gen状态,其入口代码

pk_count++;

pk_number++;

op_dist_uniform函数的作用是产生一个均匀分布的随机值,取值范围为0-0.2

op_intrpt_schedule_self(op_sim_time()+ op_dist_uniform(0.2),INTRPT_NEW_PKT);

op_stat_write(generate_index,pk_number);

gen状态运行后回到init,之后满足SECD条件进入send状态,其入口代码为

pk_code++;

pk_count--;

创建一个接口

获取给定接口的某属性值

pk_inf=op_ici_create("my_td");

op_ici_attr_set(pk_inf,"index",pk_code);

size_dist=op_dist_load("Normal",1000,10000);

pk_size=op_dist_outcome(size_dist);随机生成的包大小

if(pk_size<0)

pk_size=0;

elseif(pk_size>10000)

pk_size=10000;

op_ici_attr_set(pk_inf,"size",pk_size);

op_ici_attr_set(pk_inf,"fal_rate",frate);

op_ici_install(pk_inf);创建一个与输出中断相关联的接口

op_intrpt_schedule_remote(op_sim_time(),pk_code,dest_id);预设一个远程中断

ack_state=0;

re_send=op_intrpt_schedule_self(op_sim_time()+0.2,RE_SEND);

op_stat_write(transmitted_index,pk_code);

op_stat_write(transmitted_traffic,pk_size);

op_ici_install(OPC_NIL);  拆除当前ICI的绑定

send 状态结束后ACK条件满足,进入ack状态,其入口代码为

op_ev_cancel(re_send);撤销事件

ack_state=1;

send状态出错,就会进入resend状态,其入口代码

op_ici_install(pk_inf);

op_intrpt_schedule_remote(op_sim_time(),pk_code,dest_id);

re_send=op_intrpt_schedule_self(op_sim_time()+0.2,RE_SEND);

op_ici_install(OPC_NIL);拆除当前ICI的绑定(释放)

接收节点为四个状态,其中三个为强制状态,一个为非强制状态,无转移函数

Init的入口代码为

send_id=op_id_from_hierarchical_name("top.my_tx_node.tx_pro");发送节点的ID

获得分级名称指定的对象ID

received_index= op_stat_reg("Received Index",OPC_STAT_INDEX_NONE, OPC_STAT_GLOBAL);

received_traffic= op_stat_reg("Received Traffic", OPC_STAT_INDEX_NONE,OPC_STAT_GLOBAL);

统计量注册,接收数目和索引

头文件为

#defineARRIVAL (op_intrpt_type() == OPC_INTRPT_REMOTE)
远程中断

#defineEND (op_intrpt_type() == OPC_INTRPT_ENDSIM)
 结束仿真中断

声明了包到达的条件及仿真结束的标志

当包到达时进入arrival状态,执行以下代码

pk_index=op_intrpt_code();

intrpt_ici=op_intrpt_ici();返回与当前中断相关联的接口

op_ici_attr_get(intrpt_ici,"size",&pk_size);

op_ici_attr_get(intrpt_ici,"fal_rate",&frate);

if(op_dist_uniform(1)>=frate)

{

op_ici_destroy(intrpt_ici);

op_intrpt_schedule_remote(op_sim_time()+op_dist_uniform(0.1),pk_index,send_id);

}

op_stat_write(received_index,pk_index);

op_stat_write(received_traffic,pk_size);

opnet点对点通信模型 分类: opnet 2014-05-26 22:15 246人阅读 评论(3) 收藏的更多相关文章

  1. 博弈论入门小结 分类: ACM TYPE 2014-08-31 10:15 73人阅读 评论(0) 收藏

    文章原地址:http://blog.csdn.net/zhangxiang0125/article/details/6174639 博弈论:是二人或多人在平等的对局中各自利用对方的策略变换自己的对抗策 ...

  2. 全方位分析Objcetive-C Runtime 分类: ios技术 2015-03-11 22:29 77人阅读 评论(0) 收藏

    本文详细整理了 Cocoa 的 Runtime 系统的知识,它使得 Objective-C 如虎添翼,具备了灵活的动态特性,使这门古老的语言焕发生机.主要内容如下: 引言 简介 与Runtime交互 ...

  3. C/C++文字常量与常变量的概念与区别 分类: C/C++ 2015-06-10 22:56 111人阅读 评论(0) 收藏

    以下代码使用平台是Windows 64bits+VS2012. 在C/C++编程时,经常遇到以下几个概念:常量.文字常量.符号常量.字面常量.常变量.字符串常量和字符常量,网上博客资料也是千篇千律,不 ...

  4. NPOI 通用导出数据到Excel 分类: C# Helper 2014-11-04 16:06 246人阅读 评论(0) 收藏

    应用场景: 在项目中,经常遇到将数据库数据导出到Excel,针对这种情况做了个程序封装.工作原理:利用NPOI将SQL语句查询出的DataTable数据导出到Excel,所见即所得. 程序界面:   ...

  5. hdu 1039 (string process, fgets, scanf, neat utilization of switch clause) 分类: hdoj 2015-06-16 22:15 38人阅读 评论(0) 收藏

    (string process, fgets, scanf, neat utilization of switch clause) simple problem, simple code. #incl ...

  6. PIGS 分类: POJ 图论 2015-08-10 09:15 3人阅读 评论(0) 收藏

    PIGS Time Limit: 1000MS Memory Limit: 10000K Total Submissions: 18209 Accepted: 8277 Description Mir ...

  7. bzoj 1041 圆上的整点 分类: Brush Mode 2014-11-11 20:15 80人阅读 评论(0) 收藏

    这里先只考虑x,y都大于0的情况 如果x^2+y^2=r^2,则(r-x)(r+x)=y*y 令d=gcd(r-x,r+x),r-x=d*u^2,r+x=d*v^2,显然有gcd(u,v)=1且u&l ...

  8. 快速幂取模 分类: ACM TYPE 2014-08-29 22:01 95人阅读 评论(0) 收藏

    #include<stdio.h> #include<stdlib.h> //快速幂算法,数论二分 long long powermod(int a,int b, int c) ...

  9. Hibernate检索方式 分类: SSH框架 2015-07-10 22:10 4人阅读 评论(0) 收藏

    我们在项目应用中对数据进行最多的操作就是查询,数据的查询在所有ORM框架中也占有极其重要的地位.那么,如何利用Hibernate查询数据呢?Hibernate为我们提供了多种数据查询的方式,又称为Hi ...

随机推荐

  1. 利用浏览器查找font-family的css编码

    提供一种利用Chrome快速查找字体编码的小技巧 打开浏览器,按下键盘F12 点击Console控制台 输入escape("要查询的字体中文名称")(注意:括号与引号都是英文输入法 ...

  2. 将页面内容转换Pdf\Word\Excel格式

    项目中用到了将邮件内容转换为Pdf.Word.Excel格式,做为邮件附件发送. 查了一些解决方案,走了一些弯路.以此代码记录下. 转换PDF需要下载NReco.PdfGenerator.dll 以下 ...

  3. [0] 错误1“GenerateResource”任务意外失败。....

    解决方案1:关闭VS,删除目录下DEBUG文件夹下所有文件,打开VS重新编译.

  4. javascript对象(1)

    今天说面向对象,嗯,不是那个对象,是这个对象. 接下来就开始今天的内容: 什么是面向对象: 就是把数据及数据的操作方法放在一起,作为一个相互依存的整体----对象.对同类对象抽象出其共性,形成类. 类 ...

  5. [Tool] Git 使用 与 Git Flow

    目录 简介 Git 命令 Git Flow 简介 Git是目前世界上最先进的分布式版本控制系统(没有之一). Linus花了两周时间自己用C写了一个分布式版本控制系统,这就是Git!一个月之内,Lin ...

  6. Linux: 安装NVIDIA显卡驱动

    Linux(Fedora25, 64bit)台式机配备了NVIDIA显卡GTX950,但是仅仅使用开源驱动nouveau,无法发挥NVIDIA显卡的性能,所以可以考虑使用官方提供的显卡驱动. # 先安 ...

  7. 安装Dubbo注册中心(Zookeeper-3.4.6)

    样例视频教程:http://www.roncoo.com/course/view/f614343765bc4aac8597c6d8b38f06fd Dubbo建议使用Zookeeper作为服务的注册中 ...

  8. js原生获取className&多选一

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  9. 用php+mysql+ajax实现淘宝客服或阿里旺旺聊天功能 之 前台页面

    首先来看一下我已经实现的效果图: 消费者页面:(本篇随笔) (1)会显示店主的头像 (2)当前用户发送信息显示在右侧,接受的信息,显示在左侧 店主或客服页面:(下一篇随笔) (1)在左侧有一个列表 , ...

  10. JavaScript深入浅出补充——(一)数据类型,表达式和运算符

    项目基本做完,在进行下一阶段学习之前先看视频学习回顾一下JavaScript 一.数据类型 JavaScript中有五种原始类型和一种对象类型 JavaScript弱类型语言中隐式转换 num-0 字 ...