我现在发现我的网络有一个问题,就是有好几个模块,他们的信号强度都在-57dbm左右,有的在-45dbm左右。在-45dbm左右的两个模块,测试一夜没有重新入网,但是-57dbm的模块却频频重新入网,达5~10次,如果说是信号不行但是-57dbm的信号强度还可以啊,这个是什么原因啊?请问下有什么方案可以解决优化吗?
YiKai Chen:
你有用sniffer去檢查频频重新入网的模块在斷网前的信号强度?
user5805542:
回复 YiKai Chen:
没有,我是根据它每次发送消息给协调器,数据包里面的rssi来检查它的信号强度的
Alvin Chen:
回复 user5805542:
正常-45dbm 也不会掉线的, “ 但是-57dbm的模块却频频重新入网“ 是你控制leave的还是主动leave的。
user5805542:
回复 Alvin Chen:
没有,关于入网的这个地方,我只动了一个连接的次数,其它的没动也没法动啊,已经被你们封装起来了,就是容易重新入网?想问一下,你们是如何判断这个设备无法连接协调器,然后将设备踢下去的
YiKai Chen:
回复 user5805542:
设备發射封包後如果沒有收到mac ack就會重送封包,如果持續沒有收到mac ack,由设备自行判定无法连接
user5805542:
回复 YiKai Chen:
您的意思是设备发射封包后会等待一个ack回应,这个ack回应是协调器发出的吗?但是我没有发射包,应该是设备底层会有心跳包是吧,能不能更改这个心跳包的一个间隔时间?还有如何避免这个情况发生呢?
Alvin Chen:
回复 user5805542:
协议栈版本?
你发送一个包,对方需要回复一下ack。 只有在 1.22a 以及3.0以上版本有child aging。
当然你的你应该有poll rate 当3次poll 没有收到ack 就会判定掉线。
poll rate在
/* This is used after receiving a data indication to poll immediately* for queued messages…in milliseconds.*/
-DQUEUED_POLL_RATE=100
user5805542:
回复 YiKai Chen:
如果设备自行判断无法连接,那是父节点发送请求请它离网,还是说它自己请求离网?有没有什么方式可以优化,让设备至少在10m之内,不会离网。还有,就是判断设备从断网到入网的时间和连接次数,是不是从这开始算起来的:
if ( events & ZDO_NETWORK_INIT ){//新加加网次数统计//static uint8 initFailCounter = 0;// Initialize apps and start the networkdevState = DEV_INIT;osal_set_event( ZDAppTaskID, ZDO_STATE_CHANGE_EVT );//新加连接一定次数之后,连接时间变长/*if(initFailCounter++ >= NWK_INIT_fAIL_MAX ){osal_start_timerEx( ZDAppTaskID, ZDO_NETWORK_INIT, 60000 );initFailCounter = 0;return(events ^ ZDO_NETWORK_INIT);}*/Timer1_Init();network_count ++;ZDO_StartDevice( (uint8)ZDO_Config_Node_Descriptor.LogicalType, devStartMode,DEFAULT_BEACON_ORDER, DEFAULT_SUPERFRAME_ORDER );
// Return unprocessed eventsreturn (events ^ ZDO_NETWORK_INIT);}
YiKai Chen:
回复 user5805542:
只要是單播就會有mac ack,设备底层沒有心跳包,至少據我所知Z-Stack沒有,你貼上你的抓包檔來看看問題吧
user5805542:
回复 Alvin Chen:
/* This is used after receiving a data indication to poll immediately* for queued messages…in milliseconds.*/
-DQUEUED_POLL_RATE=100
这个就是终端节点在底层向协调器发送心跳的时间吗?能不能更改这个时间呢?可以更改的范围是多少?更改后会有什么影响呢?还有我的版本是ZStack-2.5.1a,希望大佬不吝赐教