1 节点组成 节点是无线传感器网络中部署到研究区域中用于收集和转发信息、协作完成指定任务的对象。每个节点上运行的程序可以是完全相同的,唯一不同的是其ID。
1.1 节点构成
无线传感器节点由传感器模块、处理器模块、无线电通信模块和能量供应模块4部分组成,整个结构如图1所示。
图1 无线传感器节点构成框图 本质上,无线传感器节点就是一个网络化的分布式嵌入式系统,通过无线信道实现网络间的通信。为了减少通信量,在本地完成必要计算进行数据融合,从而协作完成部署空间数据的采集。在应用上体现以网络为中心,节点的功能通过网络来体现。因而传统的嵌入式设计思想在无线传感器网络中遇到许多挑战:节点中运行程序存在大量并行和节点协同计算。
1.2 节点特点
无线传感器网络是应用相关性网络,不同应用领域使用不同的网络技术实现。由于无线传感器节点是用于监测的,分布密度大且范畴广,因此必须低成本、低功耗和小尺寸。从现有技术条件来看,值得考虑的是节点成本和能源补给。节点不可能采用太高的频率,因为频率与能量的消耗是正相关的,频率高则能量消耗大。另外无线电通信模块能量消耗也大,传送距离同能量消耗也是正相关的,因而须在发送距离和节点数之间做出权衡。
1.3 Mica节点
加州大学伯克利分校主持开发的低功耗无线传感器节点Mica,处理器芯片采用Atmel公司的AVR系列(TI公司的 MSP430也是不错的选择),无线电收发模块采用TR1000或CC10000,外加相应传感器接口,实现了无线传感器节点,如图2所示。节点间通过无线电方式进行通信,协作完成指定任务;节点自身通过ADC通道来感知外界数据。
图2 Mica节点实物图 Mica节点上可感知多个不同物理量:光强度、温度、地磁强度等。http://www.tinyos.net/网站提供了其实现的硬件布线图,加州大学伯克利分校研发人员为这个平台开发出微型操作系统TinyOS和编程语言nesC,同时国内外很多大学和机构利用这一平台进行相关问题的研究。
无线传感器网络与现在传感器技术最大的不同在于,将现有的传感器技术进行网络化,使传感器技术应用更好,为现在传感器技术提供更新的解决方法。
2 节点上微型操作系统
无线传感器网络节点存储容量有限。通过研究发现,要满足其自身网络运行的需要,可以使用一种新的嵌入式系统和嵌入式软件来实现。
2.1 操作系统需求
从对节点结构分析不难看出,无线传感器节点硬件简单,可以直接在硬件上进行编程。但这在工程实践中产生许多问题:应用程序开发的难度大大增加,程序员必须对硬件十分了解;程序员无法继承现有的软件成果,延长开发周期;无法形成规模化,使用新的芯片,上层模块都必须改写。
从现有软件技术来看,无线传感器可以直接使用现有的嵌入式操作系统。现有嵌入式操作系统大多是实时操作系统,很少考虑能源供应,而无线传感器一个致命点就是能源供应无法解决;现有嵌入式操作系统大多所占用空间很大,而无线传感器另一个致命点又是存储容量有限。
无线传感器节点有两个突出特点:一个是消息到达的并发性,很密集,即存在多个需要同时执行的逻辑控制,需要操作系统在较短时间内完成这些频繁发生的操作;另一个是无线传感器节点模块化程序高,要求操作系统为应用程序对硬件控制提供方便操作。
2.2 TinyOS操作系统
操作系统就是为用户提供一个良好的用户接口。基于以上分析,研发人员在无线传感器节点处理能力和存储能力有限情况下设计一种新型的嵌入式系统TinyOS,具有更强的网络处理和资源收集能力,满足无线传感器网络的要求。
为满足无线传感器网络的要求,研究人员在TinyOS中引入4种技术:轻线程、主动消息、事件驱动和组件化编程。
轻线程主要是针对节点并发操作可能比较频繁,且线程比较短,传统的进程/线程调度无法满足(使用传统调度算法会产生大量能量用在无效的进程互换过程中)的问题提出的。
主动消息是并行计算机中的概念。在发送消息的同时传送处理这个消息的相应处理函数ID和处理数据,接收方得到消息后可立即进行处理,从而减少通信量。
整个系统的运行是因为事件驱动而运行的,没有事件发生时,微处理器进入睡眠状态,从而可以达到节能的目的。
组件就是对软硬件进行功能抽象。整个系统是由组件构成的,通过组件提高软件重用度和兼容性,程序员只关心组件的功能和自己的业务逻辑,而不必关心组件的具体实现,从而提高编程效率。
2.3 TinyOS操作系统的实现
TinyOS操作系统最初是用C语言实现的,产生的目标代码比较长。后来研究设计出基于组件化和并行模型的nesC语言,产生的目标代码相对较小。用nesC语言可开发TinyOS操作系统和其上运行的应用程序。
2.3.1 接口
接口(interface)是一个双向通道,表明接口具有的功能和事件通知能力是双向的,向调用者提供命令和实现命令者进行事件通告。
interface name { asy commandresult_t Cname(pram p); asy eventresult_tEname(pram p); }
其示意图如图3所示。
| |