sdk版本是2.4,例子有修改。
sensor和collector非信标模式通讯,一个collector连接了10sensor,sensor发送数据后,collector会及时回复信息。通讯48小时左右,其中个别sensor会出现连续1-3包左右的数据丢失。然后恢复正常通讯,抓包信息,排除掉线可能,sensor:数据ACK成功,poll回调成功,无数据回调触发。
因为collector每次回复,都是带一个时间,sensor时间没有更新,
使用过的处理方式:延长collector数据保留时间,加大sensor,poll次数,poll为500.
Alvin Chen:
偶尔丢包属于正常现象,建议你自己加逻辑去优化。当收到ApiMac_status_noAck,自己重新发送上次失败的信息。
user5322468:
回复 Alvin Chen:
ApiMac_status_noAck我是定时去发的,没有立即发送。
sensor不是ApiMac_status_noAck,sensor发送数据,接收到ack,然后发送poll,poll回调成功,ack也是正确,应该进入data。我现在是打印信息sensor没有进入到data,去取collector发送过来的数据
Alvin Chen:
回复 user5322468:
为了保证稳定性不建议客户去操作STACK的逻辑。dataCnfCB里面现在ApiMac_status_noAck就可以尝试重发一下。我回过你之前的帖子,你应该是不太在意低功耗,为什么不设置SENSOR为CONFIG_RX_ON_IDLE为true,即常在线设备来保证通讯的实时性。
user5322468:
回复 Alvin Chen:
大哥,如果不考虑功耗,我就一直打开poll了。
sensor发送数据,应该首先返回dataCnfCB,失败重发,成功,然后启动poll,poll成功,说明collector回复,后在dataInfCb。
我现在是没有进入到dataInfCb。我的数据操作都在dataInfCb里面。
这是不是说明,collector没有发送成功呀!!!!我senmsg函数返回true不就是成功吗?而且我在dataCnfCB里面都加了重发机制
Alvin Chen:
回复 user5322468:
不是很理解你的意思 我有点晕。。。
collector/sensor发送之后会进入dataCnfCB去处理 MAC Data Confirm callback.
“sensor不是ApiMac_status_noAck,sensor发送数据,接收到ack,然后发送poll,poll回调成功,ack也是正确,应该进入data。我现在是打印信息sensor没有进入到data,去取collector发送过来的数据”
你现在偶尔失败是抓包collector发送给sensor的数据有ACK返回,但是sensor 的dataIndCB没有反应我的理解对吗?
user5322468:
回复 Alvin Chen:
是的,sensor的dataIndCB里面,没有反应。我的数据解析都在里面处理的额。
Alvin Chen:
回复 user5322468:
能否上传抓包文件,并标注出现问题的位置。
user5322468:
回复 Alvin Chen:
跑了4天出现了三次,很难抓到。通讯大概就是
sensor 发送
ack
————————————————————-》‘’collector发送‘’(–接收sensor的data状态回调,发送数据)
sensor poll
ack
sensor无数据回调