opnet知识总结

opnet知识总结这篇文章将提供了很多 opnet 的要点 miss 掉的部分可以补一下原文链接已不可查 OPNET 结构 OPNETArchite 注 此部分可参考 OPNETDocumen MainMenu ModelingConc ModelingOver OPNETArchite OPNET 为通信网络和分布式系统的性能评估提供了一个全面的开发环

这篇文章将提供了很多opnet的要点,miss掉的部分可以补一下
原文链接已不可查。
OPNET结构 (OPNET Architecture)

(注:此部分可参考OPNET Documentation: Main Menu->Modeling Concepts->Modeling Overview->OPNET Architecture)
OPNET为通信网络和分布式系统的性能评估提供了一个全面的开发环境。由许多工具组成,这些工具暗中建模和仿真的步骤分为三个门类:定制(Specification),数据收集和仿真(Data Collection and Simulation),分析(Analysis)。

 
1.模型定制(Model Specification)
 
1.1定制编辑器(Specification Editors)

    a)Project Editor:定义网络模型(network models),network models由子网(subnets)和节点模型(node models)。Project editor具有基本的仿真和分析能力(还包括统计)。
    b)Node Editor:定义节点模型(node models),node models是network models中的一部分。Node models由一系列模块(modules)组成,这些模块内部含有进程模型(Process models)。模块还有可能包含参数模型(?! parameter models)。
    c)Process Editor:定义进程模型。进程模型控制module的行为,也有可能会涉及parameter models(?!)。
    d)Link Model Editor:创建,编辑,查看链路模型(link models)。
    e)Packet Format Editor:定义包格式模型(packet formats models)。packet format指明packet所存储的信息的结构和顺序。
    f)ICI Editor:创建,编辑,查看接口控制信息(interface control information ICI)格式。ICI用来进程间交流控制信息。
    g)Antenna Pattern Editor:创建,编辑,查看发送器和接收器的天线类型。(for radio)
    h)Modulation Cure Editor:创建,编辑,查看发送器的模型曲线。(for radio)
    i)PDF Editor:创建,编辑,查看概率密度函数。PDFs用来控制一些事情,比如源模块的发送频率。








 
1.2模型域

    OPNET分为三个模型域:网络域(network domain)、节点域(node domain)和进程域(process domain),也是整个模型的主要层次。
1.2.1网络域(network domain)
    network domain定义了通信网的拓扑结构。通信的实体是nodes。
    OPNET提供单向和全双工的点到点链路,也提供总线链路用以允许对任意大小的节点组尽心广播通信。
1.2.2节点域(node domain)
    node domain用来对通信设备进行建模,诸如路由器、网桥、工作站、终端等等。Node model是通过Node Editor生成,通过一些更小的模块(module)来表现。一些模块具有一定的功能,这些功能已经定义好了,只用通过配置一组内部参数(built-in parameters)就可以了。它们包括各种各样用来在network domain连接通信连路的发送器和接收器。还有一些模块:处理器(processors)和队列(queues),也是高度可编程的,它们的动作通过进程(Process model)来描述。
    node model中的各个module通过三种链接互连,分别是:packet streams,statistic wires,logical associations。Packet streams传送格式化的消息,我们称为packet。Statistic wire传送简单的数字信号和控制信息,一般用于一个module用来监测其他module的性能和状态。Statistic wire和Packet stream都有参数用来配置它们的行为。Logical associations用来确认module之间的绑定。目前,它们只被用在发送器和接收器之间,用来表明它们在接入到Network domain上的链路时,应当被当作一对module来使用。
1.2.3进程域(process domain)
    一个进程(process)可以被认为近似于一个执行程序。OPNET中的Process是基于Process model,他们是在Process Editor中定义的。
    进程组(process group)由许多process组成,这些process都是在同一个processor或者queue中执行。当仿真开始的时候,每个module只能有一个process,称之为root process。这个process之后能够创建新的process,他们之后也能再创建其他的process。在仿真中被创建的process称之为动态进程(dynamic process)。
    任何时刻只能有一个process处于执行状态。当一个Process开始执行后,我们说这个process被调用(invoked)了。
    当一个process调用另一个process时,调用(invoking)process被暂时挂起直到被调用(invoked)process被阻止(block)。一个process如果完成了它当前调用的处理就将被阻止。当invoked process被阻止时,invoking process就将从它挂起的地方继续执行。
    OPNET中的Process能够对中断(interrupt)或者调用(invocation)产生响应。Interrupt可能产生自process group之外的源,或者process group中的其他成员,或者这个process自己。Interrupt一般对应于一些事件,包括消息到达、计时器到时、资源释放或者其他模块的状态改变等等。
    OPNET的process editor使用Proto-C的语言来描述process model。Proto-C基于状态转移图(State Transition Diagrams STD)、一个高级指令库(kernel Procedures)和C或C++的通用部件。STD定义了模型的各个process所处的状态,以及使进程在状态之间转移的条件。这种条件称之为transition。Kernel Procedures主要一系列的函数包组成,这些包详见参考文档。
    STD在Process Editor中生成。STD除了一些传统的STD具有的能力外,还有一系列扩展:
    a)状态变量(State Variables)。process可以拥有一些私有state variables,这些state variables可以是任意的数据类型,包括OPNET专有的、通用的C/C++、用户定义类型等等。这种能力使得process能够灵活的控制counter、routing tables、与性能相关的statistics、需要转发的message。任意组合的statevariable可以在一个process所有的动作和决定中使用。
    b)状态执行(State Executives)。通过C/C++语言描述了process进入和离开状态时的操作,典型的操作包括:修改状态信息,创建或接收消息,更新发送消息的内容,更新统计数据,设置计时器以及对计时器作出响应。
    c)转移条件(Transition Conditions)。通过C/C++语言描述布尔变量,要涉及interrupt的属性以及state variables的组合。
    d)转移执行(Transition Executives)。转移时可能会定义一些通用的操作。


















 
1.3模型,对象,属性(Models,Object,Attributes)

1.3.1对象(Object)
    Object是Model的一部分,其可以在model中扮演下面的功能:
    a)定义行为
    b)创建信息
    c)储存和管理信息
    d)处理、修改、转发信息
    e)对事件作出响应
    f)包含其他的object
1.3.2属性(Attribute)
    object的Attribute和一些允许访问Attribute或者使Attribute生效的程序组成了object的接口。这些程序可以是OPNET自动生成的,也可以是用户编写的。包含有子object的object称之为复合对象(compound object)。
1.3.3模型(Model)
1.3.4模型属性(Model Attribute)和属性提升(Attribute Promotion)
    Attribute除了可以描述object外,还可以用在model上用来表示model的参数。model的attributes机制可以提高model的可重用性。具体地说,model的attribute被定义为model的一部分,但同时,他们也出现在object里,他们是在object的model被规定后被object获得的。这是object的本能操作。
    类似这种model attribute机制,object attribute也可以被向上传给model,这种机制就是所谓的attribute promotion。Promotion导致object attribute不再有值,而是作为model的attribute出现在上层属性中。对于一路promote到所有model之上的attribute,我们可以把它看作是simulation的attribute。从而把研究的系统看成是这些attributes的函数。
1.3.5衍生模型(Derived Models)
    有的时候,我们想只改变一个model的一些attributes就可以得到一个新的model。这种机制称为模型的衍生(model derivation)。衍生出的model称为derived model,被衍生的model称为parent model,没有parent model的model称为base model。















 
2.包通信建模(Modeling Communications with Packets)

    OPNET中的一种基本通信结构是packet。packet主要由三个存储域组成。第一个域是packet field,是一组用户定义的值。第二个域pre-defined field由一组预定义的值组成,用来跟踪和统计。第三个域是transmission data field,用来支持可定制的通信链路模型。
    Packet分为两类:格式化的(formatted)和非格式化的(unformatted)。formatted packet的各个域都是按照所谓的packet format的模版定义的。Packet format是在Packet Format Editor中创建的,在那里定制了一组域名、数据类型、大小(按bit)和缺省值。unformatted packet在刚创建时没有任何域,这些域都是后来一次一个加上去的,而且只能通过数字编号指示,而不是通过名字。
    Packet可以在OPNET模型中通过几种通信机制传输。在node level,是通过packet stream;在network level是通过links;还有第三种传送机制,称为packet delivery,支持各个module之间的packet发送,不管这些module在网络中的位置以及他们之间有没有物理连接。


 
3.数据采集和仿真(Data Collection and Simulation)

    建模的主要目的是为了获取对系统性能的测量或者对系统的一些行为作观察。OPNET通过在这个系统里创建一个可执行的model支持这个功能。有几种机制用来在一个或者更多的系统中收集所需的数据。
 
3.1仿真输出的数据类型(Simulation Output Data Types)

    OPNET提供了许多输出类型,主要有output vectors、output scalars、animation。当然,用户也可以自己定义所要的输出类型,但是一般情况下都直接使用OPNET提供的数据类型。
3.1.1输出向量(output vectors)
    output vector是输出数据中最常见的输出结果,它实际上是一组数据对(pairs of real value)的集合,被称之为条目(entry)。一个vector可以包含了任意数量的条目,这些条目采自单个仿真。条目的第一个值可以看作是独立变量(independent variable),第二个值则是依赖变量(dependent variable)。在OPNET中,这也被称做横坐标(abscissa)和纵坐标(ordinate)。在绝大多数情况下,independent variable都是仿真时间(simulation time),它随着仿真的进行单调的增加。换句话说,大多数情况下,vector代表了我们所关心的量值随时间的变化。当然也有随着别的东西变化的:)
3.1.2输出标量(output scalar)
    相比起vecotr,scalar则是一个值。一般来说,标量都是采集的测量数据的函数,比如:平均值,概率,或者峰值之类的。scalar更为有用的地方在于多次仿真后作出随系统参数变化的曲线。OPNET仿真在output scalar文件中记录scalar statistics。与output vector不同的是,output scalar包含的不仅是一个仿真的结果,而是多个仿真的结果。原因之前已经提到过了。
3.1.3特定应用的统计(Application-Specific Statistics)
    scalar和vector都可以被自动地计算和记录一些预定义的统计。这些预定义的统计一般都和模型中一些特定的对象的测量值有关,比如:queue sizes、link throughputs、error rates和queuing delays。而且,在仿真中记录对一些特定应用统计的计算也很常见, 这些统计也被放在了scalar和vector输出文件中。
    定制统计可以在process model中声明,在这种情况下,OPNET把他们加入到使用这个process的module的内建统计中去。定制统计按范围划分为本地的(local)和(global)。
    local statistic只由声明它的processors和queue单独维护。它适合记录那些只跟本地相关的事件,比如CPU利用率等等。
    global statistic由很多模型中的实体共享。它适合记录那些关系到整个系统性能和行为的信息。比如忽略源和目的的端到端延迟。









 
3.2采集数据选择(Selecting Data for Collection)

    OPNET数据采集机制的缺省设置是关闭的,所以要显式地激活特定的统计,从而让结果能够输出到合适的输出文件中去。这通过在仿真时设置一系列的探针(probe)实现。这些probe可以指向scalar、vector等等。这些probe通过Project Editor下的Chose Result(?!我的ms是Project Editor下Simulation->Choose Statistics)操作定义。更多的高级probe要在Probe Editor中定义。
    为了使统计更简单,指针还可以选择一些选项,比如通过选择时间窗来减少数据量等等。

 
4.分析(Analysis)

    仿真的第三阶段包括检查收集的数据。一般来说,绝大部分的数据都放在output scalar和output vector文件中。OPNET在Project Editor中提供了对这些数据的基本访问能力,在Analysis Tool中提供了更高级的图像和数值处理能力。

4.1数值数据分析
    Project Editor和Analysis Tool都可以选择output vector文件,并且导入单个或多个vector,并将他们的轨迹(traces)显示出来。多条traces可以显示在一张图上,我们称这张图为分析面板(analysis panel)。analysis panel的展示方式可以通过analysis configuration来配置。
    Analysis panels提供了许多数值处理的操作,用来对traces或者vector进行操作,从而产生新的数据做图。这些操作详见参考文档。
    Analysis Tools链接到了Filter Editor上,Filter Editor能够使用数学过滤器(mathematical filter)来处理vector和trace。这里不详述。



 

 

 

 

进程域(Process Domain)

1.1进程环境(Process Environment)

1.1.2.3动态进程上的操作(Operations on Dynamic Processes)

1.1.3本地进程资源(Local Process Resources)

1.1.3.4子队列(Subqueues)

1.1.3.5属性(Attribute)

1.2进程模型组成(Process Model Components)

1.2.1状态转移图(State Transition Diagrams)

1.2.5.1动态进程(Dynamic Processes)

1.2.5.2函数调用(Function Calls)

2.进程模型的开发方法(Process Model Development Methodology)

 

 

 

节点域(Node Domain)

1.1处理器模块(Processor Modules)

3.1节点模型属性(Node Model Attributes)

3.2节点属性接口和衍生节点模型(Node Attribute Interfaces and Derived Node Models)

3.4统计提升(Statistic Promotion)

4.1子队列抽象和包编号(Abstract Subqueue and Packet Indices)

4.2实现优先级队列(Implementing Priority Queues)

4.3实现有限队列(Implementing Finite Queues)

5.分层协议建模(Modeling Layered Protocols)

6.共享资源建模(Modeling Shared Resources)

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/205122.html原文链接:https://javaforall.net

(0)
上一篇 2026年3月19日 下午6:45
下一篇 2026年3月19日 下午6:45


相关推荐

  • vue组件库

    vue组件库vue 组件库 https github com vuejs awesome vue drag and drop

    2026年3月19日
    2
  • android toast居中显示_android Toast 弹出在屏幕中间位置以及自定义Toast

    android toast居中显示_android Toast 弹出在屏幕中间位置以及自定义ToastToast我想我们应该使用的都很多,一般我们使用默认设置较多,但是默认设置往往不能满足我们的需求,那我们现在来自定义下:默认Toast:Toast.makeText(MainActivity.this,”点击按钮”,Toast.LENGTH_SHORT).show();设置Toast位置:通过setGravity设置Toast位置,可以是Gravity.CENTER:中间Gravity.BOTT…

    2025年11月3日
    2
  • 结构体和类的区别

    结构体和类的区别结构体和类的区别 在做一个项目时 使用了较多的结构体 并且存在一些结构体的嵌套 即某结构体成员集合包含另一个结构体等 总是出现一些奇怪的错误 才终于下决心好好分析一下到底类和结构体有啥不同 虽然它们很相似 但确实有很大的不同 用不好难免出的问题会比较多 现总结一下 一 结构体和类非常相似 1 定义和使用非常相似 例子如下 publicstruct st

    2026年3月26日
    3
  • pandas中的loc和iloc_pandas获取指定数据的行和列

    pandas中的loc和iloc_pandas获取指定数据的行和列实际操作中我们经常需要寻找数据的某行或者某列,这里介绍我在使用Pandas时用到的两种方法:iloc和loc。目录1.loc方法(1)读取第二行的值(2)读取第二列的值(3)同时读取某行某列(4)读取DataFrame的某个区域(5)根据条件读取(6)也可以进行切片操作2.iloc方法(1)读取第二行的值(2)读取第二行的值(3)同时读取某行某列(4)进行切片操作loc:通过行、列的名称或标签来索引iloc:通过行、列的索引位置来寻找数据..

    2022年8月30日
    7
  • 怎么配置mysql数据源_mysql怎么样配置ODBC数据源

    怎么配置mysql数据源_mysql怎么样配置ODBC数据源下面以 mySql 数据库为例 简单介绍一下 ODBC 数据源的配置方法 1 在网上下载一个是 MYSQL 数据库的 ODBC 驱动程序 mysql connector odbc 5 1 7 win32 msi 以默认选项安装该文件 2 打开 控制面板 管理工具 数据源 ODBC 3 打开数据源 ODBC 在用户 DSN 选项卡中点击 添加 按钮 弹出 创建新数据源 窗口 4 选中 MYSQLODBC

    2026年2月20日
    5
  • navcat premium 15 for mac 激活码【最新永久激活】「建议收藏」

    (navcat premium 15 for mac 激活码)好多小伙伴总是说激活码老是失效,太麻烦,关注/收藏全栈君太难教程,2021永久激活的方法等着你。IntelliJ2021最新激活注册码,破解教程可免费永久激活,亲测有效,下面是详细链接哦~https://javaforall.net/100143.html1M2OME2TZY-eyJsaWNlbnNlSWQi…

    2022年4月2日
    200

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号