OPNET 了解与学习

OPNET 了解与学习

一.仿真研究流程

(一)理解系统

•建模者必须理解所提出的系统,以便准确建模。•模型不会比建模者所理解的更准确。

•建议:获取所建模系统的说明书(标准、细则等)。

(二)理解目标
•需要通过仿真来回答的问题是那些?
•例如
• 通过将以太网集线器更换为FDDI集线器,将会得到多大的吞吐率提升?
• 在我的蜂窝网中采用自定义的协议将会提升多少效能?
(三)确定内容
•从问题中提炼出具体的研究目标,例如
• 定量分析特定接收机的吞吐率。
• 测量改变一条链路的传输速率后对系统的影响。

(四)目标决定了模型的粒度

什么是粒度?•粒度是细致程度。•选择足够回答所提问题的粒度

• 粗粒度(牺牲细节)允许更快速的执行和更简单的设计。

• 细粒度(牺牲性能)允许更高的准确度,但是仿真运行更慢,设计更复杂。

(五)定义数据输入和输出
•选择输入相当重要。•如果已经 理解了系统,理解了目标, 确定了内容, 明确了问题,你将能够定义合适的数据输入。

输入可以代表模型的先天特性(例如连接性等),或者是一组参数(例如负载量等)。
•在研究系统的时候,固定大部分输入,仅在一定范围内更改一两个输入。

•确定哪些输出是需要的(吞吐率、时延等),并采用最佳形式表达(图、表、动画等)。

(六)结果的准确性
•应该对输出的准确性做出判断
• 所有的输出是否都有意义?• 能够给出证明吗?• 模型行为是否符合设想?

•技巧:先预测输出,然后与实际所得结果做比较

(七)结果的细致性
•根据需要,调整输入范围——放大、缩小。

•考虑• 收集更丰富的统计量?• 改变粒度?• 对系统的其他方面进行建模?

(八)结果的统计有效性
•模型运行是否达到稳态?
• 从早先的瞬态收敛到之后的稳态。
• 观察平均值的上升情况、队列的增加情况或者其他还在变化的输出。这往往意味

着系统尚未达到稳态。

•增加仿真时间,直到得到稳定的输出。
•无法达到稳态的模型往往意味着系统不稳定。

•观察各统计值,确保模型达到稳态。

•仿真是否足量?

• 运行多次仿真,改变随机数种子并采用不同的间隔。• 做足量仿真,确保可信区间足够紧凑

二.OPNET了解

•网络对象:节点(固定、移动、卫星),子网,节点(点对 点,总线,无线)。

•节点对象:模块(处理器、队列、发射机、接收机、天线) ,连接(报文流、统计线)。
•进程对象:状态(初始、强制、非强制),转换线。
•核心函数:预先写好的用于通信和常用操作的函数。
•对象属性:用于配置对象行为的动态参数。

•报文:信息交换的基本单元。

事件驱动仿真
事件是在一个特定时刻的一个特定动作的请求。

•OPNET仿真由事件驱动。在仿真中,时间在事件发生时前进。

事件表
•OPNET仿真维护一个全局事件表。
•所有对象共享同一个仿真时钟。•事件依照时间先后顺序排列。第一个事件位于表头。•事件包含一套数据。
•事件完成后,从表中删除

仿真核心
•仿真核心(Simulation Kernel,简称SK)是管理事件表的实体。
•SK向对应模块依次递交事件。

•SK接收来自模块的请求,并将新事件插入事件表。

中断
•中断是位于表头的事件,而该事件由仿真核心递交给对应模块。

•事件所含数据可以由被中断的模块访问。•某些模块可以设置初始中断。

中断的递交
•当一个中断被递交到一个模块,控制权由仿真核心转移到对应模块。
•如果模块是处理器或队列,中断被递交到对应模块中的进程。

OPNET 了解与学习

有些事件必须在仿真初始进入事件表
• 数据发生器的初始事件
• 处理器或队列的begsim事件
•事件表通常只含少量事件——一个事件同时引发另外一两个事件后,被删除。
•事件表大小总是在不断缩胀。
•事件在执行前挂起,挂起的事件可以被取消

并发事件

•当两个事件同时发生时,如何处理?•事件仍然顺序处理,尽管看起来是在同一个时刻发生的。

•仿真核心用两种方法确定事件先后次序
• 先预约先服务

• 优先级  •模块和事件被设置优先级•高优先级的先服务

状态转换
•在出口代码执行完毕后,测试所有状态转换线的转换条件。
•有且只有一个条件被满足。•转换到对应状态。
•具有条件“default”的状态转换当且仅当其他所有转换条件不满足。

•没有设置转换条件的转换线是无条件转换。

例子:OPNET 了解与学习

1. BEGSIM中断被递交到src.gen对象。OPNET 了解与学习

2. 进程从初始状态Init执行(黑色箭头所指)。

3. 执行Init的入口代码。

4. Init是强制状态,因此立即执行出口代码。

5. 执行状态转换到Wait。

6. 执行Wait的入口代码。

7. 使用KP预约自中断(第8行),此举在事件表中增加一项。OPNET 了解与学习
8. 在Wait设置中断点。

9. 阻塞,并释放控制权。

10.仿真核心删除第一个事件,使下一个事件处于事件表头。仿真时钟依然在0.0秒。OPNET 了解与学习
11.仿真核心向src.queue递交一个BEGSIM中断。

12.src.queue中的进程获得控制权。执行到非强制状态后,阻塞并归还控制权

13.仿真核心删除前一个事件。仿真时钟变为4.3秒。
14.该中断是src.gen之前产生的自中断,中断点在Wait状态处。

15.执行Wait状态的出口代码。

16.测试状态转换条件

17.转换到Send状态。OPNET 了解与学习
18.执行Send状态的入口代码,调用op_pk_send ()发送报文。此举在事件表中增加一项类型为STRM的事件。

19.注意Send是强制状态,立即执行其出口代码。
20.状态转换到Wait。
21.Wait状态的入口代码设置自中断,阻塞。

22.仿真核心处理下一个事件。

仿真结束-仿真结束的条件
• 事件表置空
• 仿真时间
• 某进程调用核心函数op_sim_end()

• 出现致命错误

总结
•强制状态与非强制状态的执行时序。
•处理器或队列的begsim intrpt属性与BEGSIM中断。

•控制权在进程与仿真核心间的动态转换。

进程建模的步骤
• 前四个步骤:设计
• 步骤 1:定义上下文
• 步骤 2:进程级分解
• 步骤 3:事件列表(每进程)
• 步骤 4:事件响应表(每进程)
• 以上步骤反复进行
• 最后的步骤:在OPNET中实现
• 步骤 5:进程行为的规范(每进程)

OPNET 了解与学习

OPNET 了解与学习

状态类型:Init初始状态   Idle空闲状态   ACK Wait等待应答   Link Down链路失效

OPNET 了解与学习

OPNET 了解与学习

OPNET 了解与学习

事件类型

OPNET 了解与学习