opnet陈敏教程第四章学习笔记

第四章 Modeler常用编辑器

1.问题:下图中,pr_0不是收信机么,pt_0不是发信机么,为什么包流是从pr_0流向pt_0的呀?

pr_0是收信机,pt_0是发信机,这个图的意思是收信机先接受信息,然后经过两个处理机对收信机pr_0接收到的信息进行处理,然后经由发信息pt_0将处理后的信息发送出去。

2.属性的提升:

与属性的隐藏相反,OPNET规定等级低的参数可以不断提升(promoted),最后可变成级别最高的仿真属性这种用法主要用在测试某个参数对网络仿真结果有何影响的场合,用户需要把在底层的参数提升出来,就可以在仿真之前在仿真属性设置对话框中调整这些参数。

3.问题:(1)接口相关操作举例实验中,在节点模型窗口中找不到p_l.ss属性,随便选一个属性并将其状态修改为promoted,并不能在项目编辑器中看到它。

(2)在(3)中不将mobile、satellite的supported设为no,在对象模板中还是之呢个看到一个系欸但类型,而不是两个或三个。

4.有限状态机(FSM)。绿色的状态机是强制状态机,红色的是非强制状态机。

5.在OPNET中,几个模块组成一个节点,一些节点组成一个网络。进程模型定义一个模块的行为,所以它是构建网络的基本。

6.3个常用编辑器的运用举例

本例程将构建这样一个模块:它对接收的包计数并将计数器的值写入统计量中,最终以图形方式显示结果。对于每个接收到的包,进程模型增加一个变量的值,并记录该变量。

(1)一个进程模型实际上是一个有限状态机(FSM:finite state machine),它带包模块的行为(状态)及其逻辑(状态转移规则)。有限状态机使用状态和状态转移决定模块采取什么行为来响应一个事件。状态——模块的行为。状态转移——状态改变以响应一个事件。

(2)FSM提供了3个可以写代码的地方:

1)入口执行代码:当模块转移到一个新状态时执行的代码;

2)出口执行代码:当模块离开一个状态时执行的代码;

3)状态转移执行代码:响应一个特定事件时必然引发状态转移,在转移过程中顺带执行的代码。因此也可以称为响应一个特定时间所执行的代码。

(3)在仿真开始时(仿真开始,也可以视为一个事件),进程模型被首次调用,进入Initialization状态。在初始化后(将包计数器设置为0),将转移到Idle状态等待第一个包到达。当第一个包到达时,进程模型被再次激活并转移到Arrival状态。Arrival状态将包计数器变量加1,并将包销毁,然后立即回到Idle状态等待下一个包的到达。该过程如下图所示。

(4)转移到强制状态将一次执行入口执行代码和出口执行代码,然后立即转移到其它状态。一个新创建的状态默认是红色的非强制状态,转移到该状态时,执行完入口执行代码后,模块将程序的控制权转回仿真核心,模块在此停滞,等待下一个事件到达激活模块。

本例构建的进程模型中init和arrival状态是强制状态。init状态在初始化变量后直接推进到idle状态,而arrival状态在对包计数并销毁后将返回idle状态。

(5)状态转移分有条件和无条件的两种,有条件的状态转移必须满足条件才能通过。

只有当一个包到达时进程模型才能从idle状态转移到arrival状态,因此需要为idle与arrival之间的状态转移设定条件。

为状态转移线设置条件时,如果条件是default,那么要注意字母要小写,default是OPNET自带的默认条件。

(6)仿真核心为整个仿真有秩序地运行维护了一个事件列表,当一个事件到达事件列表的队首时变成了一个中断,并调度给指定的模块。

(7)为什么要设置从idle到其自身的一个称为default的状态转移?

当仿真运行时,仿真核心将处在事件列表队首的事件变成中断,并将它发送至合适的模块。假设进程模型接收中断,并且处在idle状态,如果ARRIVAL条件满足,则顺利转移到arrival状态,但是进程模型也可能收到异常中断,ARRIVAL条件不能满足,这是如果没有其它满足条件的转移,模块将找不到目的状态而出错,default这个默认转移就是起着“最后一道防线”的作用。

(8)在OPNET中,经常使用宏来替换复杂的转移条件和状态转移执行代码,这样可以使有限状态图看起来简洁明了。一般在头块(header block)中使用#define表达式来定义宏。

eg. #define ARRIVAL (op_intrpt_type () == OPC_INTRPT_STRM)

(9)变量可以定义在两个地方。对于定义在临时变量块的变量,它们的值在两次中断触发之间不保留,也就是说,当模块将程序控制权交还给仿真核心时,临时变量的值不受保护,在下次模块得到程序控制权时,它们的值可能已经改变。而对于定义在状态变量块中的变量,当模块将程序控制权交还给仿真核心时,它们的值受到保护。

(10)对于强制状态,入口执行代码和出口执行代码的执行是连贯的,因此一般将强制状态的程序都放在其入口执行代码中。

(11)统计量句柄(Statistic Handle)是一种确定动态产生的全局和局部统计量的数据结构。统计量句柄的数据类型是Stathandle,获得统计量句柄的唯一方法是通过狠心函数的Stat函数集来注册统计量。注册统计量时将为其指定一个唯一的名称,并和时间一起存储在一个输出矢量中。局部统计量用在特定处理器或队列中;全局统计量由仿真模型中的实体共享,每个实体分布式地作用域输出矢量。

(12)进程模型可以和节点模型同名,它们不会混淆,因为文件的后缀不同,前者是*.pr.m,而后者是*.nd.m。

(13)问题:我做出来的Node Statistics下根本就没有node packet count。重新做了一遍还是一样的结果。我每一步都是按照他教程来的。这一步是选择要收集的统计量,没有node packet count感觉应该是节点模型Node Models的问题,但是我Node Models是跟着一步步做下来的,没有问题啊,进程模型也能编译成功。找不到哪里出了问题,导致Node Statistics下没有node packet count。

我觉得这应该不是什么大问题,应该是版本之间的问题,这里的不一样对后面运行仿真还有仿真结果都没有什么影响,所以就先掠过,不考虑该问题了。

(14)问题:运行仿真会报如下图所示的错误。上网查看到有人说要将环境变量设置中Cygwin的位置放在vs之后,就可以解决该问题。但是我尝试了以下,环境变量界面会报变量太大,超出了最大范围的错,这个问题目前还没有解决,还需进一步尝试。

该问题解决了,就是把环境变量中Cygwin放在vs之后就可以解决。

离散的数据才能真正反映包的离散到达。

(15)关于查看OPNET统计结果的一些提示:

1)查看的统计结果可以显示单个的也可以同时显示多个;2)可以在显示多个的面板上添加或删除统计结果;3)可以设置显示统计结果的横轴、纵轴是否显示,显示虚线还是实线;4)可以直接导出结果到Excel中进行进一步编辑或保存;5)可以设置统计结果显示的风格是线型图或者是柱状图。

7.天线模型编辑器(Antenna Pattern Editor)的坐标系是左手坐标系。该编辑器中有平滑图像的按钮,平滑图像的尖锐边缘和毛刺。

8.调制曲线反映的是误码率和无线传输过程中信噪比之间的关系,反图形化的定义方式不够精确,因此在OPNET Modeler中可以通过EMA代码来创建调制曲线。

9.调制曲线编辑器(Modulation Curve Editor)中也由用于平滑图像的按钮,用于平滑图形中的尖锐边缘和毛刺。

10.图标库编辑器(Icon Database Editor)的图片格式应为图片编辑器支持的格式,如TIFF、BMP格式,否则图片将不能显示(如GIF或JPG格式)。

注意:创新图标并保存图标库文件(*.icons)后,必须在Edit-->preference中将新的图标库文件名加入icon_dbs属性栏中,重启OPENT,新的图标才能生效。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值