Z-STACK快速广播丢数据。
大家好,我用最新的协议栈做数据传输,用协调器广播数据,间隔300ms,发现会丢包,用packet sniffer观察,发现每隔3s左右,协调器发送的数据会停顿一下600ms左右,我调试发现串口收到的数据没有全部发送出去,和sniffer观察到的情况是一致的,但如果用点对点传输就不存在这个问题,不知道这是不是协议栈的一本BUG,如何解决?
你好,
在Zigbee中,广播数据是不适合像单播数据这么连续发送的,这是Zigbee协议栈规定的。
Zigbee的广播机制解释如下,广播数据在发出后,其余有广播能力的节点如rouer在收到后会转发这个广播包,如此一层层往后跳以保证整个网络都能收到这个广播。同时,任何一个节点在发送或转发这个广播包的时候会监听自己的邻居有没有进行转发,如有没进行转发的,说明该邻居可能没有收到,会进行重发。重试次数在zstack中有设定。
如此,一旦网络规模大了整个广播包会在空中存在较长时间,所以Zigbee联盟设定了nwkBroadcastDeliveryTime这个属性,用来说明一个广播包最多有效的时间。而在这段时间内,发起者都会保留这个广播包放在一个table中。这个table默认最多能存10个这样的包,所以连续发送的话,发送10个时候这个table就存满了,新的包就不能发送了,必须等待有数据过期后才有新的数据能发出。
以下是Zigbee联盟建议 nwkBroadcastDeliveryTime 过期时间的计算方法,参考Zigbee spec:
nwkBroadcastDeliveryTime = 2*nwkMaxDepth* ((0.05+(nwkcMaxBroadcastJitter/2))+ nwkPassiveAckTimeout*nwkBroadcastRetries/ 1000)
感谢您的回复,我想可能就是这个原因,我要做一些实验来确认下。
你好,请问,我用4个路由同时给终端点播消息,可是终端有时候接收不到四个,只能接收到三个,请赐教。我觉得是不是同时发,导致发送失败,然后重传多次都失败,然后导致消息丢失,所以没收到。是否f8wConfig.cfg有相关重发的设置,求赐教!
你好,请问,我用4个路由同时给终端点播消息,可是终端有时候接收不到四个,只能接收到三个,请赐教。我觉得是不是同时发,导致发送失败,然后重传多次都失败,然后导致消息丢失,所以没收到。是否f8wConfig.cfg有相关重发的设置,求赐教!
你好,
请问如何才能关闭这个重传机制,我想像UDP那样,只管发出去。具体在协议栈的哪个地方,万分感谢!
(PS:我的是ZStack-2.5.1a)
我有遇到这样的问题,而且终端还经常掉网,然后又重新加入到协调器,导致丢包很严重
您可以f8wConfig.cfg中修改 -DNWK_MAX_DATA_RETRIES和-DAPSC_MAX_FRAME_RETRIES
这两个 -DNWK_MAX_DATA_RETRIES和-DAPSC_MAX_FRAME_RETRIES是做什么用的
是设置重传参数的