您好,
想請教一下,以下兩個問題:
1. Coordinator與End-Device連線後,假設斷線,在Coordinator與End-Device的Z-Stack程序中,那部分可以知道彼此已經斷網的訊息呢?
2. 在斷網後,Coordinator或End-Device 使用哪種API可以發出beacon request呢?
非常感謝您
YiKai Chen:
以Z-Stack 3.0.2的sampleSwitch為例,end device跟父節点断線時会進到zclSampleSw_ProcessCommissioningStatus 的 case BDB_COMMISSIONING_PARENT_LOST: 去启动osal_start_timerEx(zclSampleSw_TaskID, SAMPLEAPP_END_DEVICE_REJOIN_EVT, SAMPLEAPP_END_DEVICE_REJOIN_DELAY)作rejoin;至於協調器並無法得知end device断線、這部份可以透過應用程序去執行heart beat達成
Kevin Qiu1:
beacon request可以用
NLME_NetworkDiscoveryRequest
user5851352:
回复 YiKai Chen:
感謝您的回覆,因我使用的是Z-stack-2.5.1a版本,沒發現case BDB_COMMISSIONING_PARENT_LOST,請問這兩個版本執行的模式是一樣的嗎? 感謝您
YiKai Chen:
回复 user5851352:
Z-stack-2.5.1a要去ZDO_STATE_CHANGE_EVT裡面檢查devState,如果devState不是DEV_END_DEVICE代表跟父節点断線可以透過NLME_NetworkDiscoveryRequest去找父節点
user5851352:
回复 YiKai Chen:
好的,感謝您的回覆,使我獲益良多.另請教另一個問題,當初會問斷網問題是因為,目前由於END-device使用上必須把設定改成-DRFD_RCVC_ALWAYS_ON=TRUE,所以在父節點斷線再次上電後,END-device卻無法自動重連,是否可以建議一些方法可以解這問題,感謝您
YiKai Chen:
回复 user5851352:
你RFD_RCVC_ALWAYS_ON=TRUE的END-device有設置polling嗎?
user5851352:
回复 YiKai Chen:
blog.csdn.net/…/76128050
有嘗試使用這篇文章的方式,斷線後可以連回來一次,第二次斷線後就不行了
——————————————————————————————————————————————————————————————-
不過會設定RFD_RCVC_ALWAYS_ON=TRUE方式,是因為目前使用上父節點傳輸的資料約1232 bytes(切成16筆發送),要接的End-device約25個,如果25個子節點一連上線,全部一直發beacon request ,會造成父節點傳輸的時候造成封包碰撞,原本3秒鐘傳輸完成,會拉長到5分鐘或者更久(有實測過)…設置polling好像會跟原本方式一樣(一直發beacon request),或許是不是只能找end-device測知斷線的區段,再啟動beacon request的功能,重新連網了,感謝您
YiKai Chen:
回复 user5851352:
設定RFD_RCVC_ALWAYS_ON=TRUE後不要把polling rate設置為0應該就可以解決你的問題
user5851352:
回复 YiKai Chen:
您好,您是說f8wConfig.cfg中的以下參數,不要把polling rate設置為0嗎? 感謝
-DPOLL_RATE=1000 -DQUEUED_POLL_RATE=51 -DRESPONSE_POLL_RATE=51 -DREJOIN_POLL_RATE=440
—————————————————————————————————————————————————————————–
我在ZDO_STATE_CHANGE_EVT中加printf訊息,發現在RFD_RCVC_ALWAYS_ON=TRUE斷網後,不會觸發ZDO_STATE_CHANGE_EVT ,還有其他地方可以觸發斷網狀態嗎? 不好意思麻煩您了,感謝
if ( events & ZDO_STATE_CHANGE_EVT ) { ZDO_UpdateNwkStatus( devState );
// At start up, do one MTO route discovery if the device is a concentrator if ( zgConcentratorEnable == TRUE ) { // Start next event osal_start_timerEx( NWK_TaskID, NWK_MTO_RTG_REQ_EVT, 100 ); }
// Return unprocessed events return (events ^ ZDO_STATE_CHANGE_EVT); }
YiKai Chen:
回复 user5851352:
你提出的連結內的下面這些code要去掉
NLME_SetPollRate( 0 );NLME_SetQueuedPollRate( 0 );
NLME_SetResponseRate( 0 );