引 言
ZigBee是一种崭新的,专注于低功耗、低成本、低复杂度、低速率的近程无线网络通信技术,也是目前嵌入式应用的一个大热点。Zigbee是IEEE 802.15.4协议的代名词。根据这个协议规定的技术是一种短距离、低功耗的无线通信技术。这一名称来源于蜜蜂的八字舞,由于蜜蜂(bee)是靠飞翔和“嗡嗡”(zig)地抖动翅膀的“舞蹈”来与同伴传递花粉所在方位信息,也就是说蜜蜂依靠这样的方式构成了群体中的通信网络。
简而言之,ZigBee就是一种便宜的,低功耗的近距离无线组网通讯技术。近年来,我国应用ZigBee无线数据网络的越来越多。很多地方都取代了局域网。我们平时看到的楼宇监控系统、无线方式集中抄表以及矿山救援系统和家电控制等都是对ZigBee的应用。在下文我们将谈到的就是在玩过有较多客户的IT公司的产品CC2430。想来能让你们了解到ZigBee技术。
1 提出问题
与PAN ID不同的是ZigBee在一片不大的区域内,有数个信道相同的协调器。当设置了终端的PAN ID后,终端只加入和其上存储的PAN ID相同的协调器。目前本无线组网项目使用的是TI公司的CC2430,其上的ZigBee协议栈为TI的Z-STACK 1.4.3-1.2.1。由于TI公司的策略是终端比较随机的加入其中的一个协调器,即使其上已经定义了特定的PAN ID。从少量的实验来看,CC2430作为终端优先加入PAN ID号比较小的协调器。用户一般无法让终端选择,并且终端扫描网络和请求入网的过程都没有给出源代码。这样便给这类实际应用带来诸多不便。
2 问题分析
关于CC2430/2431网络的形成,可以参考《ZigBee技术实践教程》一书。该书为北京航空航天大学出版社出版,高守玮和吴灿阳主编。文后会附上本书的简介。
路由器和终端试图加入一个网络时,首先调用NLME_NetworkDiscoveryRequest()函数。该函数将进行网络扫描,其结果由函数ZDO_NetworkDiscoveryConfirmCB()返回。而发现网络存在后,将调用NLME_OrphanJoinRequest()函数试图加入网络。其结果由函数ZDO_JoinIndicationCB()返回。
遗憾的是,网络扫描和请求入网两个函数都没有源代码,造成无法修改的困境。客观地说,在TI公司的ZSTACK上修改某些参数常常是比较困难的。只好从提供了源代码的ZDO_NetworkDiscoveryConfirmCB()函数和ZDO_JoinIndicationCB()函数来想办法。检测ZDO_NetworkDiscoveryConfirmCB()的代码,发现其终调用ZDO_FinishProcessingMgmtNwkDiscReq()函数。
而在该函数中,有对路由器的特殊处理。条件编译变量RTR_NWK代表有路由器功能的设备,虽然协调器可以兼做路由器,但执行这段代码的只可能是普通的路由器。
#if defined(RTR_NWK)
……
#endif
……中的代码检索返回的网络信息描述结构,查看有没有和存储的PAN ID相同的协调器。观察ZDObject.c文件中的ZDO_StartDevice()函数,当启动设备模式为“再继续”时,即startMode==MODE_RESUME,终端设备以孤点方式请求加入网络。再继续模式实际上是标识非协调器设备处于网络扫描完成,准备请求入网的状态。分析到此,可以想出办法了。首先定义一个检查是否有PAN ID相同的协调器的全局变量bool变量p_matching。初始化时设其为FALSE。
3 解决方法和实际代码
对刚才提及的代码段,增加终端对返回的网络信息描述结构的查询。
在ZDApp.c中修改ZDApp_event_loop()函数,在调用ZDO_StartDevice(…)之前,亦即在终端设备扫描网络和请求入网前增加一段代码。当终端和协调器PAN ID不同,并且是再继续模式时,重新搜索是否有与PAN ID相同的协调器,而不请求人网。
这样就使得终端有协调器可挑选了。
关于如何修改PAN ID,给出代码如下(该代码为协调器和终端通用的。_NIB是和网络相关的全局结构体):
另外非协调器设备在初始化时,应该增加如下的代码(gu16RecBuffLen为自定义的16位整型数):
通过对扫描网络结果处理函数的分析,研究扫描网络和请求人网前的程序段。在程序段中增加一个对终端是否检索到特定PAN ID的协调器的逻辑变量。在程序中增加未检索到特定PAN ID的协调器时不请求入网的代码,以达到终端选择协调器入网的目的。我们经过实验,在现场有数个不同PAN ID的协调器的情况下,终端设备只加入特定的协调器就可以了。
《ZigBee技术实践教程》简介
《ZigBee技术实践教程:基于CC3430/31的无线传感器网络解决方案》以ZigBee无线传感网络技术为主要对象,以基于CC2430/31芯片(TI/Chipcon公司)的HFZ—CC2430/31ZDK开发套件为硬件平台,深入剖析了TI的Z—Stack协议栈架构和编程接口,并详细讲述了如何在此基础上开发自己的ZigBee项目。《ZigBee技术实践教程:基于CC3430/31的无线传感器网络解决方案(附盘)》分为5个篇章:理论篇、准备篇、入门篇、进阶篇和提高篇。理论篇简要介绍了无线传感器网络和ZigBee协议规范的基础知识,为读者进行ZigBee项目开发提供理论指导,以便开发时参考;准备篇讲述了ZigBee硬件开发平台、软件开发环境的组成和安装,以及通过17个CC2430/31片内外设的操作例程来阐述CC2430/31片上系统的开发和使用;入门篇以一个通俗易懂的例子讲述了轮转查询式操作系统的基本原理,并介绍了这种操作系统在TI Z—Stack中的应用以及TI Z—Stack的用户编程接口;进阶篇通过几个例子演示如何建立简单的ZigBee无线传感网络系统,并详细阐述了ZigBee协议规范的几个重要概念在TI Z—Stack的代码实现;提高篇通过智能家居系统、无线数据透明传输系统、工业无线传感网络系统、无线定位系统等典型的ZigBee技术解决方案,详细介绍了如何开发实际的ZigBee项目。
[1]. CC2430 datasheet https://www.dzsc.com/datasheet/CC2430_1055132.html.
免责声明: 凡注明来源本网的所有作品,均为本网合法拥有版权或有权使用的作品,欢迎转载,注明出处。非本网作品均来自互联网,转载目的在于传递更多信息,并不代表本网赞同其观点和对其真实性负责。