起因
在OPNET仿真过程中,我经常被问新手问到的一个问题就是遇到下面这个错误怎么办?
具体来讲呢,就是仿真的消息窗口中,出现了下面这些字样:
<<< Warning >>>
Repository missing process model (tdma/或者其他模型)
...
<<< Program Abort >>>
The set of models necessary for running the simulation is incomplete.
Check that all the 'repositories' attribute are complete.
一般来讲,我会告诉他们:设置里搜一下repo,找到Network Simulation Repositories, 把值全都删掉,留一个<empty>
,然后重新运行仿真就OK了。
但是我一直特别好奇的是,为什么新手们经常会遇到这个问题?而实际上,我从事OPNET网络仿真这个行业十多年,从来都没有遇到过这个问题。他们到底是从那里看到了什么样的教程,会让他们去调整这个配置属性?还是说他们使用的教育版本身就有默认的一些配置?
今天,终于在群友的帮助下,我找到了这个问题的原因。
探究根源
群友告诉我,他们是在官方教程里的一个步骤中,看到的这个配置步骤:
这我就更好奇了,为什么官方教程里会有这个配置步骤?难道是官方教程里有什么问题吗?正常来说,官网的教程都是很权威的,应该不会有什么问题,也不会故意将用户往死胡同里带啊?
我去重新看了一下官方的教程,发现官方的教程里,确实有这个配置步骤。但是奇怪的是,即使按照这个配置步骤,运行仿真也是没有问题的。
然后我又去找群友确认,他们究竟是在什么情况下遇到的这个问题。得到的结果是:设置了这个属性之后,直接仿真是正常的。但是在他们引入了其他模型代码之后,就出现了这个问题。
这下问题好像就清晰了。
问题根源
这个问题实际上是非常简单的,但是大家在使用教程的时候,并没有理解为什么需要设置这个属性,以及这个属性的作用。这就造成了在后续的仿真过程中,遇到了这个问题。
简单来说:
- 在OPNET中,
Repository
可以理解为预先将指定的代码进行编译,生成一个repo.dll的文件。 - 在仿真的时候,如果我们设置了
Network Simulation Repositories
这个属性,OPNET会根据我们设置的值,找到对应的repo.dll中模型代码。 - 但是如果我们想要仿真的场景模型中,使用了没有包含在repo.dll中的模型代码,就会出现上述 missing process model 的错误。
- 这个功能实际上是OPNET为了方便用户而提供的一个功能,允许让用户在仅仅安装了OPNET相关的软件,而没有安装编译环境(Visual Studio)的情况下,仍然可以仿真。因为常见的系统模型,都已经被包含了在stdmod这个repo中。
- 官方教程中,设置这个属性,是为了让用户在仿真的时候,能够无需配置编译环境,直接使用官方预编译的模型库。
- 很多同学在做完官方教程之后,直接运行仿真,发现没有问题。要么就以为这个属性是必须的,要么就忘记设置的stdmod删除。所以在使用任何不包括在stdmod中的模型代码时,就会出现上述 missing process model 的错误。
- 实际上,这个属性是可选的,只要你安装OPNET的时候,配置好了相应的编译环境,就可以直接编译包括stdmod在内的所有模型代码。
解决方案
知道了问题的原因,解决方案就很简单了,任选其一即可:
- 直接删除:在OPNET的设置中,找到
Network Simulation Repositories
这个属性,删除所有值,留一个<empty>
。 - 允许使用repo之外的模型:在
Network Simulation Repositories
属性中,额外增加一个名称为none
的repo。
终极方案
但是对于所有的初学者来说,我的建议是:
在任何情况下,都不要设置Network Simulation Repositories
这个属性,老老实实配置好编译环境。
如果出现了这个问题,直接删除所有的repo,留一个<empty>
。
另外,如果删掉之后还报错,那就是你的模型代码有问题。
OK,今天就到这里,欢迎大家多多交流。