TI中文支持网
TI专业的中文技术问题搜集分享网站

Zigbee设备如何定期查询离线状态?

刚接触zigbee,有一些小问题想请教一下有经验的小伙伴,感谢大家帮忙!

1.zigbee设备入网时可以通过 ZDO_STATE_CHANGE 查看 zclGenericApp_NwkState 的状态来确定协调器、路由器、终端节点是否入网。那么这些设备从网络中离线时应该如何查看呢?通常终端节点可以通过 zclGenericApp_NwkState == DEV_NWK_ORPHAN 来判断离线。那么当有多个终端节点与协调器连接时,协调器如何周期性查看各个终端节点是否在线呢?有具体的函数吗?

2.协调器组建网络后可以主动取消这个网络吗?(取消后不再向外发送信标,其他设备也不会再检测到它)

3.终端节点加入网络后可以主动离线吗?(即使原来的协调器依然存在,终端节点执行离线操作后不重启也不再加入原来的网络)

ZDO_STATE_CHANGE  是谁发送的呢?。

Viki Shi:

1、可以通过child aging来查询状态,如果多次收不到该节点的回复,则判定节点掉线 2、关闭permit joining,其他设备就无法加入进来 3、可以调用NLME_LeaveReq离开网络

A B6:

回复 Viki Shi:

又见到V.S啦,非常感谢您的解答!
上面的回复非常好,但是针对以上的三个问题能分别给出具体的操作函数吗?因为我了解相关信息比较少,只给出基本概念的话,还是不太方便在工程中查找相关内容。
哦,对于终端节点离线还有一个延伸的问题:同上述问题一样组网后协调器保持供电,当对终端节点使用NLME_LeaveReq离开网络后,我还可以通过其他操作再次加入原来的网络吗?这个操作也请提示一下具体的操作函数。

YiKai Chen:

1. 沒有具体的函数,你得在應用程序自己去實作
2. 做個factory reset,然後不要再組新網絡就行
3. z-stack 3.0.2可以用bdb_StartCommissioning(BDB_COMMISSIONING_MODE_NWK_STEERING);

A B6:

回复 YiKai Chen:

非常感谢您的解答!还有两点疑问麻烦您再给看看。
1.没有具体函数的话,有没有具体的变量名呢,比如在某个结构体数组中保存了相关信息(类似于BindingTable这样的变量)。我在工程中搜索关键字 Child Aging 和 Child Table ,但是没有找到确定的值。在应用程序中实现协调器查询离线终端的操作时,应该基于哪个确定的变量或者表来做呢?
2.对于第二、三个问题,我设想的应用场景是:多个设备都由电源供电各自工作,只在指定的某一段时间内建立网络进行数据通信,得到有效数据后就关闭网络,我是想这样可以减少组网过程中的设备应答从而降低功耗。那么要求在关闭网络时无论是协调器还是终端节点都不能清除自身保存的组网信息,因为后续还要再加入相同的网络。我想要实现的效果是:通过应用程序的指令随时停止和重启无线组网,而且设备要持续保持工作不能软件重启,另外在关闭当前网络期间,各个设备不会非当前网络的设备干扰(例如当前网络的终端节点关闭组网功能后,不会其他的处于活跃状态的协调器)。您看我对于降低功耗的这个考虑有没有用?我想自由控制设备入网、离网的这些操作可行吗?

YiKai Chen:

回复 A B6:

1. 一般我們會自己存一份設備表列,然後定期去檢查表列上的設備是否有送信息到协调器,或是定期由协调器去輪詢設備看看設備是否回應來知道設備是否在线
2. 关闭网络的話終端設備就會掉線,掉線設備搜尋網路一樣是會消耗電力的,一般我們不會任意去关闭网络

A B6:

回复 YiKai Chen:

非常感谢您的解答!

赞(0)
未经允许不得转载:TI中文支持网 » Zigbee设备如何定期查询离线状态?
分享到: 更多 (0)