7
郑州西门子授权代理商通讯电缆供应商
[摘 要]:蓝牙通讯技术在嵌入式产品中的应用具有为广阔的前景,微软公司的bbbbbbs CE.NET已经成为了主流的嵌入式操作系统之一。论文给出了在Visual Studio 2005中利用托管码并分别采用P/Invoke技术、微软蓝牙嵌入式工具包、OpenNETCF类库和利用本机码来开发bbbbbbs CE.NET操作系统下蓝牙通讯模块的几种方法,并在其中对P/Invoke技术、托管码开发、本机码开发等几个关键技术进行了阐述。后给出了利用托管码和本机码开发蓝牙通讯模块这几种方法的优劣比较和分析。其内容对于在bbbbbbs mobile平台下开发蓝牙设备间的通讯具有一定实用。
关键词:蓝牙bbbbbbs mobile P/Invoke 托管码 本机码
0 引 言
自1998年,世界九大电子产业共同发起蓝牙特殊利益集团SIG后,在短短不到十年之内,蓝牙技术已经被应用到如信息家电、电子商务、汽车、航空、医疗、交通等多个领域。在移动计算方面,蓝牙技术采用了一种为经济的形式解决了无线通讯“后10m”的问题,从而替代了各种移动信息电子设备之间的电缆。因此,蓝牙技术在移动计算领域的应用将十分广阔,它的应用开发也就有很大的实际意义。
微软公司从1996年起开发了嵌入式操作系统bbbbbbs CE 1.0开始,凭借着其在PC市场上的成功经验和bbbbbbs CE类似于PC机上操作系统的作者简介:白 炜(1980-),男,硕士研究生,研究方向为嵌入式系统。
导师简介:白万民,教授,研究方向为嵌入式系统、计算机应用。
友好熟悉的界面逐渐扩大着自己在嵌入式操作系统市场的份额。bbbbbbsmobile平台是微软公司针对嵌入式环境下开发的一套嵌入式操作系统,其主要是指bbbbbbs CE.NET,bbbbbbs CE.NET的新版本为bbbbbbs CE 5.0,其中包括3个版本:以数据为的掌上电脑Pocket PC;以语音为的智能手机Smart Phone;以为的便携式媒体Portable Media Centers。而在这3个版本中都可能涉及到蓝牙应用的开发。
在bbbbbbs CE.NET的开发上,目前采用微软公司2005年年底推出的Visual Studio 2005是理想的选择。用Visual Studio 2005可以进行利用C#,或VB.NET等语言开发基于.NET Compact Framework 2.0或1.0的托管码WinCE程序,也可以利用C++语言来开发基于MFC,ATL或Win32API的本机码WinCE程序。
因为在微软新的.NET Compact Framework 2.0的类库中还未包含针对蓝牙通讯模块的类库,而且目前关于在bbbbbbs CE中开发蓝牙通讯模块应用程序的介绍还很少,同时开发蓝牙通讯技术的应用需要十分广泛,所以本文将就此进行一些讨论。
1 基于托管码开发蓝牙通讯模块
基于托管码的开发就是使用一套运行时环境(run-time environment)的应用程序接口来开发。
一般情况下,托管码应用程序的开发会比较简单和快速,并且可跨软件平台和处理器来运行,所以开发出的托管码也能重新使用并有较高的可移植性。
另外,内存管理、资源管理、资源收集、性管理等琐碎工作都由运行时环境来处理。应用程序开发工程师不必费心处理。托管应用程序在目标机器上运行,是通过目标机器端的实时编译器来实时把托管码编译成目标机器码后在目标机器上执行。
由于在.NET平台下,采用CLR(公共语言运行时)可以用不同的语言来调用.NET Compact Framework来开发相同功能的应用程序,所以本文托管码部分仅采用C#语言为例来介绍蓝牙通讯模块开发。
1.1 利用P/Invoke方法编写蓝牙通讯模块
蓝牙通讯模块是一个涉及到驱动硬件的应用程序开发,而.NET Compact Framework并不是一个对Win32API进行了完整封装的类库。所以在基于托管码开发蓝牙通讯模块中利用到托管代码如何与非托管代码交互技术。P/Invoke全称为Platbbbb Invoke,是.NET开发平台下允许托管代码调用DLL库的本地代码函数的服务,类似于JA-VA中的GNI的概念。图1说明了P/Invoke方法的工作原理。用相应语言的编译器将托管的源代码编译成Assembly的形式,其中包括元数据和中间语言代码。而此时P/Invoke的声明会以元数据的形式存在于Assembly中,当Assembly被CLR调用的时候,CLR会根据元数据的声明在对应的DLL函数中查找DLL的实现。如果找到,就将其加载到内存中,并定位此DLL函数的人口点。将托管的参数人栈,并将函数的人口点指向对应的native dll,从而完成了托管代码调用非托管代码的DLL。
利用P/Invoke方法编写蓝牙通讯模块,DllI-port属性非常有用。下面的代码将用例子说明此通用方案,例中托管程序将调用MessageBox(位于User32.lib中):
using
using namespace System:: Runtime::InteropSer-vices;
namespace SysWin32
{
[DllImport ( "user32. dll", EntryPoint = "MessageBox", CharSet = Unicode)]
int MessageBox(void * hWnd, wchar_t * lpText,wchar_t * lpCaption, unsigned int uType);
}
int main()
SysWin32 :: MessageBox(0, L" Hello world ! ", L"Greetings", 0)
}
注意包含DllImport的代码行。此代码行根据参数值通知编译器,使之声明位于User32.dll中的函数,并将签名中出现的所有字符串(如参数或返回值)视为Unicode字符串。如果缺少EntryPoint参数,则默认值为函数名。另外,由于CharSet参数Unicode,因此公共语言运行库将查找称为MessageBoxW的函数。如果运行库未找到此函数,它将根据调用约定查找MessageBox以及相应的修饰名。
当调用用户定义的DLL中所包含的函数时,有必要将extern"C"添加在DLL函数声明之前,如下所示:extern"C"SAMPLEDLL_API int fnSam-pleDLL(void);
在调用非本机码时,需要注意的是要将非结构化参数由托管封送处理为本机码形式。可以利用CharSet参数值的作用,将参数中字符串(bbbbbb*类型)都自动转换为wchar_t*。同样,所有Int32参数类型转换为非托管int,UInt32参数类型转换为非托管unsignedint,而Intl6参数类型转换为了short int。char*用于[in]参数的为bbbbbb*(CharSet=Ansi),用于[out]参数或返回值的为Text::bbbbbbBuilder*。wchar-t*用于[in]参数为bbbbbb*(CharSet=Unicode),用于[out]参数或返回值的为Text::bbbbbbBuilder*。需要注意的是函数指针具有_stdcall调用约定,这是因为这是DllImport支持的类型。对于数组来说数组(如wchar_t*[ ]),CharSet参数仅应用于函数参数的根类型。因此,无论CharSet的值是什么,bbbbbb*_ _gc[ ]将被封送处理为wchar_t*[]。除简单类型外,运行库还提供了一种机制,可以将简单结构由托管上下文封送处理为非托管上下文。简单结构不包含任何内部数据成员指针、结构化类型的成员
或其他元素。
在做一个关于蓝牙通讯程序前,还需要一些关于蓝牙的基础知识。一个蓝牙模块程序需要包含开启蓝牙,配对,连接,建立串行通道,然后开启通讯过程,还需要在应用程序中设置串行端口。因为蓝牙技术有方面的设置,所以需要对蓝牙设备进行配对。蓝牙的工作状态总共有3种,分别为开启、关闭、可发现。并且所有的通讯设备都有一个对应的DeviceID,蓝牙也不例外,蓝牙的DeviceID是一串以“:”分隔的16进制的数字。有了上
述知识,就可以在托管码中利用P/Invoke方法开始编写蓝牙通讯模块了。
对应的每一步需要调用的基本函数如下:
•本地设备的ID
[DllImport ( "Btdrt. dll", SetLastError = true) ]
public static extern int BthReadLocalAddr (byte[]PBa)
•远程设备的ID
[DllImport( "ws2. dll", EntryPoint = "WSALook-upServiceBegin", SetLastError= true)]
public static extern int CeLookupServiceBegin(byte[ ] pQuerySet, LookupFlags dwFlags, ref intlphLookup)
•服务
[DllImport (" ws2. dll", EntryPoint = "WSASetSer-vice", SetLastError= true)]
public static extern int CeSetService
(byte[ ] pQuerySet, RNRSERVICE_REGISTER,LookupFlags dwFlags)
•连接
[DllImport ( "mscoree", EntryPoint = "@ 339" )]
public static extern int connect (int s, byte []name, int namelen)
•蓝牙的设置
配对码请求
[DllImport("Btdrt. dll", SetLastError= true)]
public static extern int BthGetPINRequest(byte[]pba)
设置配对码
[DllImport( "btdrt. dll", SetLastError= true)
public static extern int BthSetPIN(byte[] pba, intcPinLength, byte [] ppin)
创建ACL连接:
[DllImport("Btdrt. dll", SetLastError= true)
public static extern int BthCreateACLConnection (byte[] pbt, ref ushort phandle);
然后是配对码验证:
[DllImport("Btdrt. dll", SetLastError= true)]
public static extern int BthAuthenticate (byte []pbt);
然后一定要关闭连接:
[DllImport("Btdrt. dll", SetLastError= true)]
public static extern int BthCloseConnection(ushorthandle);
•设置蓝牙无线电状态
[DllImport("BthUtil. dll", SetLastError= true)]public static extern int BthSetMode (RadioModedwMode)
在建立好蓝牙设备的连接后,就可以进行两个蓝牙设备之间的通讯了。由于可以将蓝牙通信当作一个虚拟的串行通信来处理,所以在建立通讯的过程中可以采用类似于串口之间的通讯方式。而关于串口通讯这方面资料很多,本文就不具体详述了。
1.2 利用微软蓝牙嵌入式工具包编写蓝牙通讯模块
微软蓝牙嵌入式工具包是微软公司新推出来基于.NET Compact Framework 2.0的一款专门用来快速开发蓝牙应用程序的工具包,直接在.NET平台下直接调用其中类库,可以快速,简单的开发一般的蓝牙应用程序。不过该工具包只能在bbbbbbs CE 5.0下使用。利用工具包可以完成:启动一个蓝牙服务,寻找周边蓝牙设备,连接已存在的蓝牙设备或者服务。工具包可以在微软网站下载。
利用此工具做两个蓝牙设备间进行简单文本传输的程序部分代码如下:
Server 端:
Guid serviceGuid = new Guid (" { 81553B2B-FFOB-4415-86C9-22B799058B81 } ");
ServerHandle sh = btseore. CreateService (ser-viceGuid);
NetworkStream ns= sh. AceeptConnection()Sting dataToSend= " Hello";
Byte [] dataBuffer = System. Text. ASCIIEncoding. ASCII. GetBytes(dataToSend);
ns. Write(dataBuffer, 0, dataBuffer. Length);
ns. Flush();
ns. Close();
Client 端:
PairedDevices= btsCore. GetPairedDevices();
Foreach (BluetoothDevice device in pairedDevices)
{pairedDevicesListBox. Item. Add (device. deviceName) ;}
Guid serviceGuid = new Guid (" { 01550D2D-FF0D-4415-86C9-22B799058B81 } ");
If (pairedDevicesListBox. SelectedIndex﹥=0);
{ BluetoothDevice deviceToConnect= ( BluetoothDevice ) pairedDevices [ pairedDevicesListBox. Selected];
NetworkStream ns = btsCore. Connect (deviceTo-Connect, serviceGuid);
byte[ ] buffer=new byte[2000]
ns. Read(buffer, 0,50);
char[ ] bufferAsChars= System. Text. ASCII. GetChars(buffer)
System. bbbbbb s= System. Text. Encoding. ASCIIGetbbbbbb(buffer, 0, buffer, length);
Message. Show(s)
ns. Close(); }
1.3 利用OpenNETCF编写蓝牙通讯模块
OpenNETCF是一个可以有效提高bbbbbbs Mobile开发效率的三方开源类库。是一帮bbbbbbs Mobile爱好者共同编写的,里面提供了很多在.NET Compact Framework 2.0中未能包含的类库。有两种方式可以来使用它:一种是可以将其当作一个组件安装在Visual Studio2005中;另一种是可以将其原代码编辑拿来使用。在OpenNETCF开源类库中就包括有蓝牙方面的,所以也可以利用OpenNETCF来编写蓝牙通讯模块。对应类库可在WWW.opennetcf.com网站下载。在类库中,可以利用命名空间OpenNETCF.IO.Ports下的Blue-toothSerialPort来建立蓝牙连接,利用命名空间OpenNETCF.IO.Serial中内容进行蓝牙程序的通讯。
2 基于本机码开发蓝牙通讯模块
本机码应用程序是使用一套特定软件平台的应用程序开发接口来开发,并且被编译成一个特定处理器的目的码或机器码。一般情况下,本机码提供较高的效能和小的资源要求,但是被编译好的本机码或是可执行文件却只能在此软件平台或特定处理器上运行。此外,本机码应用程序常需要应用自行处理类似内存管理、资源管理、性管理等。在Visual Studio 2005中已经可以利用C++语言来开发基于MFC,ATL或Win32API的本机码WinCE程序。这就提供了类似于用bbbbbded Visual C++来开发bbbbbbs mobile设备的方法。而本文在利用P/Invoke方法编写蓝牙通讯模块时介绍的就是调用本机码开发蓝牙应用程序,方
法类似,所以此处就不再进行具体的分析了。
3 结束语
本文讨论了在Visual Studio 2005里分别利用托管码和本机码来开发bbbbbbs mobile设备蓝牙通讯模块的几种方法。文中介绍的蓝牙通讯模块各种开发方法都有各自的优点和缺点,如果用户开发的蓝牙通讯设备需要较高的效能和小的资源要求,一定是采用本机码的方法来开发是的。因为采用本机码开发的程序是直接被编译成机器码来执行的,从而可以获得高的性能。但是采用本机码来开发程序的大缺点就是开发难度大,开发周期长,所以并不适用于一般要求的用户。而在对效能和资源要求并不是很高的产品中采用文中所述的托管码中的几种方法来开发蓝牙通讯模块则是好的选择,用托管码开发的程序会比较的简单和快速,同时又由于其并不直接生成终的机器代码,而是生成了中间代码来执行,所以用托管码开发的程序可以跨平台和处理器来运行,但是这是以牺牲一定的访问速度为代价的。在基于托管码开发蓝牙通讯设备中本文共介绍了3种方法,因为到.NET FRAMEWORK 2.0的时候微软公司都没有开发针对蓝牙通讯模块的类库,所以利用P/Invoke方法编写蓝牙通讯模块是在托管码下开发蓝牙通讯模块比较常见的选择。而微软蓝牙嵌入式工具包和OpenNETCF类库编写蓝牙通讯模块方法比较类似,其都是类库对底层API的类封装,所以开发起来较为简单和快速,适合于一般要求的蓝牙通讯模块的开发。
蓝牙设备在嵌入式环境下的应用有着十分广阔的前景,目前还有很多工作尚需研究。解决如何在bbbbbbs mobile平台下开发好的蓝牙应用程序能够推动蓝牙技术在嵌入式产品上的好利用。这一方面的开发将具有强的实用性,将成为以后研究工作的。



0 引 言
由于低能耗集成电路技术、无线通信技术以及MEMS(microelectromechanical systems)的发展,无线传感器网络技术成为可能,并且,成为信息技术学科一个新的重要研究方向。美国《商业周刊》在其“未来技术专版”中发表文章指出,传感器网络是未来的四大高技术产业之一,并将掀起新的产业浪潮。
无线传感器网络由于体积小、以及强大的信息功能使其在环境数据采集、监控以及目标跟踪等方面有广阔的应用空间。
无线传感器网络应用系统的根本是物理世界有的信息,包括数据的收集、数据管理、数据通信以及数据的处理,并终得到用户所需的信息。
1 信息关键问题
无线传感器网络解决一系列关键问题才能充分发挥其信息能力,包括数据通信、感知数据处理以及系统监控等。
1.1 信息体系结构
信息体系结构分为物理层、功能层及应用层,每个层次又分为不同的阶段,如图1所示。
(1)数据
无线传感器网络应用系统不像传统的信息应用系统,它所需的数据需要从物理世界中,而且,这些的数据是的流数据,数据之间存在的时空关联性,并且,伴有噪声信号、偏离测量以及数据丢失和数据错误等。这就需要系统具备一定的功能来处理上述问题。
在整个体系结构中,初始的阶段也是重要的阶段就是数据阶段,其主要任务就是来决定什么时间、什么地点、以什么频率来进行数据采样。
(2)数据通信
数据通信阶段就是要采用简单、的数据路由算法和相应的协议来将的物理环境的数据及时、准确地传送给用户。
(3)数据处理
数据处理就是指如何简单、有效地表达用户的信息需求;如何根据这些需求来处理相关的数据获得用户所需的信息等。
1.2 信息计算模式
计算模式基本上有2种:集中式和分布式。集中式是指将各个节点所的数据传送到一个集中的位置进行相应的处理;分布式包含分布式对象系统、分布式数据库及移动代理等。
1.2.1 分布式对象系统
分布式对象系统就是将无线传感器网络中的节点看作大规模的分布式对象。
SINA是一种较有影响的分布式对象信息处理方法。每个节点运行SINA执行环境(SEE),作为节点的抽象对象。它是SINA体系结构的。SEE提供一系列配置和通信原语来加强节点对象之间的可扩展性、鲁棒性以及电源有效的组织和交互。系统采用统一语言来查询和调度整个无线传感器网络系统,即传感器查询和调度语言。它是一种陈述性的过程脚本语言,具有灵活和紧凑的特点。这种方法虽然通过sampling operation原语集成了数据阶段,但是,没有充分利用所数据的时空关联性,利用统计的方法来提高数据的效率。
1.2.2分布式数据库
由于节点的分布性,可以采用分布式数据库系统的数据存储以及查询技术来进行无线传感器网络数据的存储和信息处理。
基本思想是:用户提交一个用户查询,查询优化器将这种查询需求分解成适合无线传感器网络中各个节点进行in network处理的有效的查询计划,从而节省电源,提高系统的生命周期。另外,这种查询的提交是以一种陈述式查询语言的形式提交的,从而可以实现用户需求与实际物理网络系统的透明性。这里的是设计查询优化器。
目前,比较有影响力的研究成果有Cornell大学的COUGAR项目,另外,还有Inbbb公司的TinyDB项目。
COUGAR项目没有集成数据阶段;而TinyDB项目虽然集成了数据阶段,但是,在先期的工作中没有充分利用流数据的时空关联性,利用统计方法提高数据的效率,目前,Inbbb的研究人员正在致力于这方面的工作。
1.2.3 移动代理
在传统的分布式无线传感器网络中,数据是由单个的节点搜集,然后,将其传送给上一级的处理单元来进行处理。这样,在网络中就会有大量的数据在移动,从而消耗了大量的电源。而移动代理的思想将数据驻留在它的节点上,而让代表用户信息需求的一段代码(代理、计算引擎)在网络中传播,来处理相应的数据,并将终的信息返回给用户。这样就可以减少网络的带宽使用。
该方法的不足之处在于:由于节点的存储能力有限,每个节点在没有了解用户的信息需求之前保留一段时间的历史数据,这样将消耗大量的系统资源。
总之,无线传感器网络的信息计算模式的发展趋势是以分布式计算为主,利用系统中的局部信息来完成数据路由、聚合等工作,从而提高系统的可扩展性。在分布式计算的基础上,应该集成数据阶段,并且,充分利用流数据的时空关联性。
1.3 网络通信的关键问题
无线传感器网络一个重要的方面就是电源和通信带宽是非常有限的资源。网络通信体系结构设计充分考虑这个问题。
目前,已经有大量的研究成果分别从不同的角度提出不同的无线传感器网络通信协议。主要有如下几类:扁平路由(flat networks routing)、层次路由(hierarchical networks routing)以及基于位置的路由(bbbbbbbb-based routing)。扁平路由是指网络中各个节点具有相同的作用;而层次路由是指网络中的节点承担不同的作用,呈现出一定的层次结构。
通过对路由协议的研究,总结出网络通信的一些重要问题。
1.3.1 面向应用和以数据为
无线传感器网络中的数据通信是以数据为的(data centric),而且,是面向应用的(application specific)。
由于无线传感器网络系统具有大量的节点,很难给这些节点分配全局的标识符,一个可行的方案就是利用节点产生的数据来标识节点。这就是以数据为的思想。所谓以数据为是相对于以地址为的方法来说的,它多地关心通信的数据内容,而不是数据的来源;关心数据融合过滤后得到的信息,而不是高冗余的原始数据。
为了减少在网络中的量、延长系统的生命周期,在数据通信的过程中进行面向应用的数据处理,即in network processing。这种数据处理根据系统用户的应用需求才能切实有效地进行,因为根据用户的信息需求才能决定哪些原始数据有用,哪些没用。也就是说,无线传感器网络的通信方式是面向应用的,在数据通信的同时考虑用户的需求,在数据路由的同时进行面向应用的数据处理,这与传统的通信方式是不同的。
这种in network processing的思想有2种实现方案:一种是在原始数据的传输过程中进行面向应用的数据聚合,这就是数据聚合的思想;二是将代表用户需求的代码传播到网络中,在各个节点处理数据,然后,再将用户终需要的信息返回给用户,这就是移动agent的思想。
1.3.2 局部计算
由于无线传感器网络节点数量的大量性以及电源能力、计算能力和存储能力的有限性,不可能在通信机制中存在像Internet那样的全局路由信息及全局的预发路由。这样,在无线传感器网络中,只能采用局部计算模式(localization schemes)来进行数据的通信,即通信机制不需要知道整个网络的结构,只根据当前节点周围局部节点的属性来决定数据的路由路径。由于局部计算只关心某一范围内节点的信息,而不关心整个网络的信息,所以,系统中节点的加入或离开不会对系统的性能造成很大的影响,从而提高系统的可扩展性。
1.3.3 节点定位
在基于位置的路由算法中,需要知道节点的物理位置,这就需要节点定位技术。一般来说,节点的定位主要有2种方法:一种是定位;另外一种是相对定位。
定位,就是通过某种手段来确定节点的物理位置,如使用GPS定位系统来确定每个节点的物理位置。
相对定位,就是通过节点之间的相对距离来确定节点的物理位置。在无线传感器网络系统中,一般来说,基础网络通信设施(基站或者聚簇的头节点)中节点的位置是已知的,将系统中的所有其他节点与其相邻的基础设施节点比较来确定节点的位置。
有了局部计算机制以及节点的物理位置,就可以利用节点的物理位置来进行数据路由,即geographic routing。geographic routing是非常适合无线传感器网络的路由方法。因为这种方法中,节点只包含其地理上相邻节点的位置,这样,就具备很好的可扩展性。
1.3.4 时间同步(时钟同步)
时间同步(time synchronization)是任何分布式系统的重要基础设施。在无线传感器网络系统中,数据集成、TDMA介质访问、调度等,都需要时间同步的支持。
一般来讲,时间同步的精度要求越高,所消耗的资源(计算、通信以及电源等)就越多;而无线传感器网络受到严重的资源约束,因此,不可能提供很的时间同步功能。实际上,现实中的无线传感器网络应用系统对时间同步功能的要求并没有那么高,而且,可以根据应用系统的不同需求来提供不同精度要求的时间同步功能。
上述的各种路由算法没有严格的好坏标准。每种算法在一定的条件下都是有效的。实际应用中,应该根据不同的应用需求采用不同的路由方法。
网络通信协议未来的发展方向有如下几个方面:
(1)充分利用感知数据的时空关联性,提高数据的效率,减少网络通信量;
(2)在路由协议的各个层次引入统计方法,特别是数据链路层,以减少网络数据通信量;
(3)考虑QoS问题,包括性、延时性等;
(4)节点移动情况下的路由算法等。
1.4 感知数据存储与处理
系统从物理环境中获得数据后,可以对这些流数据进行实时处理、数据聚合。但是,另外一些数据需要保存起来,以便以后进行分析、预测趋势以及数据挖掘。这就需要相应的数据库技术来存储这些的流数据。
有了这些数据,就需要有相应的数据查询技术来获得用户想要的信息。主要的研究成果就是陈述式查询。
未来的研究方向:
(1)感知数据的可视化表示:以便用户能够好地理解数据;
(2)流数据挖掘技术:从的流数据中用户所需的信息甚至知识,也要考虑流数据的实时挖掘以及事后挖掘,这是一个非常有挑战性的工作。
1.5 无线传感器网络系统监控
无线传感器网络系统监控协议有2个方面的特殊要求:,对电源消耗有高的要求,因为监控协议要在系统的整个生命周期中都在运行;二,比其他协议具有好的鲁棒性,因为当系统出现大规模故障,监控协议是后的救命。
目前,已经有一些研究成果来解决这个问题,但是,它们大多集中在节点剩余电源的监控方面。文献给出一个较完整的系统监控体系结构,但它仅仅对剩余电源的监控给出了具体的实现算法,而对于其他方面仅仅停留在概念层面。
无线传感器网络的系统监控应该具有如下功能:剩余电源、节点状态、节点链路以及异常情况监控。在具体实现方案上,应该和系统的信息紧密结合,在数据通信的同时搭载监控信息。另外,应该充分利用感知数据的时空关联性,利用统计的方法来进行系统的剩余电源监控、节点状态监控、链路监控以及系统异常监控。
2 结束语
无线传感器网络是一个新兴的研究领域,使物理世界和认知世界紧密集成,将信息的和处理带入一个的时代。它的研究得到了、学术界以及企业界的广泛认可。目前,无线传感器网络仍然处于研究的初始阶段,尤其是在国内这方面的研究则刚刚起步,还有很多需要解决的问题。可以确信,随着本文提出的关键问题的解决,无线传感器网络会得到的发展。