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

关于DBD的组网,入网的个人理解与问题

z-stack 3.0.1;NV_INIT、NV_RESTORE已开启;GenericApp例程。

在zclGenericApp_Init中加入了手动组入网操作:

#ifdef ZDO_COORDINATORbdb_StartCommissioning(BDB_COMMISSIONING_MODE_NWK_FORMATION | BDB_COMMISSIONING_MODE_NWK_STEERING | BDB_COMMISSIONING_MODE_FINDING_BINDING);NLME_PermitJoiningRequest(255);
#elsebdb_StartCommissioning(BDB_COMMISSIONING_MODE_NWK_STEERING | BDB_COMMISSIONING_MODE_FINDING_BINDING);NLME_PermitJoiningRequest(255);
#endif

一,当只一个ZC,没有其它ZD,ZED的时候:

1)每一次上电,协调器,会进行组网,组网成功后zclGenericApp_ProcessCommissioningStatus回调函数会进入,组网模式的成功状态信息,如下:

  switch(bdbCommissioningModeMsg->bdbCommissioningMode){case BDB_COMMISSIONING_FORMATION:if(bdbCommissioningModeMsg->bdbCommissioningStatus == BDB_COMMISSIONING_SUCCESS){//After formation, perform nwk steering again plus the remaining commissioning modes that has not been process yetHalUARTWrite(0, "Have formated!\n", 15);bdb_StartCommissioning(BDB_COMMISSIONING_MODE_NWK_STEERING | bdbCommissioningModeMsg->bdbRemainingCommissioningModes);}......}

2)如果此时,对协调器进行软件复位操作(不断电),那么上面形成的网络是否还存在?协调器会直接加入网络,入zclGenericApp_ProcessCommissioningStatus的以下代码段?

case BDB_COMMISSIONING_NWK_STEERING:if(bdbCommissioningModeMsg->bdbCommissioningStatus == BDB_COMMISSIONING_SUCCESS){//YOUR JOB://We are on the nwk, what now?HalUARTWrite(0, "Have Joined!\n", 13);}......

3)如果,直接把协调断电重启后,是否认为此网络已不存在,协调器会重新组网?成功后并进行入"1)"的回调结果?

4)而现在实际测试,只有每一次烧写完程序(应该是重新清除了Flash),第一次上电启动,才会进行组网(进入“1)”),后续不管是断电重启,还是软重启,都是直接加入网络(进入"2)")。

二、有一个ZC,一个ZR的情况:

1)先启动ZC,认为ZC会先组网成功,然后ZR加入网络,成功后会返回“一,2)“状态中,(是否是这样?)

2)先启动ZR,后启动ZC,此时还没有ZC组网,所以,ZR会在BDB_COMMISSIONING_NWK_STEERING模式下返回BDB_COMMISSIONING_NO_NETWORK状态,所以我判断了一下BDB_COMMISSIONING_NO_NETWORK状态,并重新进行入网操作,等待协调器组网成功后顺利入网,代码如下:(理解是否正确?)

case BDB_COMMISSIONING_NWK_STEERING:if(bdbCommissioningModeMsg->bdbCommissioningStatus == BDB_COMMISSIONING_SUCCESS){//YOUR JOB://We are on the nwk, what now?HalUARTWrite(0, "Have Joined!\n");}else{//See the possible errors for nwk steering procedure//No suitable networks found//Want to try other channels?//try with bdb_setChannelAttributeif (bdbCommissioningModeMsg->bdbCommissioningStatus == BDB_COMMISSIONING_NO_NETWORK){
#ifdef ZDO_COORDINATOR
#elsebdb_StartCommissioning(BDB_COMMISSIONING_MODE_NWK_STEERING | BDB_COMMISSIONING_MODE_FINDING_BINDING);NLME_PermitJoiningRequest(255);
#endif}}break;
......

3)而实际测试,不管是先启动ZC还是先启动ZR,ZR都无法入网,总是提示BDB_COMMISSIONING_NO_NETWORK,不知道是什么原因?

望各位高手,指正,帮助解决问题,谢谢!

YiKai Chen:

如果協調器使能NV_RESTORE,而且已經走到了 BDB_COMMISSIONING_SUCCESS,如果此时对协调器进行软件复位操作,那么先前形成的网络还是存在。
另外如果ZR成功入網應該是要走到 zclxxx_event_loop裡面的case ZDO_STATE_CHANGE:

jie sun:

回复 YiKai Chen:

YiKai Chen你好:
针对你回复的第一条:如果软件复位后网络还存,协议器是不是根据RESTORE的参数直接加入网络?那断电重启后,又会重新组网吗?
针对你回复的第二条:你说的ZR入网成功后,会进入case ZDO_STATE_CHANGE,你这里是指的ZC的程序吗?(如查ZR入网后,ZC代码会走到case ZDO_STATE_CHANGE)?我贴的代码段,都是针对设备本身的,提到ZC的时候贴的代码就是ZC的代码,提到ZR的时候贴的代码就是ZR的代码,对于ZR来说入网成功后不会进BDB_COMMISSIONING_MODE_NWK_STEERING模式的BDB_COMMISSIONING_SUCCESS吗?
谢谢,请指正!

YiKai Chen:

回复 jie sun:

1 . 断电重启后也是根据RESTORE的参数直接組網或是加入网络
2. 会进入case ZDO_STATE_CHANGE,我是指ZR的程序

赞(0)
未经允许不得转载:TI中文支持网 » 关于DBD的组网,入网的个人理解与问题
分享到: 更多 (0)