随着社会的发展,无线网络在我们的各项活动中扮演着越来越重要的角色。无线通信技术有很多,其中ZigBee技术以其低速率、短距离、低功耗的特点,较好地适用于智能家庭、智能建筑、医疗应用和工业自动化等某些特定的需求。
文中主要是对ZigBee网络通讯组网方式的研究。ZigBee2007/PRO中规定的ZigBee网络中节点采取无线自组网的方式组建网络。自组网容易将多个子节点经同一父节点入网,导致部分路由节点负担过重耗电较快,进而引起过早死亡。本文主要是研究通过一种可控的组网方式,使得用户可以通过上位机自动或手动的选择父节点让节点入网,这样可以避免对个别关键节点的过量消耗,延长网络寿命。
1 无线自组网方法分析
无线自组网(Ad Hoc)又称为多跳无线网,它是一种无中心节点、多跳的自组织技术。在ZigBee2007/PRO中倡导的组网方式中,一个新的节点在网络中可以随机放置,接通电源后先完成节点初始化,然后首先向协调点发送指令,协调点接收到请求分配级别指令后会记录节点信息并分配对应级别,并发送分配级别指令。节点在设定的时间内如果收到了分配指令,就会协调点发送包含白组织信息的数据包,确定自己在网络中的级别和父节点信息,接入网络。如果在设定的时间内没有收到分配级别的指令,该节点就会从待机状态唤醒,再次发送分配级别请求指令,循环执行,直到接入成功。当达到设置的上限次数但仍未获得指令信息时,则节点接入失败并报告错误。节点自组织流程图1所示。
2 改进的组网方式
文中要实现的组网方式,是要让子节点加入网络时实现有效的全程可控。当新节点放入网络后,会先广播发送信标帧,有效范围内的可用父节点收到信标后会回复确认消息,其中包含父节点本身的信息,新节点收到反馈的消息后会搜集父节点信息,整理后把包含父节点信息和自身信息的消息广播发送给协调器。协调器接收到消息后会通过串口发送到上位机控制器,经判断后自动或人为的选择适合接入的父节点并将此消息发送给对应父节点,父节点接收到此消息后向新节点发送消息建立连接,节点入网完成。
一个新节点放入网络中,打开电源后会首先应用层会向网络层发送一条发现网络请求原语NLME-NETWORK-DISCOVERY.request对节点进行初始化。网络层收到网络发现请求原语后会向MAC层发送节点扫描请求原语MLME-SCAN.request,来指示MAC层进行网络的主动扫描。MAC层收到此条原语后就会指示物理层向网络中广播发送一条扫描父节点信标帧,然后进入待机模式等待反馈。在可用的父节点接收到信标帧后,会向子节点反馈发送确认消息,其确认消息中将包含父节点本身的信息。节点的MAC层会接收每条具有有效负载的反馈信标,然后对收到的信息进行整理,确认信标负载、信标的对应节点地址等信息,整理后MAC层将会向NLME发送一条指示原语MLME-BEACON-NOTIFY.indication。NLME在收到原语后会对接收到的数据中的地址字段进行标记,以确定是否与自己的近邻表中现有地址相同。如果比对结果显示二者相同,即重复节点,节点会把信标丢弃;如果二者不同,节点就保存信标信息,并把其中的地址信息添加到自己的近邻表中。MAC层在达到设定的计时周期后,就会向NLME发送扫描确认原语MLME-SCAN.confirm,以标志扫描过程结束。然后网络层向应用层法发送一条发现确认原语NLME-NETWORK-DISCOVERY.confirm,将其扫描到的节点信息反馈给应用层。应用层在接收到网络层发送的发现确认原语后,会向NLME发送加入请求原语NL ME-JOIN.request,发送的原语中对应的标识符参数与搜寻到的各节点的网络标识符一致。网络层在收到上层的加入请求指令后,会整理搜寻到的可用父节点信息,加入地址信息后发送加入请求原语MLME-JOIN.request给MAC层。MAC层收到原语后会指示物理层向网络中广播发送一条加入请求信标帧,然后节点会打开定时器并进入低功耗待机状态,等待上级响应。
子节点会在指定的时间间隔周期的唤醒接收上级的指令。协调器完成父节点选择后会给指定的父节点发送确认加入指令,父节点接收到消息后会给子节点发送一条加入请求原语NLME-DIRECT-JOIN.request来完成初始化,原语中的参数DeviceAddress记录将要加入网络的节点地址信息,然后向子节点发送一条请求加入的信标帧。子节点在收到父节点的信标帧后,MAC层会向网络层发送指示原语MLME-ASSOICATE.in dication,将接收到的父节点信息发送到上层。网络层收到原语后将记录父节点信息并比对与近邻表中记录的可用父节点信息是否一致,若一致,则向MAC层发送加入请求原语MLME-JOIN.request;若不一致则发送错误报告。MAC层在与父节点关联成功后会向网络层发送加入确认原语MLME-JOIN.confirm指示加入成功,网络层将向应用层发送加入确认原语NLME-JOIN.confirm,告知节点入网成功。新节点加入网络中子节点的信息流程图如2所示。
作为父节点的协调点或路由节点收到子节点发出的节点扫描信标帧后,NLME会先查看自己的近邻表中是否存在与之相匹配的地址信息,以对新节点是否加入过网络进行判断。如果发现有相匹配的地址信息,则路由节点NLME会记录此条地址信息,然后按照下文的网络原有节点重新加入网络进行操作;如果发现没有相匹配的地址信息,则路由节点NLME会向MAC层发送一条响应原语MIME-ASSOCIATE.resPonse。MAC层收到响应原语后会指示节点物理层向新节点发送一条状态信息,信息中记录路由节点的地址和标识符等信息。等收到子节点发送来的整理完成的信息帧时,路由节点的MAC层会读取信息帧中的头地址信息,然后向NLME发送数据发送请求原语MLME-SEND.request,网络层收到请求原语后判断发送地址是否正确并寻找发送数据需要的路径。路径建立后网络层向MAC层发送发送确认原语MLME-SEND.response,指示节点发送数据。当信息发送到协调点并经上位机选择后会生成一条指示入网命令帧,然后发送。网络会根据上位机选择的父节点地址将命令帧转发给对应的节点。选择的父节点收到命令帧后会读取命令信息,然后节点MAC层发送加入请求原语MLME-JOIN.request给网络层,NLME收到原语后会给新节点分配网络地址。父节点接收入网请求成功,NLME会在节点近邻表中加入新节点的地址等信息,然后发送加入确认原语MLME-JOI N.confirm给MAC层以报告关联成功。新节点加入网络中时路由节点的信息流程图如图3所示。
3 组网过程的实现
在进行ZigBee无线网络的开发应用时,首先应选取合适的硬件设备。TI公司的CC2530微控制器是新一代的片上系统解决方案。本文选取了成都无线龙公司生产的较为成熟的基于ZigBee的无线网络开发系统C51RF-CC2530-PK。软件开发环境本文选取了IAR Embedded Workbench的C/C++交叉编译器和调试器。
需要入网的子节点在完成初始化后,就会启动入网过程。节点会向网络中广播信标帧,然后等待可用路由节点的反馈。广播发送数据的函数如下所示:
当收到反馈的可用父节点信息时,节点会将反馈的信息搜集整理后发送出去,然后进入待机状态,等待入网反馈。节点广播入网请求信息函数段如下所示:
当上位机选取合适的父节点后,父节点会与子节点启动经指定节点直接入网过程。此部分程序在ZigBee协议栈中有例子程序,在此不再详述。
在子节点有效距离内的路由节点和协调器会在于节点广播消息时接收到扫描帧,当路由节点收到子节点的扫描帧时会首先判断自身是否具有加入新节点的能力,包括是否有足够地址空间等。路由节点反馈的函数段如下所示:
子节点搜集收到信息后会给路由节点发送入网请求,其入网请求信息中包含可用父节点信息。
父节点收到指令后会启动节点入网过程。
文中用包括一个协调器、两个路由节点和一个终端节点的网络进行实验验证。程序编写完成后将协调器代码下载至节点1,并将此节点标记为协调器;将父节点程序分别下载至节点2和节点3,并将这两个节点作为原网络的路由节点,也即子节点入网时的可用父节点;将入网节点程序下载至节点4。
下载完成后分别先打开协调器节点1和路由节点节点2节点3的电源,用USB线将协调器与上位机连接起来,等待路由节点自动加入网络,组建所需主干网。待组建完成后打开节点4电源,并打开串口调试助手,此时会看到节点4扫描可用父节点信息后发送的入网请求信息,并在上微机软件窗口显示节点信息,此时选择节点3作为接入父节点,此时可通过串口调试助手看到确认接入命令。节点3接收到指令后会启动接收节点4为其子节点,节点4加入网络。加入网络成功后会在上位机软件显示网络拓扑结构。
4 结论
通过对组建网络和网络节点入网过程的运行实现,验证了所做的可控组网改进方法达到了预期设定的目的,实现了上位机通过选取可用的父节点对入网过程的控制。这样的情况下当在一些特殊情况下或者已知路由节点状态的情况下可以很好地避开功能较弱或者剩余电量较低的节点,可有效地提高关键节点的寿命,进而提高了网络的寿命。