This thread has been locked.
If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.
协议栈:3.0.2
芯片:2530
问题:早上好。我现在有一个EndDevice以及一个Coordinator,这两个设备都开启了NV_RESTORE,当我将EndDevice断电之后重连,发现被ZC踢出网络,在重上电之前这两个设备是能正常通讯的。求解,谢谢。抓包档附上2019年8月16日09_00_20_终端重连被踢出网络.rar
那请帮忙看看这个抓包档的第2976行以后是什么情况?协调器最后为什么没有响应终端的data request呢?而且终端为啥不发孤儿节点声明呢?请教,谢谢。2019年8月15日18_06_05_第2976行自动掉线.rar
你好,我的意图是当终端变为孤儿节点的时候让他重新加网,所以我在zclGenericApp_NwkState == DEV_NWK_ORPHAN里面让LED灯熄灭,从结果来看灯的确是熄灭了,可是抓包文件没有看到orphan 声明,终端也并没有rejoin网络,我是有开启NV_RESTORE的,代码如下,谢谢。
case ZDO_STATE_CHANGE: zclGenericApp_NwkState = (devStates_t)(MSGpkt->hdr.status); // now on the network if ( (zclGenericApp_NwkState == DEV_ROUTER) || (zclGenericApp_NwkState == DEV_END_DEVICE) ) { osal_start_timerEx( zclGenericApp_TaskID, SEND_MESSAGE_EVT, 1000); osal_stop_timerEx( zclGenericApp_TaskID, JOIN_LED_BLINK_EVT ); net_blink_flg = FALSE; } if(zclGenericApp_NwkState == DEV_NWK_ORPHAN) { HAL_TURN_OFF_RED_LED2(); HAL_TURN_OFF_BLUE_LED2(); bdb_StartCommissioning(BDB_COMMISSIONING_MODE_NWK_STEERING ); } break;
1. 我这边用genericapp的demo,仅仅在应用层的初始化上加了一条bdb_StartCommissioning(BDB_COMMISSIONING_MODE_NWK_STEERING ); 然后测试发现:能成功入网,但是当我将协调器断电的情况下,终端没有发出orphan声明,不过断网之后的beacon request倒好像是10s一次。抓包文件附上2019年8月19日15_33_00_用demo测试终端在协调器断电的情况下是否会发orphan.rar
2. 我项目的EndDevice为啥在协调器断网之后完全不会发orphan以及beacon request呢,一点动作都没有。
我照你所说的将关于我自己写的orphan的一段注释掉了
// now on the network if ( (zclGenericApp_NwkState == DEV_ROUTER) || (zclGenericApp_NwkState == DEV_END_DEVICE) ) { osal_start_timerEx( zclGenericApp_TaskID, SEND_MESSAGE_EVT, 1000); osal_stop_timerEx( zclGenericApp_TaskID, JOIN_LED_BLINK_EVT ); net_blink_flg = FALSE; } // if(zclGenericApp_NwkState == DEV_NWK_ORPHAN) // { // HAL_TURN_OFF_RED_LED2(); // HAL_TURN_OFF_BLUE_LED2(); // bdb_StartCommissioning(BDB_COMMISSIONING_MODE_NWK_STEERING ); // } break;
然后我在zclGenericApp_ProcessCommissioningStatus函数里面在处理rejoin事件之前加了我自己的闪灯事件
case BDB_COMMISSIONING_PARENT_LOST: if(bdbCommissioningModeMsg->bdbCommissioningStatus == BDB_COMMISSIONING_NETWORK_RESTORED) { //We did recover from losing parent } else { net_blink_flg = TRUE; osal_set_event( zclGenericApp_TaskID, JOIN_LED_BLINK_EVT ); //Parent not found, attempt to rejoin again after a fixed delay osal_start_timerEx(zclGenericApp_TaskID, GENERICAPP_END_DEVICE_REJOIN_EVT, GENERICAPP_END_DEVICE_REJOIN_DELAY); }
从结果来看,在协调器掉电之后,的确进入了此处这个else的分支,LED会闪,但是抓包并没有发现EndDevice 做出beacon request的动作,请问这个事件是否是封装不开源的?我全局查找不到这个事件。如果此处不能做rejoin动作,那我该如何在EndDevice掉网之后做出重连机制。谢谢