4

我正在使用几个XBee Zigbee和一些 Arduino 模块(或微控制器,Arduino 不是强制性的)。我将我的 XBees 配置为 AT/透明模式。

我需要广播信息:当一个模块被触摸时,其他所有模块必须同时立即做出反应。

不幸的是,如果我在单播模式下有很好的速度结果,那么在广播模式下会有很多延迟。这是已知和记录的东西,请参阅XBee ZigBee 寻址

没有数据丢失,但有时它们会被 XBee 缓冲几秒钟,然后再次发送或传送到我的 Arduino。

看来这不是配置问题,而是广播协议的工作方式。关于如何加快进程的任何想法?

我唯一的方法是使用 API 模式,让每个 Arduino 保留 XBee 地址列表,并将单播信息单播到这些地址列表......但我失去了广播方法的舒适性,我不能无需更新每个 Arduino 即可轻松添加新模块。

4

2 回答 2

9

与 XBee ZB 模块一起使用广播寻址传输数据通常会给您带来比将单个单播传输到您想要与之交谈的每个节点低得多的性能。这是因为广播在 XBee ZB 模块上的工作方式与在 XBee 802.15.4 模块上的工作方式非常不同。

当您使用 XBee 802.15.4 模块发送广播时,会将单个 802.15.4 帧传输到网络,所有可以听到传输的节点都会接收到它并将信息从其串行 UART 发送出去。802.15.4 网络是一个简单的星形网络,网络上的任何节点都不会执行广播的隐式重复。有了 XBee ZB,情况就不同了。XBee ZB 模块在网状拓扑中运行,需要将信息重复到原始传输范围之外的其他节点。

当您使用 XBee ZB 模块发送广播时,每个收到广播的节点都会重新广播 3 次,导致节点之间传输大量数据。此外,在任何给定时间,网络上只能有一定数量的“直播”广播。这常常让人们惊讶地认为网络正在丢弃他们的数据,而实际上 XBee 正在拒绝传输请求。

除非您不经常发送数据(可能每分钟一次或更慢地广播一次),否则通常最好遵循以下过程:

  1. 通过执行网络发现或通过启用 AR 功能收集路由记录数据包来构建所有节点的列表
  2. 向您希望传输到的每个节点发送单播

如果您要向大型 ZB 网络上的节点发送信息(即超过 30 个注释),您可能需要阅读这篇文章:大型网络和源路由

于 2012-04-01T18:49:41.133 回答
2

我不认为您可以对其进行更多优化,除非只有某些模块需要接收消息。在这种情况下,您可以使用多播可能仅适用于 Xbee 2)而不是广播,网络增长到足够大(大于 16 个节点,即基本路由表)。

您是否尝试过单播、多播和广播之间的比较?平均而言,进行十几个单播可能更快或至少更可靠,特别是如果您的特定网络中有很多跃点(例如:具有 8 个跃点的 12 节点网络)。

使用单播,您可以获得确认或确认,以便了解操作的总体时间和成功,以及是否需要重试。

于 2012-03-31T00:13:40.253 回答