概述
之前写过一个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,与在路由掉线时的协调器数据自动重传抓包:
最后
以上就是怕黑乌冬面为你收集整理的zigbee单播丢包测试(CC2530,ZSTACK)的全部内容,希望文章能够帮你解决zigbee单播丢包测试(CC2530,ZSTACK)所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复