OPNET学习入门指南

整理文档很辛苦,赏杯茶钱您下走!

免费阅读已结束,点击下载阅读编辑剩下 ...

阅读已结束,您可以下载文档离线阅读编辑

资源描述

1OPNET学习入门指南1.预备知识这部分给大家介绍一下在加入课题组之后,和正式的投入课题开展工作之前大家需要具备的一些基本的背景知识。这些知识都是在大家以后的课题中或多或少,或明或暗的需要使用到的,打下一个扎实的理论基础对后面工作的开展有极大的好处,这个大家往后一定能够体会到。正所谓“磨刀不误砍柴工”,大家应该抓住这段宝贵的时间,尽可能针对这些知识有的放矢的多看,多想,多练习,多讨论,多交流。以便于能更快速的上手工作。1.1OPNET安装OPNET安装过程还是比较复杂的,后面有专门的安装说明,这里主要提醒一下,在安装之前一定要记得把VC的环境变量进行设置,具体的设置方式网上能搜到,书上也有介绍。另外我这里的安装文件有8.1和10.0的,建议使用10.0,因为version高,使用界面更傻瓜一些,而且基本上国内那基本介绍OPNET的书里大多是根据10.0做介绍的。要先安装8.1获得了license再安装10.0,它能自动找到8.1的license。1.2OPNET书籍选用国内OPNET的书就那几本,个人感觉都差不多,讲得不够深入。我一开始在书店买的一本是人民邮电出版社出版的,讲得不详细,我只在学习各种编辑器熟悉菜单的时候用到了它。图书馆一共有六本OPNET的书,讲解最详细的一本是清华大学出版的,陈敏编著的,建议采用,我这里也有这个书的电子档。其它几本可以有选择性的看看:李馨,叶明编的《OPNETModeler网络建模与仿真》的OPNET核心函数介绍章节写得比较好,每个函数的实际应用都写出来了,而且函数也做了相应归类,不多掌握起来快;孟晨编的《OPNET通信仿真开发手册》中的OPNET编程基础部分写得很详实,对一些基本的代码做了介绍,并且2对状态机的强制性状态和非强制性状态的区别以及它们的合理使用讲解得很清楚。当然OPNET学习的最好资料还是OPNET自带的英文帮助Tutorial,上面有各种例子,并且有分类好的最全的核心函数。1.3OPNET建模机制和仿真流程学习OPNET之前,熟悉一下OPNET的建模机制和仿真流程是很有好处的,这样更有针对性,不会出现,打完了书上的例子,结果都出来了但是还不清楚自己在干什么的情况。OPNET采用分层建模的机制,从网络物件层次关系看,提供了三个层次的模型,从低到高依次是进程模型——以状态机来描述协议;节点模型——由相应的协议模型构成,反映设备特性;最上层为网络模型,表现网络的拓扑结构。三层模型和实际的协议,设备网络完全对应,最大限度的贴近了实际的网络系统。下面会对OPNET的这三个域——网络域(networkdomain)、节点域(nodedomain)和进程域(processdomain)进行进一步的介绍。OPNET这三个域分别都对应着相应的编辑器。网络域有项目编辑器和链路编辑器用来对整个网络的框架进行设计—项目编辑器设计网络大小,节点摆放;链路编辑器设计网络拓扑结构,链路的各种参数进行设计。节点域有节点编辑器,用于对各个节点内部进行具体的设计,涉及到各个模块的摆放,各个模块属性的设置;进程域有进程编辑器用来对每个模块里所调用的进程进行编程设计,它是最底层的也是设计中的难点所在,进程的编写实现了每个模块的基本功能。另外还有包格式编辑器用来对系统中所用到的数据包进行设计,探针编辑器用来收集感兴趣的统计量,ICI编辑器则用来创建,查看,编辑接口控制信息。一般opnet系统级仿真的基本流程如下:定义包格式——定义链路模型——定义节点模型——构建网络模型——收集统计量——运行仿真,进行程序调试——观察仿真结果——进行结果分析当然在这个流程开始之前就要对整个系统有一个全面的构想,这个顺序只是方便软件的使用,避免重复性的工作。31.4OPNET中的一些基本概念1.4.1.对象(Object)Object是Model的一部分,其可以在model中扮演下面的功能:a)定义行为b)创建信息c)储存和管理信息d)处理、修改、转发信息e)对事件作出响应f)包含其他的object1.4.2.属性(Attribute)object的Attribute和一些允许访问Attribute或者使Attribute生效的程序组成了object的接口。这些程序可以是OPNET自动生成的,也可以是用户编写的。包含有子object的object称之为复合对象(compoundobject)。1.4.3.模型属性(ModelAttribute)和属性提升(AttributePromotion)Attribute除了可以描述object外,还可以用在model上用来表示model的参数。model的attributes机制可以提高model的可重用性。具体地说,model的attribute被定义为model的一部分,但同时,他们也出现在object里,他们是在object的model被规定后被object获得的。这是object的本能操作。类似这种modelattribute机制,objectattribute也可以被向上传给model,这种机制就是所谓的attributepromotion。Promotion导致objectattribute不再有值,而是作为model的attribute出现在上层属性中。对于一路promote到所有model之上的attribute,我们可以把它看作是simulation的attribute。从而把研究的系统看成是这些attributes的函数。41.4.4.衍生模型(DerivedModels)有的时候,我们想只改变一个model的一些attributes就可以得到一个新的model。这种机制称为模型的衍生(modelderivation)。衍生出的model称为derivedmodel,被衍生的model称为parentmodel,没有parentmodel的model称为basemodel。2.OPNET各域入门介绍2.1.网络域网络域networkdomain定义了通信网的拓扑结构。通信的实体是节点nodes。OPNET提供单向和全双工的点到点链路,也提供总线链路用以允许对任意大小的节点组尽心广播通信。2.2.节点域节点域nodedomain用来对通信设备进行建模,诸如路由器、网桥、工作站、终端等等。节点模块Nodemodel是通过节点编辑器NodeEditor生成,通过一些更小的模块(module)来表现。一些模块具有一定的功能,这些功能已经定义好了,只用通过配置一组内部参数(built-inparameters)就可以了。它们包括各种各样用来在networkdomain连接通信连路的发送器和接收器。还有一些模块:处理器(processors)和队列(queues),也是高度可编程的,它们的动作通过进程(Processmodel)来描述。2.3.进程域进程域是最底层的域也是最难上手的域,如果全部使用OPNET自带的进程模块,那么我们永远只能是个OPNET使用者,但如果你想要搭建系统实现自己的一些想法,那么我们必须得学会进程的编写,开发自己的进程模块,上述到软件开发的层次。进程模型nodemodel中的各个module通过三种链接互连,分别5是:packetstreams,statisticwires,logicalassociations。Packetstreams传送格式化的消息,我们称为packet。统计线Statisticwire传送简单的数字信号和控制信息,一般用于一个module用来监测其他module的性能和状态。Statisticwire和Packetstream都有参数用来配置它们的行为。Logicalassociations用来确认module之间的绑定。目前,它们只被用在发送器和接收器之间,用来表明它们在接入到Networkdomain上的链路时,应当被当作一对module来使用。一个进程(process)可以被认为近似于一个执行程序。OPNET中的Process是基于Processmodel,他们是在ProcessEditor中定义的。进程组(processgroup)由许多process组成,这些process都是在同一个processor或者queue中执行。当仿真开始的时候,每个module只能有一个process,称之为rootprocess。这个process之后能够创建新的process,他们之后也能再创建其他的process。在仿真中被创建的process称之为动态进程(dynamicprocess)。任何时刻只能有一个process处于执行状态。当一个Process开始执行后,我们说这个process被调用(invoked)了。当一个process调用另一个process时,调用(invoking)process被暂时挂起直到被调用(invoked)process被阻止(block)。一个process如果完成了它当前调用的处理就将被阻止。当invokedprocess被阻止时,invokingprocess就将从它挂起的地方继续执行。OPNET中的Process能够对中断(interrupt)或者调用(invocation)产生响应。Interrupt可能产生自processgroup之外的源,或者processgroup中的其他成员,或者这个process自己。Interrupt一般对应于一些事件,包括消息到达、计时器到时、资源释放或者其他模块的状态改变等等。OPNET的processeditor使用Proto-C的语言来描述processmodel。Proto-C基于状态转移图(StateTransitionDiagramsSTD)、一个高级指令库(kernelProcedures)和C或C++的通用部件。STD定义了模型的各个process所处的状态,以及使进程在状态之间转移的条件。这种条件称之为transition。KernelProcedures主要一系列的函数包组成,这些包详见参考文档。STD在ProcessEditor中生成。STD除了一些传统的STD具有的能力外,6还有一系列扩展:a)状态变量(StateVariables)。process可以拥有一些私有statevariables,这些statevariables可以是任意的数据类型,包括OPNET专有的、通用的C/C++、用户定义类型等等。这种能力使得process能够灵活的控制counter、routingtables、与性能相关的statistics、需要转发的message。任意组合的statevariable可以在一个process所有的动作和决定中使用。b)状态执行(StateExecutives)。通过C/C++语言描述了process进入和离开状态时的操作,典型的操作包括:修改状态信息,创建或接收消息,更新发送消息的内容,更新统计数据,设置计时器以及对计时器作出响应。c)转移条件(TransitionConditions)。通过C/C++语言描述布尔变量,要涉及interrupt的属性以及statevariables的组合。d)转移执行(TransitionExecutives)。转移时可能会定义一些通用的操作。3.OPNET进程编程心得3.1.OPNET自带模块介绍OPNET一共有以下几种模块:进程模块(processor),队列模块(queue),各种类型的发射机和接收机。其中支持processmodel的能够自觉编写进程进行建模的模块只有进程模块和队列模块,发射机和接收机等出于方便和功能的原因,已经被预定义了,只需编辑其属性即可。Queue还可以让用户定义内部的子队列(subqueues),以及如何管理这些subqueue的方法。但是它们的基本建模技术还是相同的。3.2.OPNET进程驱动原理所有进程process由interrupt驱动。所以process的第一个操作就是判断interrupt的类型,进而解析interrup

1 / 10
下载文档,编辑使用

©2015-2020 m.777doc.com 三七文档.

备案号:鲁ICP备2024069028号-1 客服联系 QQ:2149211541

×
保存成功