IEEE802.15.4(TIMAC)下,目标地址为0xFFFF的数据包不能对RFD节点用indirect模式发送,因此,在zigbee网络层,只能让路由在子节点列表(AssociatedDevList)里面,挨个用indirect模式点对点发送。indirect模式依赖allocate到的发送缓冲区,缓冲区默认寿命是7.56秒,如果每个节点都建立一个缓冲区,那么会存在缓冲区不够用的情况。所以我存在以下三种猜测,不知道哪一个是对的。
1,限制每一个路由下能够挂载的RFD数量,我测试过TIMAC的indirect发送,一次压入超过8包数据,FFD就会死机,所以限制路由器下的EndDevice数量,是有可能的方式。请问路由下的EndDevice最大能挂多少个?是否有限制?
2,轮流发送,用indirect模式对子节点列表下的节点挨个点名,一次发送一个,等DataConfirm时,再点下一个。但是DataConfirm事件是随机的,最长时间7.56秒。对于NWK_MAX_DEVICES默认21的协调器来说,挨个点名,实时性不好。
3,限制发送+挨个点名。假设AssociatedDevList里面的RFD有M个,但是indirect一次能压入N个,这样发送次数就是M/N。在f8wConfig.cfg中有个参数POLL_RATE。假设这个参数为2500,而路由器下子节点中有16个RFD,那么广播到所有RFD的最大时间就是16*2500/N/1000 = 40/N秒。