TinyViz 是TOSSIM的一部分,一个TOSSIM基于Java 的图形用户界面(GUI),虽然做的不完善并且很多问题,但是至少利用它可以可视化地控制和监视程序的运行,检查调试信息、无线电和UART 数据包等。
注意:TinyViz只在tinyos1.x当中有,2.x当中还没有。
TinyViz 提供了一个可扩展的图形用户界面,用于测试、显示以及与TinyOS 应用程序的TOSSIM 模拟进行交互。使用TinyViz,可以方便地跟踪TinyOS 应用程序的执行情况,在感兴趣的事件发生时设置断点,可视化无线消息以及操作节点的虚拟地点和无线连接性。而且,TinyViz 支持一个简单的“插件”API,允许用户自己编写TinyViz 模块,以便以一种与应用程序相关的特定方式显示数据或与正在进行的模拟程序交互。
1、开始
要学习使用tinyiviz,最好的方式是通过 apps/TestTinyViz 应用程序,其运行结果是节点定期地向一个随机邻居发送消息。首先进入到该应用程序文件夹下,并使用命令make pc 建立模拟程序。
为了编译TinyViz,可以再打开一个cygwin窗口,到tools/java/net/tinyos/sim 目录下输入make。TinyOS 将把该程序编译为tinyviz.jar,这是一个独立的Java JAR 文件。在该目录下可以使用tinyviz脚本来运行它,通常为了简便使用,我们可以而把C:/Program Files/UCB/cygwin/opt/tinyos-1.x/tools/java/net/tinyos/sim加入到PATH 环境变量中,就可以在console的任何位置直接运行Tinyviz 了。
运行命令如下:
在成功编译你所需要的应用程序后,在该应用程序文件夹下输入:
tinyviz -run build/pc/main.exe 10
Tinyviz还有另外一种运行方式(通过打开两个cygwin窗口):
在第一个cygwin下,进入目录:c:/cygwin/opt/tinyos-1.x/apps/TestTinyViz
运行命令:make pc编译
运行:build/pc/main.exe -gui 30(这里的30指设置了30个传感器节点)然后这个应用程序会出现waiting for GUI... 这时千万不要关闭这个cygwin。
另外开一个cygwin,进入目录:c:/cygwin/opt/tinyos-1.x/tools/java/net/tinyos/sim
运行命令:make 编译,其实tinyviz只需要编译一次。如果已经编译过了,这里就不用make了,直接运行下面的命令就可以了。
再运行命令:TinyViz
打开tinyviz后,窗口的左半部分是传感器网络的图形显示;其右半部分是一个控制面板,利用它可以与一系列控制TinyViz 工作的插件进行交互。在显示节点的左边窗口中,可以点击某个节点查看其相关信息,也可以用鼠标拖出一个矩形区域以选择一组节点,甚至还可以拖着这些节点四处移动。TinyViz 中某些插件可能对上述这些操作予以响应,如显示节点的电能等。
按钮“pause/play”是一个开关按钮,用于控制模拟程序暂停或者继续执行;按钮“grid button”用于控制网格线的显示;“clear”按钮用于清除显示状态;“stop”按钮用于终止本次模拟;“delay”滑杆用于延迟每个TOSSIM 事件的处理过程,使显示速度放慢。当微粒数目不太多时,想“实时”观看模拟运行的过程,使用“display”滑杆控制起来十分方便;“On/off”按钮用于控制所选节点的能量状态。
2、插件
TinyViz 插件使一种软件模块,用于监视来自于模拟的事件——如调试消息、无线传输消息等等,并通过绘制显示信息、设置模拟参数甚至驱动模拟本身(如为参与模拟的节点设置假定的传感器数值)等方式对所监视的事件予以响应。
插件可以通过选择使它起作用或不起作用,是否让某插件在某个模拟过程中起作用取决于使用者的兴趣。可以从plugins 菜单中选择插件,一旦某个插件被选中,其对应的标签就会在右边的控制面板上激活,就可以在模拟中使用该插件的功能了。所有插件都被设计成相互独立的,因此各插件的使用十分方便灵活。
下面介绍几个主要的插件:
• 调试消息:这是一个显示由模拟产生的所有调试消息的窗口。用户可以通过选中节点组来选择查看消息,还可以高亮显示符合特定模式的消息。值得注意的是,用户所看到的调试消息集由DBG 环境变量决定,正如在一个单机环境中运行TOSSIM 一样。因此,如果只想查看DBG_USR1 和DBG_AM 类型的调试消息,可使用如下命令:
DBG=usr1,am tinyviz -run build/pc/main.exe 30
• 设置断点:通过设置断点,当遇到某些特定条件时,模拟就会停下来。此时,可能的条件要么是匹配调试消息中的某个子字符串,要么是匹配所传送的无线消息的内容。用户可以设置多个断点,并可以通过在断点列表中选择使哪些断点起作用,哪些断点不起作用。
• ADC 数值:显示每个节点附近的每个ADC 信道的最近的数值。
• 发送的无线数据包:显示所有发送的无线数据包的窗口,有点类似于调试消息插件。值得注意的是:调试消息插件也可以显示这种信息。
• 无线链路:该插件图形化地显示无线消息活动。当某个节点在广播消息时,该插件就在这个节点周围画上一个蓝色的圆圈。而当某个节点向另外一个节点发送消息时,就在这两个节点之间画上一个有向箭头。值得注意的是:不管这些传输是否成功,这些都会显示出来。如果某个节点试图发送一个消息但失败了或包丢失了,箭头仍将画出。
• 设置位置:该插件通过用于设置每个节点的虚拟位置,这要用到Location 接口,其位置在apps/TestTinyViz/Location.nc。对每个节点,设置三个“假造”的ADC信道值(分别对应X 轴,Y 轴,和Z 轴),这样FakeLocation 组件就可以来读取这些值从而决定该节点的虚拟位置。在模拟TinyOS 应用程序时可以作为实际的位置服务的替代品。注意!!根绝我的观察,在TOSSIM根本就没有Z轴,它是个2D模型.有明白的同学请告知,万分感谢。
• 无线模型:该插件通过节点间的位置及不同的无线链接模型来设置误码率。利用该插件可以在模拟中使用现实的无线链接模型。有两个内建模型:分别是“经验”模型和“固定半径”模型。“经验”模型"通过RFM1000 射频信号对数据包的连接性进行户外跟踪;而“固定半径”模型中,相互间的距离在一个给定的范围内的所有节点之间具有良好的连接性,而与其余节点不相连。可以通过在控制面板中设置“比例因子”来重新设定模型的距离参数。增加比例因子将降低所选模型的连接范围。通过在显示区选择一个节点可以查看其到其他节点的连接性——邻近的每条边上显示的数字表示一个数据包通过该链路传输的概率。改变比例因子并点击“更新模型”将更新模型参数,同时显示区的节点将被移动。(as will moving motes around in the display.)这个比例因子非常不好用,有待进一步研究. 有明白的同学请告知,万分感谢。
3、布局 主要就是用来处理节点位置和广播射程
节点的布局由“布局”菜单所控制,有如下几种布局方式,包括:随机布局、基于网格的布局以及网格加随机布局(在网格布局的基础上再随机扰乱一下)。用户还可以保存以及从文件中加载布局。显示区中节点的位置有两个用途,其一是当RadioModelPlugin 插件起作用时用来决定节点间的连接性;其二是当LocationPlugin 插件起作用时用来设置节点的虚拟位置。
在自动运行TinyViz脚本时
执行命令:
tinyviz –autorun sample.autorun
出现找不到cygwin1.dll的解决方法:
到C:/Program Files/UCB/cygwin/bin下找到cygwin1.dll复制并放到C:/WINDOWS/system下。
但是依然连接不上,console出现如下提示:
AUTORUN: Connecting...
AUTORUN: Connecting...
AUTORUN: Connecting...
AUTORUN: Connecting...
AUTORUN: Connecting...
AUTORUN: Connecting...
图形界面显示如下错误:Connecting to simulator failed
上网查了很多资料,很多人遇到了同样的问题,原因目前不知道,设计者也躲着不肯出来回答问题,没办法。有哪位知道解决方法的请告知。
以下为网上和我有一样问题的人在论坛上的留言,可惜没人回复:
Hi,
So far i have been able to use TinViz without problems , however when i try to use the scripting facility ( as mentioned in the tutorial lesson 5 ) by running
tinyviz -autorun sample.autorun
i get the error " cannot find cygwin1.dll " and the console displays
AUTORUN: Initializin
AUTORUN: Running precmd:
tion"
AUTORUN: Running simulat
46 -nodbgout 20
AUTORUN: Connecting...
AUTORUN: Connecting...
AUTORUN: Connecting...
AUTORUN: Connecting...
AUTORUN: Connecting...
AUTORUN: Connecting...
without any success.
I tried adding the cygbin1/bin to the path but still does not help . Copying the cygwin.dll to the local dir prevents the above dll not found message from apperaing , but still the simulation does not work. I guess i am missing something when it comes to using the autorun??