- 浏览: 885658 次
- 性别:
- 来自: 太原
文章分类
- 全部博客 (198)
- Linux/Unix (38)
- TinyOS / NS-2 for『WSN』 (44)
- 思想的拼图 (5)
- 开源 OpenSource (2)
- Framework 开发框架 (0)
- Software Engineering 软件工程 (2)
- IT项目管理 (6)
- Networking 网络技术 (2)
- Java (6)
- C语言 ANSI C (22)
- .NET / C# (9)
- C++ (12)
- Web 语言 Html/Xml (5)
- Groovy on Grails (1)
- Algorithm 算法 (1)
- Database 数据库技术 (5)
- Tools (21)
- VM 虚拟机 (3)
- WSN (wireless sensor network) (2)
- Linux 命令专辑 (3)
- PHP (0)
- 办公软件 (3)
最新评论
-
cfczdws:
感谢楼主,查了半天终于发现居然是htmlentities()做 ...
htmlentities()函数把中文转成了乱码 -
decoxiaohan:
这本书的名字 有谁知道????~~~
OMNeT++中文用户手册(完全版) -
huonie:
怎么下载啊
OMNeT++中文用户手册(完全版) -
huonie:
没有内容啊
OMNeT++中文用户手册(完全版) -
kyx0413:
谢谢先 先看看
OMNeT++中文用户手册(完全版)
OTcl Linkage 联接
添加新的基础网络对象去扩展NS,通常需要从C++代码中得到OTcl linkage(联接), 对象的类用C++来编写由于它的高效性。 本节介绍了NS中C++/OTcl联接, 并给出新建一个简单的名叫"MyAgent"代理的示例,"MyAgent"代理没有任何行为(i.e. no packet creation and transmission). Figures 18 到 21 列出了C++ source file for "MyAgent"。 本节最后是一个OTcl脚本用来测试"MyAgent"是否被实现。
假设用C++新建了一个网络对象的类"MyAgent",它是从"Agent"类衍生出来, 然后他能够建立一个OTcl对象的实例。为了实现这个功能我们必须定义一个联接对象"MyAgentClass", 它从"TclClass"衍生得来。 这个联接对象创建了一个有指定命名的OTcl对象(这个例子名为是"Agent/MyAgentOtcl"), 并建立一个联接在OTcl对象和C++对象("MyAgent")之间, 它的实例运行"create"成员函数中指定的程序。Figure 18 表示"MyAgent类"和联接类的定义。
Figure 18. Example C++ Network Component and The Linkage Object
当NS开始运行, 它运行静态变量(static variable) "class_my_agent"的构造函数, 这样一来"MyAgentClass"的实例被建立了。 在这个处理过程中, "Agent/MyAgentOtcl"类和他的方法method(成员函数)也在OTcl的空间内被建立。 无论何时用户在OTcl空间内建立一个对象的实例就会使用命令"new Agent/MyAgentOtcl", 它调用"MyAgentClass::create"去建立"MyAgent"对象并返回它的地址。 这里要当心, 从OTcl中建立一个C++对象的实例并不意味着能够从OTcl调用C++对象实例的成员函数或访问它的成员变量。
假设C++对象"MyAgent"有两个参数变量"my_var1"和"my_var2", 并且我们想轻松的在OTcl中使用模拟脚本来配置(改变)它们 。这需要使用对每个想要输出的C++类的变量的绑定函数(binding function)。 一个绑定函数建立一个给出名字的新成员变量(绑定函数的第一个变量)在对应的OTcl对象类("Agent/MyAgentOtcl")中, 并建立一个双向绑定在OTcl类的变量和C++变量(第二个变量指定的地址)之间。 Figure 19表明如何给Figure 18中"my_var1" 和"my_var2" 建立绑定。
Figure 19. Variable Binding Creation Example
绑定函数位于"MyAgent"的构造函数中,这样在建立对象的实例时就建立了绑定。NS 支持4种不同的绑定函数对应5种变量类型:
- bind(): real or integer variables - bind_time(): time variable - bind_bw(): bandwidth variable - bind_bool(): boolean variable |
以这种方式就可以设计和运行一个模拟并且能使用OTcl脚本去改变或访问C++实现的网络组件的配置参数(或变量的值) 。 无论何时导出一个C++变量, 建议还要去设置这个变量的默认值在"ns-2/tcl/lib/ns-lib.tcl"文件中。 否则在建立新对象的实例时将收到警告信息。
给C++对象("MyAgent")定义一个"command"成员函数作为OTcl命令的解释器。 事实上对于用户来说, 在一个C++对象的"command"成员函数中定义的OTcl命令, 和对应的OTcl对象中的成员函数看起来是一样的。Figure 20给出Figure 18中"MyAgent"对象定义的一个"command"成员函数的例子。
Figure 20. Example OTcl command interpreter
当一个OTcl影像的实例匹配上在OTcl空间中建立的"MyAgent"对象(i.e. set myagent [new Agent/MyAgentOtcl]), 并且用户调用这个对象的一个成员函数(i.e. $myagent call-my-priv-func), OTcl搜索这个已给的成员函数在OTcl对象中。 如果这个成员函数的名字找不到, 则调用"MyAgent::command"传递已调用的OTcl成员函数名和参数以argc(参数个数)/argv(参数值)的格式。 如果有为OTcl成员函数定义的行为(action)在"command"成员函数中, 则运行它并返回结果。 如果没有, 则递归地调用父类、祖类的"command"函数直到找到为止。 如果在父类、祖类中都找不到的话, 则返回一个错误信息(error message)给OTcl对象, 然后OTcl对象提示错误信息(error message)给用户。 这样,OTcl空间中的用户不能控制C++对象的行为。
当用C++实现一个新网络对象时, 可能需要运行OTcl命令在C++对象中。 Figure 21 示例了Figure 18中"MyAgent"的成员函数"MyPrivFunc"的实现, 它让OTcl解释器打印出私有的成员变量"my_var1"和"my_var2"的值。
Figure 21. Execute OTcl command from a C++ Object
从C++中运行OTcl命令, 必须先得到以静态成员函数形式声明的"Tcl::instance()" 的一个参照(reference), 通过它可以传递OTcl命令到解释器(the first line of "MyPrivFunc" does this)。 这个例子演示了2中方式去传递OTcl命令到解释器。 完整的OTcl命令传值函数(OTcl command passing functions)的列表请参考NS文档。
通过运行和测试"MyAgent"例子去更好的理解NS提供的OTcl联接机制。
- 下载"ex-linkage.cc" 文件, 并保存在"ns-2"文件夹下。
- 打开"Makefile", 在object file list结尾加入add "ex-linkage.o"。
- 用"make"命令重新编译NS。
- 下载"ex-linkage.tcl"文件, 它包含了"MyAgent"测试OTcl命令。 (见Figure 22 for the input script and the result)
- 运行OTcl script 通过命令"ns ex-linkage.tcl"。
Figure 22. Test OTcl Script and The Result
MyAgent C++ (ex-linkage.cc)源代码
#include <stdio.h> #include <string.h> #include "agent.h" class MyAgent : public Agent { public: MyAgent(); protected: int command(int argc, const char*const* argv); private: int my_var1; double my_var2; void MyPrivFunc(void); }; static class MyAgentClass : public TclClass { public: MyAgentClass() : TclClass("Agent/MyAgentOtcl") {} TclObject* create(int, const char*const*) { return(new MyAgent()); } } class_my_agent; MyAgent::MyAgent() : Agent(PT_UDP) { bind("my_var1_otcl", &my_var1); bind("my_var2_otcl", &my_var2); } int MyAgent::command(int argc, const char*const* argv) { if(argc == 2) { if(strcmp(argv[1], "call-my-priv-func") == 0) { MyPrivFunc(); return(TCL_OK); } } return(Agent::command(argc, argv)); } void MyAgent::MyPrivFunc(void) { Tcl& tcl = Tcl::instance(); tcl.eval("puts \"Message From MyPrivFunc\""); tcl.evalf("puts \" my_var1 = %d\"", my_var1); tcl.evalf("puts \" my_var2 = %f\"", my_var2); }
发表评论
-
几种用于WSN的仿真工具
2009-12-09 15:26 4175为评价无线传感器网络协议算法的性能,仅通过实验是无法实现的,特 ... -
OMNeT++中文用户手册(完全版)
2009-11-18 22:36 16511http://www.netforum.com.cn/view ... -
改变Telos 系列节点Serial baud rate
2009-08-21 18:50 2142如果节点与PC通信时出现非正常丢包或者serial不稳定当收包 ... -
TinyOS编译问题
2009-08-18 20:47 12801. 有时候编译提示找不到某个文件时, 可能是由于在linux ... -
改变节点transmission power, radio power level (tx_power)
2009-08-11 20:03 4257使用 CC2420Packet 中 setPower 来改变每 ... -
Tcl/tk 小记
2009-07-22 23:43 14631. 检查variable变量是否声明 在使用Tcl时候会经常 ... -
NS无线仿真中无法设置节点颜色的解决方案
2009-07-22 18:57 1892NS中提供了配置节点与 ... -
awk: malloc(): memory corruption 错误
2009-07-09 21:56 7181问题如下: *** glibc detected *** aw ... -
ns2 对无线网络模拟
2009-07-06 19:52 2610在模拟无线网络时需要对tcl模拟脚本文件的参数进行设置,比如P ... -
使用Gnuplot 绘制ns2模拟结果图
2009-06-25 17:48 8154Gnuplot(command-driven inter ... -
ns2模拟无线网络的NAM动画
2009-06-24 22:26 4940无线的各个参数 ####################### ... -
ns2 模拟WSN协议之手记
2009-06-23 23:55 2854ns2中模拟WSN,用Timestamp时间戳计算点对点Del ... -
ns2 中得到Agent的实例
2009-06-16 21:02 2877下面代码说明了如何访问其他节点的Agent,以AODV协议为例 ... -
TinyOS使用MIG时报错!
2009-04-06 01:30 1790在Makefile中加入启用MIG的选项后,编译出现一下错误: ... -
Tinyos 2.0 笔记小结(1)
2009-03-16 20:11 23021. configure组件注意事项 一般在confi ... -
Tinyos 2.0使用笔记
2009-03-06 19:48 27401.编译与安装程序到节点 引用 $ make mica2 ... -
Tinyos 中常用术语
2009-03-05 03:32 1049EOFF 关断能量损耗 用于 device off, stop ... -
什么是 nx_ type
2009-03-01 03:29 1463nx_ types 是在nesC 1.2,tinyos中用到的 ... -
TinyOS 下安装 JNI 的问题
2009-02-25 00:05 31641. "java not found, not i ... -
『TinyOS』学习笔记 #11?
2009-02-20 01:09 3744Lesson 11 TOSSIM Compiling ...
相关推荐
对网络仿真软件NS2的语言的基本介绍,包括TCL和OTCL两种语言的介绍。
ns2模拟器详解,42页doc文档。... OTcl Linkage Add New Application and Agent Add New Queue Extending NS , More Examples LAN Multicasting Web Server SRM Example
Linkage_Between_OTcl_and_C++_in_NS2 Chapter 3
ns2中otcl语言语法总结,记录了本人学习过程。
理解NS2中的OTcl-tclCL,对ns2使用两种语言解释
真正触动我写这篇短文的原因是试图理解NS2的基本原理. 在"the NS2 manual"中, 解释了为 什么采用了两种语言来建构整个系统, 然后在第三章描述了tclcl的六个类. 这个手册中的对各个 类描述性文字让我如坠雾里, 不明...
written in C++ and OTcl. NS is primarily useful for simulating local and wide area networks. Although NS is fairly easy to use once you get to know the simulator, it is quite difficult for a first ...
有关NS学习的example,文件为OTCL脚本,C++代码等
NS2(Network Simulation Version 2)是一种功能强大的网络模拟仿真器,它是用C++和OTCL两种语言完成的。C++语言编写协议执行模块,OTCL语言编写模拟任务。NS2主要针对有线局域网、无线局域网、Ad Hoc网络、卫星通信...
理解NS2的architecture, 了解NS2的基本原理. NS2采用了Tcl/C++分裂 的模型, 在这种模型中OTcl是处于比较关键的位置, NS2采用了Tcl的编程模式. 使用C++来编 写应用实例, 使用OTcl来操纵这些实例.
对NS初学者很有帮助的一些资料,有助于初学者的学习哦!
OTcl与C++,NS2是如何识别并调用执行协议的.doc 协议改进或移植必备参考资料。
NS2支持有线网络和无线网络的混合模拟功能。,设定一个有线节点sinkNode、一个基站节点bs(0)以及两个无线节点SS(0)、SS(1)
NS 手册(中文版) ns 使用手册(原ns注解与文档)1 ns©是 LBNL(译者注:Lawrence Berkeley National Laboratory 美国劳伦斯伯克利国家实验室)的网络模拟器[24]。该模拟 器用 C++编写;使用 OTcl 作为命令与配置的接口。...
NS2使用C++和Otcl作为开发语言。NS可以说是Otcl的脚本解释器,它包含仿真事件调度器、网络组件对象库以及网络构建模型库等。
Delve into simulation using NS2, elaborating on the use of Tcl and OTcl scripts as well as AWK scripting and plotting with Gnuplot Show how to simulate wired and wireless network protocols step by ...
......\ex-otcl.tcl ......\ex-tcl.tcl ......\ex-web.tcl ......\Example.htm ......\example_lan.html ......\example_mcast.html ......\example_srm.html ......\example_web.html ......\FAQ.html .....
本书是专门介绍NS2模拟软件的入门和进阶教程,内容包括NS2模拟软件在不同平台下的安装,进行网络模拟的方法和技巧,以及Tcl、OTcl语言等必备的基础知识,并通过NS2模拟软件介绍了网络模拟的研究思路和研究方法。...
本书是专门介绍NS2模拟软件的入门和进阶教程,内容包括NS2模拟软件在不同平台下的安装,进行网络模拟的方法和技巧,以及Tcl、OTcl语言等必备的基础知识,并通过NS2模拟软件介绍了网络模拟的研究思路和研究方法。...
NS2是一个面向对象的、用离散事件驱动的、利用C++语言和OTcl语言编写的网络模拟器,主要是用于局域网和广域网的网络模拟和协议算法模拟。 利用NS2,可以很方便地模拟一个算法。首先需要建立自己的仿真环境、可能的...