OPNET常见错误
编撰者  北京邮电大学 吕召彪
lvzhb_2001@bj1860
仅学术交流,勿商业用途;如需转载,请勿肢解
初学OPNET,个人觉得要注重三个方面:
1,OPNET的网络仿真机制,包括三层建模、离散事件驱动仿真机制、通信机制、有限状态机等,主要是看帮助文档中的原理部分;
2,OPNET的核心函数,多看帮助文档中各核心函数的介绍以及示例很有帮助;3,掌握ODB的调试,个人感觉OPNET的调试不难,关键是要善于从OPNET的仿真原理入手来可能的错误所在,我的经验就是按着数据走的流程来分析。
另外,有时间的话,可以一个OPNET提供的标准模块代码来看看,有利于理清通信的流程和掌握写代码的一些常用技巧。
说明:
1,下面材料主要来自自己平时遇到错误以及网上论坛的帖子,本人无意侵犯他人版权。
2,由于是平时的笔记,因此其中不乏错误和错字,也显随意潦草,大家见笑!
1,unresolved externals symbol:
错误消息如下:
err log——
<<< Program Abort >>>
* Time:      21:15:50 D??úè? áù?? 02
* Product:  modeler
* Program:  op_runsim (Version 10.0.A PL1 Build 2291)
* System:    Windows NT 5.0 Build 2195
* Package:  Simulation Kernel
* Function:  sim_load_repos_load
* Error:    Error encountered rebuilding repository -- unable to proceed
* Function call stack: (builds down)
------------------------------------------------------------------------
Call  Block
Count  Line#  Function
------------------------------------------------------------------------
0)          1  1073741928  0x00004c00 [name not available]
1)          1  1879048703  0x00004c00 [name not available]
2)          1  -805306207  0x0000c400 [name not available]
3)          1    284  m3_main
4)          1    857  sim_main
5)          1    975  sim_init_phase2
windows错误恢复6)          1    278  sim_load_models
7)          1  1269  sim_load_repos_load
------------------------------------------------------------------------
编译是通过的,仿真时——
Creating library E:\LuZhaobiao\1\??????àí\my papers\OBSí???·????£Dí\delay_test-delay_test1.lib and object E:\LuZhaobiao\1\??????àí\my papers\OBSí???·????£Dí\delay_test-delay_test1.p
dpt_propdel.dev32.i0.ps.obj : error LNK2001: unresolved external symbol _link_delay E:\LuZhaobiao\1\??????àí\my papers\OBSí???·????£Dí\delay_test-delay_test1.dll : fatal error LNK1120: 1 unresolved externals
网友们分析的各种原因:
1),由函数调用栈可见,在主函数运行前就已报错,这和运行仿真时反馈的错误一致(建立repository在开始仿真之前进行),所以无法使用ODB进行调试。从编译时的提示信息来看,应该是没有到模型中引用的link_delay。解决的方法就是在FILE/Declare 将link-delay文件包括进来。『采用这个方法解决了以上问题』
但是可以利用ODB下编译发现是编译哪个模型或外部文件时报错,确定错误范围。
2),对于unresolved external symbol,应该表示引用的external symbol没有到定义,你查查 link 中的 model attribute 和你的 Process中有没有用到提示中的 symbol,需要 extern 声明一下。
另外,声明了太多的本模型下没有用到的外部文件,也会导致出现这样的错误,解决方法就是去掉不用文件的声明。
3),自己在其它编辑器上写的h和c代码可以在你要用到那个c中的函数的Process中选择File-->Declar 中选中你自己写的ex.c吧,这样让OPNET知道外部的文件,编译好象意味着能到c中的函数,只是到了一个声明而已 。
4),是link model的延时参数没有设置正确仔细对照tutorial看看
【 在 landmass (江山) 的大作中提到: 】
∶run 时出现错误信息:
∶Creating library C:\op_models\pksw\pksw_lib and object
∶  C:\op_models\pksw\pksw_p
∶ dpt_propdel.i0.ps.o : error LNK2001: unresolved external symbol
∶ _link_delay
∶ C:\op_models\pksw\pksw_so : fatal error LNK1120: 1
∶ unresolved externals
∶ 怎么办?
5),是版本不符的问题?nbsp;在configure simulation时,点击左下角的Declare 然后选择包含link_delay
【 在 haobow (拣漏成功) 的大作中提到: 】
∶ 编译成功,运行仿真时出现以下错误:
∶ unresolved external symbol _link_delay
∶ fatal error LNK1120: 1 unresolved externals
∶ 以上错误信息是vc返回的。感觉像是没有联接opnet关于链路的标准库
∶\opnet8.0c\...\
∶ models\std\links。但我在系统变量中关于opnet的目录都设了的,包括lib,  ∶ 去年五月份在学校里里用得好好的,大半年不用就忘了怎么设得了。请大虾支招。
unresolved externals symbol:
如何发现未声明的外部文件:
去掉开始的_,然后前面几个单词就是为声明的外部文件名前面字符。如
_oms_data_def_entry_access
则是没有声明oms_data_def文件。
2, unreferenced local variables——定义了本地变量,但是没有引用过。一般属于warning。
3,无法写入文件
<<< Recoverable Error >>>
write to file failed
File Path: E:\LuZhaobiao\1\??????àí\my papers\OBSí???·????£Dí\delay_test-delay_test1_data.of
T (51.1843), EV (19594437), MOD (top.de_0.p_24)10:24 2004-6-6
write to file failed
File Path: E:\LuZhaobiao\1\??????àí\my papers\OBSí???·????£Dí\delay_test-delay_test1.ov
T (1000), EV (393027170), MOD (NONE)
原因分析:
1)一般最好用英文的目录和文件名保存文件,不要用中文的目录和文件名。否则,opnet可能无法在指定的中文文件夹下建立文件。
4,最后没有通信,仿真中止。
Simulation terminated without final communication.
Check DES log (select 'Open DES Log' in 'DES' menu) for possible error messages. 1)重新仿真一次后就没有该提示了。原因分析,似乎是计算机反应迟钝。
5,output stream index (0) is out-of-range.
<<< Recoverable Error >>>
* Time:      19:51:40 D??úáù áù?? 05
* Product:  modeler
* Program:  op_runsim (Version 10.0.A PL1 Build 2291)
* System:    Windows NT 5.0 Build 2195
* Package:  process (_packet_capsule) at module (top.de_0.q_0)
* Function:  sim_strm_send
* Error:    Output stream index (0) is out-of-range.
T (3234.39), EV (4231), MOD (top.de_0.q_0), KP (op_pk_send)
* Function call stack: (builds down)
------------------------------------------------------------------------
Call  Block
Count  Line#  Function
------------------------------------------------------------------------
0)          1  1073741928  0x00004c00 [name not available]
1)          1  1879048703  0x00004c00 [name not available]
2)          1  -805306207  0x0000c400 [name not available]
3)          1    284  m3_main
4)          1    935  sim_main
5)          1  2364  sim_ev_loop
6)      2115    387  sim_strm_insert
7)      4232    522  sim_obj_qps_intrpt
8)      2116    21  _packet_capsule [arrival enter execs]
9)      2256  6918  op_pk_send (pkptr, outstrm_index)
10)      2256    470  sim_strm_send
------------------------------------------------------------------------
原因分析:
1)输出流索引超出范围,可是0是输出流索引的起始编号,不可能超出的。结果发现,这是一个队列模块,而该队列模块只有输入流,没有输出流连接。解决方法,添加一个处理器模块(sink),用包流连接队列和处理器。
6,指定了未存在的对象
可恢复错误。
<<< Recoverable Error >>>
* Time:      10:41:40 D??úè? áù?? 06
* Product:  modeler
* Program:  modeler (Version 10.0.A PL1 Build 2291)
* System:    Windows NT 5.0 Build 2195
* Package: External Tool Support Programmable Editor Interface / Topology Subpackage
* Function:  Ets_Topo_Child_Get_By_Name