OPNET学习Word下载.docx
《OPNET学习Word下载.docx》由会员分享,可在线阅读,更多相关《OPNET学习Word下载.docx(13页珍藏版)》请在冰豆网上搜索。
(4)在attachprocess时,如果看不到任何process,尽量关闭不必要的程序,只留下opnet的project窗口和VC。
如果还不行,就要给VC打SP5补丁了。
不过有一种更简单的方法,就是在任务管理器中,在进程中找到op_runsim_dev.exe进程,右键,然后调试,即可和VC进行联调。
(5)修改Simulationmodel的environmentfiles时,一般不需将ForceCompile设为enable,因为调试时一般processmodel都已编译好。
如果把ForceCompile设为enable的话,每次启动simulation都会把项目中包含的所有的processmodel重新编译,会耗很长时间。
但是为了保证代码为最新改写过得,建议还是enable为好。
(6)如果不想让debug窗口自动关闭,可以把consle_exit_pause改为TRUE,仿真完后会提示Press<
ENTER>
tocontinue.按两次<
才会关闭debug窗口。
(7)编译的时候产生调试信息的参数是/Z7或/Zi,(注意:
/Z8并不是合法的参数)。
调试时还需要关闭编译器的优化功能,所以还要加上/Od。
连接的时候需要保留调试信息,所以在bind_shobj_flags后面要加上/DEBUG。
(8)configsimulation里面的debug,目的是让op_runsim运行在debug模式下,等效于console下面的-debug。
force_compile的作用是每次编译时都重建所有的模块,以使你在VC下面看到的源程序都是最新的。
(9)在VC调试时,从断点后开始单步运行,最后总会走到一个向汇编中的机器代码的地方。
odb那边也不能敲任何命令。
这很正常,那个汇编的地方就是OPNET的内核之类的东西。
不用管它,在VC里面再选run就行了。
程序会运行到VC的下一个断点,或者ODB重新可以敲命令了。
(10)最基本的一个问题,在OPNET调试时,报错:
bind_so_msvc:
Unabletoexecutebindprogram(Win32errorcode:
2)
CheckthatVisualC++hasbeeninstalledcorrectly,andthat
itsBINdirectoryisincludedinthePathenvironmentvariable.
那么可以按照一般的方法来手动添加环境变量,但是就笔者经验,即使当时通过,之后可能还会出现问题。
最彻底的办法就是VC和OPNET重装一遍,先安装VC,安装时,要选择注册环境变量。
OPNET也不能偷懒,就一步一步按顺序安装吧
OPNET常见问题
1.如何设置全局变量?
在 .h文件里定义变量,然后在process的HEAD BLOCK 里include
这个头文件,就可以使用全局变量了。
2.OPNET中如何更方便的看程序?
1.opnet中的设:
preferences->
editor_prog
2.sourceinsight的设置
operation->
symbolLookups->
Projectsymbolpath->
AddProjectto
Path
(添加自己创建一个包含所有opnetmodel和include目录的project)
当然,这个有些不足,就是那个sv,tv,hb等中定义的内容,不能进行关联。
3.OPNET中的函数FIN,FRET以及FOUT都是什么功能?
为了使一个用户定义的函数被执行,该函数必须与一个特殊的堆栈跟踪代码相连。
堆
栈跟踪技术靠在函数的入口点和出口点插入预处理器宏
指令完成(一个函数只有一个入口点,但可以有多个出口点(由C语言的return声明决定
))。
这些宏指令为:
FIN、FOUT和FRET。
FIN被插入到
函数的入口点,FOUT被插入到函数的出口点,但却不返回任何值,FRET被插入到函数的
出口点,返回一个值。
注意这些宏指令不需要以分号结
束(它们自我包含),FIN的参数中也不需要双引号。
Opnet提供的所有的示例模型都包含了这些宏指令,并且建议用户定义的函数也包含这
些宏指令。
如果FIN、FOUT、和FRET被正确插入了用户
代码中,我们就可以使用op_vuerr来找出程序错误的位置,哪怕是在一个嵌套的模型函
数调用中。
4.localstatistics和globalstatistics的区别?
localstatistics表示的是本地的统计量,而globalstatistics是全局的统计量,
比如你做了一个节点模型,此节点发送数据包,然后编程把发送的数据包数分别写入
一个localstatistics和globalstatistics中,假如你在工程中用到了两个这样的
节点,那么你可以分别viewresult每一个节点发送的数据包数,而globalstatistics
则是这两个节点一共发送的数据包数。
5.Objid和userid的区别?
Objid是系统分配的,全局唯一,整数。
userid是自己可以设置的,可以不唯一。
6.如何将模块添加到OPNET中?
edit->
preferences->
mod_dirs添加模块路径即可。
7.为什么每次新建一个project都给我保存在c:
\op_models目录下,我想换一个地
方,怎么设置?
edit->
mod_dirs中,新建一个路径,并作为第一路径即可。
8.想查找一个变量的使用场合,包括不同process,不同node中的header和funtion,如
何做?
在OPNET中变量是在一个PROCESS中存在的。
不同的PROCESS之间则是通过进程之间的通信
机制来共享信息的。
因此你查找变量的作用范围应该是
在一个PROCESS内的。
编译后每个PROCESS会产生一个C或C++文件。
在那个文件里就可以
查到变量的应用地方。
不同的进程可能具有相同的
ATTRIBUTE.而为了减少NODE的ATTRIBUTE数目可以采用MERGE/RENAMEATTRIBUTE的方式
。
这时这些ATTRIBUTE具体对应到各个PROCESS的哪个
ATTRIBUTE可以通过NODEINTERFACE菜单下的MERGE/RENAMEATTRIBUTE找到。
9.请问OPNET怎样将图导出来?
一:
可以从Topology->
ExportTopology->
……导出Project的几种图形,有bitmap,ht
ml等格式。
node,process都可以从file中的Export
Bitmap导出拓扑图。
二:
对于分析出来的曲线,按鼠标右键,其中有个ExportGraphDatatoSpreadshee
t,然后会有提示说你文件保存在什么地方,一般缺省
是保存在c:
\op_admin\tmp目录下。
文件你可以用UltraEdit打开来看,是两列数据
,一列是仿真时间,一列是仿真数据,然后你就可以想
用什么工具画图就无所谓了。
补充:
其实很好用的还有就是直接抓图,效果不错。
10.在opnet中关于时延的问题。
数据速率是用来和包长结合计算传输时延的,而“delay”属性是用来描述电波的传播时
延的。
在点到点链路属性里,“delay”就是总传播时
延;
在多点链路里,“delay”指单位距离的传播时延。
用户可以修改传播时延的计算
方法,那个“DistanceRelated”就是表示在自定义的
传播时延pipelinestage里基于距离计算传播时延。
11..在opnet中关于统计一些速率方面的参数。
统计流速率的时候,首先应该在LocalStatistics中将这个统计项的CaptureMode设成
sum/time,然后在程序中每次收到一个数据包,就将
这个包的长度L写入,比如op_stat_write(handle,L),随后再马上调用一个op_stat_wr
ite(handle,0)来结束这次写入,就可以了。
12.关于beginintrpt和endsimintrpt
仿真0时刻时需要进行的初始化,则需要设beginintrpt,仿真结束时刻需要进行一些工
组,则需要enableendsimintrpt
13.用VC调试的时候,statevariable的值无法看到,怎么办?
用op_sv_ptr这个指针。
它指向了所有的状态变量。
14.关于ElapsedtimeandSimulationtime?
一个是仿真程序运行的时间,反映仿真程序执行的速度。
而另一个是所仿真的系统的时
间进度,反映当前的仿真执行的进度。
仿真时间的修改是通过事件的发生来进行的。
譬如说你在0s时作一件事持续时间为5秒,
5秒钟结束后会触发一个事件,这个事件将系统的仿真
时间改为5s。
你使用OPNET的模型,它在接收到事件时会进行相应的仿真时间的更新。
而
你自己也可根据需要更新仿真时间。
你采用
op_intrpt_schedule_self(op_sim_time()+需要的时间,intrptcode),就可以在当前时
刻的所需的时间以后产生一个中断,从而触发一个事件
,系统的仿真事件也就被更新为此时间。
OPNET中数据的收集方式是可选的,可以选择为
逐点的,也可以选择按照漏斗进行平滑的根据自己的需
要而定。
15.OPNet运行时无法进行C代码编译的解决办法
当你出现这种情况时,OPNet总是提示说comp_msvc不能执行,因为VisualC++没有正
确安装,这时你需要修改系统的环境变量。
具体方法如
下(Win2000):
1.正确安装VC++,缺省目录为(以下均以缺省目录为例)
C:
\ProgramFiles\Mic
rosoftVisualStudio
2.在桌面鼠标右击"
我的电脑"
图标,选择"
属性"
.在出现的界面中,选择"
高级"
然
后选择"
环境变量"
3.这里需要修改用户的"
用户变量"
而不是"
系统变量"
增加下列参数:
变量名include
变量值C:
\ProgramFiles\MicrosoftVisualStudi0\VC98\atl\include;
\ProgramFiles\MicrosoftVisualStudio\VC98\mfc\include;
\ProgramFiles\MicrosoftVisualStudio\VC98\include
变量名lib
\ProgramFiles\MicrosoftVisualStudio\VC98\mfc\lib
\ProgramFiles\MicrosoftVisualStudio\VC98\lib
变量名MSDevDir
\ProgramFiles\MicrosoftVisualStudio\Common\MSDev98
变量名path
\ProgramFiles\MicrosoftVisualStudio\Common\Tools\WinNT
\ProgramFiles\MicrosoftVisualStudio\Common\MSDev98\bin
\ProgramFiles\MicrosoftVisualStudio\Common\Tools\ProgramFiles\
MicrosoftVisualStudio\VC98\bin
4.
按"
确定"
按钮,退出设置.
如果你在安装VC的时候让安装程序来修改环境变量就完全可以就避免这些步骤.
16..请问opnet中的移动台的trajectory(即运动轨迹)能否用一个专门的代码来生成
,而不是用鼠标事先画出?
如何实现opnet与此段代码的
交互?
要做到运动轨迹的交互性,你得修改一些process和pipeline。
运动的结果无非是和基
站的距离变化,然后利用衰落模型得到snr,ber等参数
,所以你可以修改dra_propdel.ps.c,umts_ue_dra_power,umts_dra_snr等process.
如在dra_propdel.ps.c中把start_pro_distance用自己
的距离函数代替即可。
17.前面提到的随机性服从一些随机分布,如高斯分布、泊松分布等等,我想问一下,
opnet中有没有现成的概率分布函数供调用?
如何调用
?
用op_dist_outcome这一类的函数,在onlinedocument中介绍的很详细。
18.对opnet的认识,它是在project、node以及process三个域上进行仿真,而且好像代
码都是在process域中的进入、退出以及转化这些地方
编写,那么要实现的移动台随机产生的代码好像没有一个公共的全局性的平台可以放置
(就像C语言中的全局变量声明段)?
这个问题如何解决
函数应该在process的FB中,FSM只是调用而已,全局变量通常在外部.h中,也可在HB中
19.OPNET的输出结果选项“Asis”,“Average”,“Time_average”有什么区别?
在这些选项下得到的曲线不一样:
Asis,就是不做任何处理,
Average就是做平均
Time_average就是做时间平均
20.请问OPNET中的animation指什么?
激活节点变化过程记录功能并记录statistic的变化过程。
21.OPNET中如何删除一个senario,而保留工程?
在menu->
senarios->
managesenarios里。
22.请问OPNET中的animation指什么?
激活节点变化过程记录功能,并记录statistic的变化过程,可以作为动画演示。
23.opnet的节点域中处理模块之间如何共享变量?
可以试试以下2种方法:
1。
在HB中定义全局变量
2。
添加节点属性,然后使用op_ima_xxx_xxx()函数,就是那个IMA包。
24.在nodeinterfaces里面设置属性为set,promoted和hidden有什么意义?
hidden可以在仿真的时候看不到设置的这个参数,promoted可以在仿真的过程中根据需
要改变参数的值
25.我在学习opnet的tutorial的packetswitching1时最后仿真出现下面的错误,请问
如何解决?
CreatinglibraryPS_pksw_net-scenario1.i0.nt.libandobjectPS_pksw_net-
io1.i0.nt.exp
dpt_propdel.i0.ps.o:
errorLNK2001:
unresolvedexternalsymbol_link_de
PS_pksw_net-scenario1.i0.nt.so:
fatalerrorLNK1120:
1unresolvedexter
在运行仿真时,选择declareexternal
file,将link_delay.h文件包含即可。
26.请问opnet里如何提取统计信息作为反馈控制变量?
例如将丢失率提取出来后,通过
函数将其反馈回模型中进行控制。
可以试试stat_intrpt函数。
27.模型中的数据线中的srcstream[n]和deststream[n]中括号中的序号n分别表示
什么意思?
op_pk_get(STRMNUM)的参数,会根据n来选择数据线的。
28.pipelinestage的函数是怎么调用的啊?
为什么我的数据在被接收端的时候那几个
pipeline函数并没有执行完呢?
只执行了3个函数,后
面就没有了,结果数据不知道扔哪去了,上层也没有stream中断是怎么回事呢?
pipelinestate函数体接口是规定的,由KP调用。
在stage2有连通性的检查,如果f
alse,则以后的stage都不需执行了。
29.仔细察看了一下程序,FIN和FOUT都是配对的。
在一个Idle的状态中,什么操作也没
做。
但是程序执行了好长时间之后,突然告诉说
Abnormalfunctionstackfunction。
就是在Idle状态出的错。
可是哪个状态根本就是
空操作。
而在.pr.c文件中,发现所有的process的.pr.c
文件中的那个最全的函数都是只有FIN,没有FOUT的。
请问出现上述错误还有可能是何原
因?
查看事件列表,有可能是事件列表满的缘故,你可以试着改变preference里面的一个event_speed_parameter参数出现该问题的设置不同,出现
的时间也会不同。
30.请问OPNET的背景路由流量的如何配置?
三种方法:
applicationconfigi.
conersationpair
linkload
31.怎样在mac层获取在pipelinestage中计算的某些参数的数值,如接收功率的数值?
可以用pwr=op_td_get_dbl(pkptr,OPC_TDA_RA_RCVD_POWER)。
32.我对某个pipeline函数做了一点修改然后以另外一个名字另存了一下,但是在模块
中却不能把原来的pipeline函数改成重新命名的
pipeline函数这是怎么回事啊?
你修改后的文件名要与函数名相同,然后得用OPNET自带的EXTERNALINTERFACE提供的工
具编译就可以了。
OPNET与VC调试经验总结
基于DebugginginOPNETwithMicrosoftVisualC++调试的文档(资料下载区提供)
,有一些经验总结如下:
可以从文档中的示意
图中看出。
(建议可以故意在一个p
rocessmodel中加一条语法错误的语句,然后编译看列
出的出错信息。
(4)在attachprocess时,如果看不到任何process,尽量关闭不必要的程序,只留下
opnet的project窗口和VC。
如果还不行,就要给VC打SP5
补丁了。
不过有一种更简单的方法,就是在任务管理器中,在进程中找到op_runsim_de
v.exe进程,右键,然后调试,即可和VC进行联调。
(5)修改Simulationmodel的environmentfiles时,一般不需将ForceCompile设为e
nable,因为调试时一般processmode