zigbee保持常连接的实现方法

本文探讨了zigbee设备在特殊情况下如何实现常连接,分析了重连的原因和影响,并提出了通过修改zigbee协议栈避免终端发起重连请求的策略,以提升网络控制的稳定性和用户体验。测试结果显示,这种方法能有效减少重连次数,提高设备控制效率。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一、前言

        终端在第一次连接的时候通常会发一个连接请求(beacon request)给协调器,协调器接受到它的请求后就会给它分配一个短地址,后续通讯的时候终端只需要拿短地址和协调器通讯即可。实际上终端遇到特殊情况是会和协调器发起重连的:1.终端重上电的时候。2.协调器重上电的时候。3.终端离开网络后又重新加入网络。而重连的时候终端和协调器会进行大量数据的交互,从重连到正常发送数据需要一定时间,而且重连对通讯信号强度有要求,信号不好的时候重连会失败。而公司的终端设备是一个低功耗设备,发送完数据就必需进入休眠状态,而且设备之间有金属板阻隔,信号不太强,而且限制重连的时候只发送一个beacon request,所以一般要重连几次才连上,信号不好的情况甚至很难重连。

二、zigbee保持常连接的方法

       zigbee之所以需要重连,个人认为是为了实现自组网和网络自愈的能力,当与终端最近的节点断开了,终端可以通过重连的方式去连接另外一个节点,网络就会重新恢复。代价就是在重连的过程中无法控制设备。还有在星型接的网络里面,重连其实是没必要的,反而增加了网络负担。我想要的效果是只要网络一通就能控制设备,显然利用原有的zigbee协议栈是满足不了要求的,需要更改zigbee协议栈。用抓包工具分析zigbee在断开网络的数据帧,发现网络重连是由终端发起的,因为终端有些是休眠设备,一旦休眠了,协调器是探测不到的,所以问题解决的方向是不让终端发起重连请求。还有一个关键点是终端断开连接的时候会发送一个声明“我是孤儿节点,谁来领养我”,那么可以推理去掉这部分代码应该可以实现不重连。

       这部分源代码在ZDObject.c文件里面,注释掉两行代码即可“


                
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值