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秒。
VV:
TI1:TI MAC的sample application里面规定是MSA_MAX_DEVICE_NUM 50
2:这样可靠性比较高,但时延会比较长
3:TIMAC里面没有f8wConfig.cfg配置文件的。
Aries Lord:
回复 VV:
zigbee对RFD广播是用的哪种方式?z-stack是用的TIMAC的库,在MAC层上必然受到TIMAC的限制。TIMAC在使用indirect模式发送时,同时发送8包数据就会死机。TIMAC里面有个macPibDefaults.transactionPersistenceTime参数,默认0x1F4,约合7.56秒。这个就是indirect的超时限制,如果indirect的数据在这个时间没有发送出去就会超时。
z-stack下,默认有21个节点。但是z-stack能做到同时对21个节点使用indirect模式发送数据么?或者采用分时发送?
VV:
回复 Aries Lord:
请你检查NWK_INDIRECT_MSG_MAX_PER 和 NWK_MAX_DATABUFS_TOTAL 变量,是不是因为indirect messaging buffer overflow errors 造成的
Aries Lord:
回复 VV:
NWK_INDIRECT_MSG_MAX_PER 和 NWK_MAX_DATABUFS_TOTAL在TIMAC里面没有,TIMAC里面indirect我测试8条能通过,14条就会死机。我想知道TIMAC的默认最大indirect msg是多少条?同时z-stack在使用对终端节点广播时,是否也存在这个限制?
VV:
回复 Aries Lord:
MAC_CFG_TX_MAX这个变量是MAC层发送数据队列的限制,你可以改下试试。
Z-stack也同样有限制的
Aries Lord:
回复 VV:
TIMAC默认值为5,z-stack协调器和路由器增加到了8。
但是z-stack广播到终端节点,每个协调器和路由器下面最大20个终端节点,能否保证每一个节点都能收到信息?
VV:
回复 Aries Lord:
Z-stack里面对一个节点都有一定的存储空间,就是NWK_INDIRECT_MSG_MAX_PER