OMNet++仿真基础 OMNet++是面向对象的离散事件模拟工具,为基于进程式和事件驱动两种方式的仿真提供了支持,OMNET++是网络中一种常用的模拟工具。尤其在传感器网络中比较常用,因为比较简单方便,更重要的是,它是一个开源软件,不需要money去购买。
mobility-fw是在OMNET++的基础上开发的一个框架,我们只需要在已经定好的框架中添加东西。这又进一步降低了开发的难度。但在实际的开发过程中,会遇到一些看起来比较小的问题,比如,拓扑图比较小,连线比较密集,节点下会显示一些字符。这会使得拓扑图看起来是一团黑乎乎的。
如何去掉连接线呢?
方法是:修改mobility-fw/core/channelControl下的的ChannelControl.cc文件中的connectTo函数:
原函数如下:
void ChannelControl::NicEntry::connectTo(ChannelControl::NicEntry& other)
{
//ev <<"NicEntry: connecting nic #"<<nicId<< " and #"<<other.nicId<<endl;
cGate *localoutgate = requestOutGate();
localoutgate->connectTo(other.requestInGate());
outConns[other.nicId] = localoutgate;
//ev <<"/t gate #"<<localoutgate->id() <<" --> #"<<localoutgate->toGate()->id()<<endl;
};
修改后如下:
void ChannelControl::NicEntry::connectTo(ChannelControl::NicEntry& other)
{
//ev <<"NicEntry: connecting nic #"<<nicId<< " and #"<<other.nicId<<endl;
cGate *localoutgate = requestOutGate();
localoutgate->connectTo(other.requestInGate());
localoutgate->setDisplayString("m=m,50,50,50,50;o=#AAA,0;");
other.requestInGate()->setDisplayString("m=m,50,50,50,50;o=#AAA,0;");
outConns[other.nicId] = localoutgate;
//ev <<"/t gate #"<<localoutgate->id() <<" --> #"<<localoutgate->toGate()->id()<<endl;
};
然后在DOS环境下在channelControl目录下运行:nmake -f Makefile.vc clean与
nmake -f Makefile.vc
将生成的所有的obj文件拷贝到LIB文件夹下即可。
如何去掉节点的显示的字符呢?(这个比较麻烦点)
因为在Windows下omnet的安装目录下的源文件是不全的。那么必须下载一个Linux下的安装程序(因为包含所有的源代码),在次之前还要安装tcl软件,并且设置好环境变量(include,lib,bin)。
首先,修改 modinsp2.tcl 文件,注释调206和211行,如下所示:
# $c create text $x [expr $y2+$width/2+3] -text $name -anchor n -tags "dx"
} elseif [info exists tags(i)] {
$c create image $x $y -image $img -anchor center -tags "dx tooltip submod $submodptr"
# $c create text $x [expr $y+$sy/2+3] -text $name -anchor n -tags "dx"
然后:利用vc或其它c++工具运行 src/utils 下的 tcl2c.c 文件,生成 tcl2c.exe ,拷贝到utils文件夹下,默认的会在src/utils/Debug下,
然后运行nmake -f Makefile.vc clean与nmake -f Makefile.vc,在运行的过程中,可能需要修改部分源代码(因为找不到一些头文件的目录)(也可以设置环境变量,源文件目录下的 include,lib,bin),最后会生成 tkenv.lib,将它拷贝到OMNET安装目录的lib目录下。
这样就可以去掉显示字符了。