zigbee单播丢包测试(CC2530,ZSTACK)

之前写过一个zigbee数据测试,由于当时对zigbee理解的很浅,所以写的代码丢包严重。最近为了提高数据传输的可靠性,改进了一下通信的方式,结果还不错。 
  之前:协调器+普通终端节点,协调器广播,节点接收广播消息。 
  现在:协调器+路由节点,协调器记录路由的网络短地址进行点播(单播)。 
  这样改进的原因是: 
  1.如果普通终端节点接收数据,那么由于节点默认会定期进入休眠,所以会在休眠唤醒的时候向父节点发送Data Request来看一看在休眠期间有没有发给自己的数据,如此便会增加父节点的通信负担,也会造成更多的CSMA/CA的避让,因此改为路由节点并且不休眠。 
  2.单播比广播稳定,原因是单播可以使用ZSTACK自带的数据重传机制。协调器通过单播的方式把数据发给路由节点之后,那么路由节点会在几毫秒的时间内就发送一个MAC ACK。如果协调器没有收到MAC ACK,就会自动以5毫秒左右的间隔进行多次(默认为8次)数据重传。MAC ACK跟APS ACK相比,速度更快。 
  本次测试的设备连接: 
PC串口助手—-通过串口线定时给————-协调器发送数据 
协调器———-通过zigbee网络给———–路由节点发送数据 
路由节点——-通过串口线把数据发送给—–另一个PC串口助手 
  如此一来就可以根据串口助手统计收和发数据的数量,来测试丢包率。 
  注,由于真正测试丢包只需要看节点收到多少数据,而这个方法还会通过串口这样多余的路径,所以实际上更苛刻。 
  两个节点距离90厘米,天线全功率(0xF5),无干扰,有效16个字节,结果如下: 
1000ms间隔: 
  发31584字节,收31024字节,包接收率98.2% 
500ms间隔: 
  发18992字节,收18720字节,包接收率98.6%(比1000ms还高,,,,不太理解) 
总的来说,单播的通信方式还是比较可靠的。 

附,路由回复的MAC ACK,与在路由掉线时的协调器数据自动重传抓包: 






猜你喜欢

转载自blog.csdn.net/wearlee/article/details/80685763