引言
目前,国内外的一些公司在电子货架标签系统上进行了很多尝试,比较主流的有WiFi方案、有线电子标签方案,以及RFID方案等。但是由于射频芯片有距离的限制,WiFi方案并不能支持足够数量的标价牌;有线电子标签更不合理,因为货架经常需要移动,每次移动都需要重新布线;此外,RFID成本高,功耗不够低,而且需要适用于电子标价牌系统的专用RFID。所以构建电子货架标签系统需要解决好如下技术问题:系统组网方便快捷、数据传输正确稳定、电子标签耗电量低。
无线射频技术发展至今已经相当成熟,利用短距离无线通信技术,使用自定义的网络协议,使电子标价牌系统自成局域网,由于采用了无线通信方式,从而避免了大规模布局布线的麻烦。
当前无线自组网已经形成了一系列标准,包括MAC层和网络层的协议标准,例如IEEE 802.11b、IEEE 802.15.4以及ZigBee协议栈等。然而,目前各种无线自组网的网络协议大多是针对普遍情况而研究的,为满足本系统的功能需求,本文参考了无线自组网的MAC协议和路由协议,结合电子货架标签系统的特点和要求,设计了一种面向电子货架标签的无线自组网协议。
1 无线自组网路由协议的研究与设计
路由协议面向的是数据传输路由过程,由于网内节点性能的差异,传统的Internet路由协议并不适用,而且不同的应用场景需求相差极大,设计通用的路由协议不仅过于复杂,而且也不科学,因此需要针对不同的应用背景来设计协议栈。
无线自组网中的节点可移动、可自主加入或者离开网络以及节点休眠或者故障等因素,使得自组网的网络拓扑结构不断在变化,另外无线收发和复杂的路由计算需要消耗节点较多的能量,传统路由协议显然并不适用。根据无线自组网的特性,结合本系统实际应用需求,设计了如下路由协议:系统的网络架构采用分层分簇的网络拓扑。若干个相邻节点构成一个簇,每个簇都有一个簇头节点,簇与簇之间通过簇头节点进行通信,簇头节点之间构成高一级的网络,在这个高一级的网络里,还可以再次进行分簇,这个过程可以一直进行下去,直到最高层。簇头节点负责簇内节点的管理,并且完成簇内节点信息的收集、融合和转发,同时还负责簇间数据的转发。分层路由的优势在于可扩展性好,可以用于大规模节点的应用场合,但是由于网络拓扑的动态变化,使得路由算法实现较为复杂。典型的分层路由协议有LEACH、TEEN、APTEEN以及ZigBee协议栈中的路由协议等。本系统路由协议参照了LEACH协议和ZigBee协议栈路由机制,根据系统自身的网络架构特点进行了分层分簇路由协议设计,其系统结构图如图1所示。
图1 系统结构图
系统中Sink节点和Router节点均固定不变,Label与Sink节点通过Router中继,网络由Sink节点发起建立。从图1中可以看出,本系统中的Router节点相当于LEACH协议中的簇头节点,但是簇头节点固定。路由结构与ZigBee树形网络结构类似,Sink节点相当于ZigBee协调器,Router和Label节点就如同ZigBee路由和终端设备,但是Sink节点不带终端节点。与二者不同的是,本系统网络一旦构成,则保持比较固定的网络拓扑结构。系统的路由维护主要面向节点损坏的情况,在本系统中Router节点只负责转发各方数据,因此路由协议与LEACH协议和ZigBee路由机制不同,是二者的有机结合。
自组网路由协议描述如下:
(1) 网络建立和设备加入过程
网络的建立过程主要分为两个阶段:Router节点入网阶段和Label节点入网阶段。Sink节点接收到组网命令后,开始定时广播组网信标帧,并监听路由入网请求,收到子节点信标请求后,如果自身地址空间未满,可以容纳该子节点,则回复子节点的信标请求。Router节点第一种入网方式为开机后处于实时监听状态,准备接收组网信标帧,收到信标帧,则回复信标请求。收到信标请求回复后,提取其中的路由信息存储到准父节点信息列表中,继续侦听,直到侦听时间结束,从准父节点信息列表中获取最优父节点(网络深度最小则最优),并发送连接请求,收到该父节点连接请求回复,表示Router节点入网成功,同时父节点将入网信息反馈至Sink节点,由Sink节点转发至数据库,否则从剩下的准父节点信息列表中获取最优父节点,重复上述过程,直至入网成功或者列表空。Router节点的第二种入网方式为到监听时间段结束从未收到组网信标帧,就自动发信标请求,等待发送次数到,查询准父节点信息列表,后续过程同第一种入网方式。Router节点入网成功后,等待 Sink节点结束广播,收到来自Sink节点的组网命令后,Router节点开始广播组网信标帧并监听信标请求,如此循环,等待路由入网时间结束,此后如果有单个新路由节点入网,就通过第二种方式入网。
网络建立的第二阶段为Label节点入网,在Router节点入网阶段结束后,Router节点均处于监听状态,Label节点主动发送入网请求,等待Router节点回应,Label节点提取路由信息,并存储到准父节点信息列表中,等待请求次数到,查询列表并从中选择最优父节点发送连接请求。收到父节点的连接请求回复表示入网成功,此时父节点将向Sink节点发送Label节点入网信息(包括物理地址和网络地址),Sink将节点信息转发给服务器数据库。
(2) 设备网络地址分配
由于本系统的网络架构同ZigBee协议中的树形网络架构相同,故采用类似的路由机制。ZigBee协调器决定网络中的设备最多可以拥有多少子设备,还规定了子设备中路由器的数目。网络中的设备有唯一的物理地址,入网后分配网络地址,并根据网络地址来寻址。设备的网络地址分配主要依据3个网络参数:最多子设备数(Cm),最大网络深度(Lm)和最大子路由数(Rm)。根据式(1)计算地址偏移量Cskip(d),其中d为网络深度(Sink网络深度为0),地址偏移量决定了设备可以分配子设备的地址块大小。
当子节点加入网络时,父节点(Sink节点或Router节点)给Router节点分配网络地址的计算公式为式(2),给Label节点分配网络地址计算公式为式(3),其中index为子路由或子标签的序号。
根据系统的背景,设定Sink节点的网络地址为2个字节长度,每个Sink节点以下的所有对象采用统一编址的方式。由此设定Lm = 3、Cm = 246、Rm = 6,地址分配情况如图2所示。根据式(2),Sink下的第一个子路由节点网络地址为0+0+1=1,第二个子路由节点为0+1×1723+1=1724,即为十六进制的0x 06BC,而网络地址为0x 0001的路由下的最后一个入网的标签的网络地址为1+6×247+240=1723,即为0x 06BB。通过计算不难发现,所有在网络地址为0x 0001下的子设备,其网络地址分配范围为0x 0002~0x 06BB,可见网络地址的分配是分段进行的。根据上述说明,在给定Lm=3、Cm=246、Rm=6的情况下,网络中的标签个数为6×240+6×6×240=10 080,路由的个数为6+6×6=42。
图2 网络地址分配
(3) 路由机制
网络建立稳定后,网内节点通过网络地址进行通信,当需要进行数据转发时,先判断不等式A<D<A+Cskip(d-1),其中D表示目的地址,A为深度为d的路由地址。如果D满足该不等式,则表示目的节点为该路由的后代节点,采取下行路由,否则表示目的节点在更上级路由器的子树上,数据需要继续向上上行路由。
2 无线自组网MAC协议研究与设计
MAC(Medium Access Control)协议是无线自组网协议栈中的关键部分,它的主要任务是提供网络中无线节点对信道的接入方式,为其分配有限的无线通信资源,包括对无线信道进行划分、分配和能量控制等。
本系统网络架构的特点是分层分簇,Label节点绝大部分时间工作在休眠态,而Sink和Router节点没有针对低功耗的需求,而且Sink与Router、Router与Router之间的通信是通过nRF905完成的,Router与Label以及两个Label之间的通信是通过CC2500完成的,所以在设计MAC协议时,可以分层考虑。此外本系统中Router节点是固定的,这与传统的分簇型拓扑结构中的簇头节点又有所不同,而且选用的射频芯片都自带了地址匹配功能和载波侦听(CSMA)功能,CC2500还自带信道评估(CCA)功能,根据这些特征,结合基于竞争型的SMAC协议和TDMA型CTDMA协议,本文设计了自身特有的混合型MAC层协议来满足MAC协议要求,电子标价牌系统MAC协议示意图如图3所示。
图3 电子标价牌系统MAC协议
具体协议描述略——编者注。
3 网络性能保障机制
3.1 信号碰撞避免机制
影响网络性能的首要因素就是多对一通信模式中的信号碰撞和串扰问题。当多对节点同时在同一无线信道下进行数据传送,或者多节点同时向同一节点发送数据时,就容易发生信号碰撞,此时由于信号的叠加,极易使得接收数据发生错误,从而导致通信失败。本系统MAC协议采用了物理载波帧和TDMA结合的方式来避免信号碰撞,能够很好地解决信号碰撞问题。首先, NRF905和CC2500均自带物理载波侦听,发送前均侦听信道是否空闲,若空闲则发送数据,否则就随机退避;其次当系统网络稳定后,标签节点与路由节点的通信是通过TDMA方式进行的,能够避免簇内的信号碰撞;网络组建成功后路由节点与标签节点的通信是通过私有信道来完成的,故能够很好地解决簇内和簇间的信号碰撞问题。
3.2 串扰避免机制
在无线自组网中,接收并处理发给其他节点数据的现象称为“串扰”。当数据流较大、节点密度高的情况下,串扰会造成较大的能量浪费,更严重的是当节点等待特定数据包的时候收到串扰包,而错过了特定数据包,会导致通信失败。在节点入网过程和更新标签信息两种情况下,最易发生串扰现象。本系统通过射频芯片的地址匹配、数据帧地址匹配和信道分配来解决串扰问题。首先,带nRF905模块的发送节点通过广播的形式发送含有接收端地址的数据包,接收端收到数据后,通过私信地址进行下一步通信,能够有效防止串扰;其次,带CC2500模块的发送节点通过公共信道发送含有接收端地址的数据包,接收端接收到数据后,通过私有信道进行下一步通信,同样能够有效防止串扰;再次网络组建稳定后,标签节点在TDMA的机制下,定时唤醒与路由节点通信,避免了串扰。由于系统中的所有节点都有一个唯一的物理地址和网络地址,在进行数据传输时,接收数据均需要进行地址匹配(入网前采用物理地址匹配,入网后采用网络地址匹配),当地址不匹配时,接收节点立刻进入特定状态(继续侦听或者休眠),能够有效避免串扰或者减小串扰的影响。
3.3 心跳维护机制
系统采用分层分簇的网络拓扑结构,网络结构建立之后,一段时间内是能保持稳定的,当簇建立后,路由节点采用TDMA方式为每个标签节点分配心跳信息传输的时间片,正常的心跳通信过程标识无线通信链路正常。链路表现出不正常的情况会逐级反馈至Sink节点,并反馈至客户端,从而对无线网络的状态有了很好的实时监测。当监测到节点状态异常,可以及时对异常进行定位并作出相应的处理,因此能够较好地保障网络故障及时恢复,提高了网络的可靠性。
TDMA方式下,难点在于网内节点的时间同步。由于网内节点硬件层限制,加上对标签节点功耗的苛刻要求,多跳的无线自组网络难以完成全局的时间同步,然而每个路由节点信号只是覆盖整个网络的一小部分,因此基于一跳网络覆盖来建立簇内的时间同步就相对容易得多,不仅满足系统的设计要求,而且整个网络因为时间复用提高了网络的吞吐量。簇内的时间同步过程以及心跳机制描述略——编者注。
4 无线自组网络测试
4.1 节点入网测试
为了方便调试,上位机界面在设计时,根据Sink节点反馈的信息将入网信息解析,显示在节点组网信息反馈列表里,反馈信息列表内容略——编者注。
4.2 大规模标签模拟测试
由于硬件节点数量有限,为了测试系统的稳定性,本文给出一种大规模标签的模拟测试方案。对有限数量的标签进行循环更新,轮流循环向下发送商品更新数据命令,并统计更新次数、更新成功次数和更新失败次数,以及需要的时间。测试结果如图4所示。根据结果可以得出以下3个结论:
图4 大规模标签模拟测试结果
① 根据已发命令次数等于更新成功次数和更新失败次数之和,可以推断Sink节点很稳定,能够正常收到管理平台下发的商品更新信息,并按规定回复。
② 根据发送1450次更新命令,而更新成功次数达到1435,成功率达到99%,可以推断系统内路由节点和标签节点也很稳定,而且在更新失败的情况下,能够恢复正常,说明系统具有较强的自愈性。
③ 更新失败的情况下,需要3.5 s反馈更新失败,平均计算,单个标签更新成功需要419 ms。
4.3 标签网络状态监测测试
根据系统MAC协议和路由协议的描述,系统内由标签节点定期向上发送心跳包,该时间间隔是固定分配好的,路由下的某标签节点向路由发送心跳包,通过自组网络成功反馈至客户端时,表示标签节点在线,否则表示标签节点离线。状态监测效果略——编者注。
结语
本文综合了AdHoc网络和无线传感网(Wireless Sensors Network,WSN)的特点,结合实际应用需求,设计了适合的无线网的组网方案,实现了无线自组网的MAC协议和路由协议,完成了标签的组网和多跳通信。利用物理载波侦听、TDMA以及信道复用等机制避免了信号碰撞和串扰,提升了网络稳定性和数据正确率。通过设置数据加密以及报警功能,保证了系统无线网络的安全性。