问题描述:
一个半功能设备(END设备)掉网后,从新入网后(此时父设备更改了),然后这个END设备通过路由发送数据给协调器,协调器能正确的收到,但是协调器给他发数据就出错了。串口返回的值是这样子 FE 03 44 80 F0 02 00 35 ,这个状态值是0xF0,我看资料里说的是ZMacTransactionExpired,我不知道这个是怎么引起的,我看文档和协议栈中都没有详细说明,我想问这个情况怎么解决,是怎么引起的。谢谢·
bin xu3:
回复 VV:
我找到原因了,是因为这个协调器已经这个设备还是他的子设备,其实他已经重新入网,换了父设备,只是这个协调器没有收到设备申明,所以没有更新自己网络信息表,我看你们的新协议栈Zstack2.5.1a更新错误中有提到这个。但是我们用你们2.5.0版本基本都完成整个程序了,现在这个BUG怎么解决啊。
还有一个问题我想问问 void NLME_SetPollRate( uint16 newRate );NLME_SetQueuedPollRate( uint16 newRate );NLME_SetResponseRate( uint16 newRate );这三个函数的参数最小设置为多少是有效的啊?我现在发现一个问题,我的设备唤醒200ms,我将newRate设置为100有时都没法从父设备读取到数据,我很诧异,难道建立通信需要很长时间吗?newRate 短一点是不是频率就更快?这个最小值设置我多少比较合适?
VV:
回复 bin xu3:
你可以比较下void ZDO_ProcessDeviceAnnce( zdoIncomingMsg_t *inMsg )这个函数。
void NLME_SetPollRate( uint16 newRate ); 是用于子设备向父设备请求数据用
NLME_SetQueuedPollRate( uint16 newRate );是用于poll indication用
NLME_SetResponseRate( uint16 newRate );是用于poll confirm用的
这几个数据并不是说越小越好,如果太小你的协议栈频繁处于poll,反而会影响其他工作。
我们协议栈里面提供的默认值,是经过测试验证的,一般情况下不要去修改