首页 OPNET学习笔记

OPNET学习笔记

举报
开通vip

OPNET学习笔记OPNET学习笔记 OPNET 14.5打开ODB调试窗口 首先点击运行仿真的小人图表。 , 在打开的窗口中如图示,先设置simulation kernel 为development. 3. 在左边树状结构中找到Execution->debugger. 4. 然后点击Run就可以了看到如下: 5. 接下来就可以进行调试。 OPNET 14.5 与VC联调 搞了好些天,头大~书上的内容全是10.0以前版本的设置方法,14.5版本变化太大,已经完全不适用了。 现在终于弄明白opnet 14.5如何...

OPNET学习笔记
OPNET学习笔记 OPNET 14.5打开ODB调试窗口 首先点击运行仿真的小人图表。 , 在打开的窗口中如图示,先设置simulation kernel 为development. 3. 在左边树状结构中找到Execution->debugger. 4. 然后点击Run就可以了看到如下: 5. 接下来就可以进行调试。 OPNET 14.5 与VC联调 搞了好些天,头大~书上的 内容 财务内部控制制度的内容财务内部控制制度的内容人员招聘与配置的内容项目成本控制的内容消防安全演练内容 全是10.0以前版本的设置方法,14.5版本变化太大,已经完全不适用了。 现在终于弄明白opnet 14.5如何和VC联调。 其实opnet14.5与VC联调不再需要另外特别的设置,不用再到edit—preference中去找这个找那个。 只需要设置好opnet和VC的环境变量就好。 一般的方法是ODB初始化以后,打开VC,在Debug 菜单下单击attach to process,然后选择op_runsim_dev.exe(或者op_runsim_opt.exe),这样就可以利用VC 提供的调试功能进行OPNET 程序调试。一般情况下attach to process 选项框为空,这可 能不是VC和OPNET程序本身的问题,因为有些应用软件的进程和op_runsim_dev.exe(或者op_runsim_opt.exe)进程冲突,如一些杀毒软件,acrobat 等,或者是其他进程开得过多所致。 这时打开任务管理器,找到op_runsim_dev.exe,右键选择调试。这时会弹出VC。 弹出来的VC工程没有原代码,需要自己手打打开过程原代码,然后在代码中设置断点。 回到ODB中点击continue即可在断点出停止。 其实……就是这么简单…… 今天放弃了opnet 14.5 安装了10.0,可是安装后发现licence需要用opnet8.1的破解,又安装了8.1并破解,然后果断卸载,后来因为感觉缺少了不少功能,又使用11.5的破解程序,可是licence只有60个了,再次安装8.1,问题出现了,程序无法运行,纠结了一上午,发现,原来第一次卸载不彻底,第二次安装路径和第一次又不同,于 是…… 解决方法: 1,启动Modeler,观察dos窗口(用alt+prtscr,如果滚屏太快的话),记下错误的路径名。 2,把你目前安装的OPNET的整个目录,copy到你刚才记下的错误路径中。说白了就是欺骗一下系统~ 3,再启动Modeler,估计就能进去了。 4,打开edit->preference,修改所有设置错误的路径,改为正确路径,其中mod_dirs的修改最为痛苦。 5,记得按OK按钮。 6,删除错误路径的所有文件。 7,不放心的话再启动一次OPNET。 Done!! 1)<<>> Invalid Memory Access 内存无效访问是调试程序中最常碰到的错误,一般是程序中的指针出了问题,可以尝试用以下办法来解决: (1)在edit->preference 中给comp_flags 加/Od /Zi 字段,给bind_shobj_flags 加/DEBUG 字段; (2)在edit->preference 中找到handle_exception,将TRUE 改为FALSE,这样程 序中的异常就可以由VC 来调试; (3)运行仿真,如提示出现异常,点击cancel,则自动打开VC,并且debug 会停留在发生异常的指针处。但是有时候VC 的debug 有可能停留在让人看不懂的汇编语言处,此时可以观察发生错误的事件event_id 值,在ODB 调试的时候使用evstop 指令设置断点,让程序中断在出错的事件前,接下来可以采取下列两种方法之一: (1)采用OPNET 与VC 联合调试,在VC 中通过单步执行查看; (2)用ODB 的next 指令一个一个时间看,往往配合ltrace 和fulltrace 指令查看程序运行状况。碰到这个问题我们也可以缩短仿真时间,在确保仿真能够完成前提下,在仿真属性中选择Advanced->Profiling->Collect detailed profiling for function,之后出现每一个内存使用的统计。 2)<<< Recoverable Error >>> Object repository construction failed due to errors encountered by the binder program (bind_so_msvc) ----- <<< Program Abort >>> Error encountered rebuilding repository -- unable to proceed 出现这个错误一般是编译连接出错unresolved external symbol,常见的有以下可能性: (1)Pipeline Stage (C code)文件名与函数名不一样,这时改为同名就行了。 (2)进程模型用到一个无法定位的外部函数,这时在进程模型编辑器中选择 File->Declare External Files…,然后选中含有该外部函数的外部文件。 (3)外部文件用到一个无法定位的函数,这时查看是否漏掉include 需要用到的头文件。 3)<<>> No true transitions from state () T(), EV(), MOD(), PROC (sim_pro_err_transit) 状态程序执行完毕找不到出口,有限状态机要能够正常运行 要求 对教师党员的评价套管和固井爆破片与爆破装置仓库管理基本要求三甲医院都需要复审吗 在任意条件下,每个 状态执行完毕之后都必须发生转移,出错的情况有以下两种: a)根本没有转移条件及相应的状态。 b)没有满足条件的转移。 4) Unable to write file (*.pr.m) compilation failed Source code file couldn't be generated 查看模型文件属性是否设置为只读,编译模型文件需要刷新其内容,去掉只读属性。 5)<<>> Standard function stack imbalance FIN 和FOUT/FRET未配对。 仿真期间遇到了第2、3、5条错误:首先是外部变量的声明,由于是按照书上的步骤一步一步做的,所以还是有过声明的,然而~悲剧就发生在所声明的变量和代码里的变量不一致~~这个小错误毁了我一个上午的时间~ 接下来是错误3,错误发生在没有给第二个process模块添加状态转移线,以至于仿真还没有开始就已经结束了。 最后就是错误5,这个就不是我的问题了~是陈敏老师编书的时候的失误,在第一个process模块头代码中,使用了FIN函数,而结尾的时候却没有用FOUT与之配对~~估计会有N多初学者栽在这个地方~ 虽然最后仿真成功了~仍然有几个小问题没有解决~ 根本找不到矢量的那个结果~谁知道在哪,怎么查看,结果里怎么木有global statistics,ete delay在哪里, 关于统计量的收集 最近做了不少实例,或多或少理解了OPNET仿真的原理和过程。然而想要自己来实现一个通信过程的仿真还是颇有难度,今天就遇到了统计量收集的问题,纠结了许久才找到了正确的办法,在此记录下: 我们用OPNET做网络仿真的时候,有些我们感兴趣的统计量OPNET并没有提供,这是就需要我们自行定义了。简单来说,自定义统计量主要分为三步: 1. 在进程编辑器里,Interfaces > Global Statistics,也可以是local Statistics,定义一个统计量的名字,如Delay 、Throughput之类,这里不妨定义为My Stat。 2. 在SV编辑器定义一个统计句柄Stathandle,假设取名为my_stathandle. 3. 让句柄与统计量关联起来,my_stathandle=op_stat_reg ("My Stat",OPC_STAT_INDEX_NONE, OPC_STAT_GLOBAL),这一句一般写在FSM的init状态里。这里我们没有把这个统计量"My Stat"分组,如果分组的话,可能语句会有不同,大概不能用OPC_STAT_INDEX_NONE这个参数,我曾经分过组,结果编译时报错,我没仔细看opnet documentation。 4.然后就是在程序里,在你需要的地方赋值给这个句柄了,这里我们假设变量abcde由你 感兴趣的值。 double abcde; …… // 如何取得abcde得值要看你的需要了。 op_stat_write (my_stathandle, abcde); 1)state variable /* Counts total packets. */ int \pk_count; /* Statistic to record packet count. */ Stathandle \pk_cnt_stathandle; 2)local statistics 定义:packet count 3)注册统计量 pk_count = 0; pk_cnt_stathandle = op_stat_reg ("packet count", OPC_STAT_INDEX_NONE, OPC_STAT_LOCAL); 4)搜集统计量 ++pk_count; op_pk_destroy (op_pk_get (op_intrpt_strm ())); op_stat_write (pk_cnt_stathandle, pk_count); 关于这个用法,在OPNET 10.5 Tutorial 的packet switching一节里也有介绍,可以参考。 再附上从别人博客转来的具体操作办法: 先说些统计量的概念。 统计量(Statistics),用来显示仿真结束后产生的数据统计结果,一般情况下有三种统计量:标量统计量,矢量统计量,动画。以图形,或者动画的形式显示仿真结果,直观而且易懂。但是,在很多情况下系统模块自带的统计量并不能满足仿真者的统计要求,这就要求自己能创建自定义统计量。统计量分为两种:局部统计量和全局统计量,局部统计量与特定的对象模块有关,如一个发送节点,节点中的进程模型等等,而全局统计量提供整体系统的相关信息,仿真中的各个对象都可以影响统计结果。 下面是我自定义统计量的操作步骤: 1.打开一个进程模型(process model),在进程模型的菜单Interfaces 下拉选项中有局部或者全局统计量 如下图所示: Local Statistics 和Global Statistics 的操作步骤一样,故本文以Global Statistics 为例来说明情况。 假定,建立了一个名为:packet_size的全局统计量。 2.必须为这个全局统计量建立一个统计句柄,此步操作需在状态变量块(SV)中操作,创建一个统计句柄(Stathandle),命名为PZ; 3 前面两部分别创建了全局统计量packet_size和统计句柄PZ,但是必须让两者联系起来才能起到想要的作用,故必须用 opnet的核心函数进行统计量注册,此步骤一般在有限状态机(FSM)的init中的入口代码中实现。 注册代码为:PZ =op_stat_reg("pakcet_size",OPC_STAT_INDEX_NONE, OPC_STAT_GLOBAL); 注册好统计变量后就可以使用了。第5行是packet_size 统计量的注册语句。 4。在你需要使用此统计量的函数块,编写相应的代码,赋值给这个统计句柄PZ,就可以收集到全局统计量 packet_size 了。
本文档为【OPNET学习笔记】,请使用软件OFFICE或WPS软件打开。作品中的文字与图均可以修改和编辑, 图片更改请在作品中右键图片并更换,文字修改请直接点击文字进行修改,也可以新增和删除文档中的内容。
该文档来自用户分享,如有侵权行为请发邮件ishare@vip.sina.com联系网站客服,我们会及时删除。
[版权声明] 本站所有资料为用户分享产生,若发现您的权利被侵害,请联系客服邮件isharekefu@iask.cn,我们尽快处理。
本作品所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用。
网站提供的党政主题相关内容(国旗、国徽、党徽..)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。
下载需要: 免费 已有0 人下载
最新资料
资料动态
专题动态
is_219945
暂无简介~
格式:doc
大小:91KB
软件:Word
页数:9
分类:互联网
上传时间:2017-09-26
浏览量:82