这是43个节点的灯控小项目。通过抓包发现,43个节点都在网络中,并且定时上传发送心跳包到协调器。但我在协调器端打印时,发现只有8个设备的心跳在线。并且不时有返回NO ACK的数据包(APS ACK),我不清楚是什么原因倒致的,或者说,我该用什么方式来排查这个问题?
发送函数配置:AF_ACK_REQUEST|AF_SKIP_ROUTING, AF_DEFAULT_RADIUS
编译配置:
协调器预编译配置
CONCENTRATOR_ENABLE=TRUE
CONCENTRATOR_DISCOVERY_TIME=120
CONCENTRATOR_ROUTE_CACHE=FALSE
MAX_RTG_SRC_ENTRIES=65
附抓包数据121212122221212212222.psd121212122221212212222.psd
user1573020:
我感觉是协调器应答节点心跳有超时,故返回no ack。
假设是这个原因,是不是AF_SKIP_ROUTING这个参数原因?协调器单播应答时,没有找到路由节点而报错?而那8个有应答的路由节点,协调器能够不通过路由发现就直接找到。会是这个原因吗?
user1573020:
回复 user1573020:
另外,AF发送后应答超时值,在哪里可以配置?我想试下把这个协调器等待应答的超时值拉长点再测一把。
Alvin Chen:
回复 user1573020:
我今天测试了一下MTO,允许多跳的,我看了一下你的包里面有一些节点在没有ACK的情况下在重复resent数据包。我用的是基于z-mesh的协议栈,你用的是z-home1.22a吧,你先AF 单播试一下。
VV:
为什么要添加AF_SKIP_ROUTING?本来是多跳网络,需要有走路由的功能。
Aries Lord:
用了AF_SKIP_ROUTING就别用AF_DEFAULT_RADIUS
user1573020:
回复 Alvin Chen:
谢谢alvin chen的解答
我用的是home1.22a,关于resent数据包,我的上位机会随机收到”设备无应答“的消息返回(注:我在AF_DATA_CONFIRM_CMD事件里做了sentStatus的判断),感觉是协调器发送数据包到子节点,子节点没有响应。
另外,你的MTO方案,编译配置和AF_DataRequest的参数是怎样的?我借鉴下。
谢谢
Alvin Chen:
回复 user1573020:
www.ti.com/…/swra427c.pdf
我只是参照上面的文档,适当地修改了一下大小。AF_DataRequest里面
if ( AF_DataRequest( &GenericApp_DstAddr, &GenericApp_epDesc,GENERICAPP_CLUSTERID,(byte)osal_strlen( theMessageData ) + 1,(byte *)&theMessageData,&GenericApp_TransID,AF_DISCV_ROUTE|AF_ACK_REQUEST , AF_DEFAULT_RADIUS ) == afStatus_SUCCESS )