2016-11-14 85 views
6

这是我的情况:XBee在大型网络中的通信

我有96个XBee S2B和S2C模块的网络。我的应用程序在ARM模块上运行,并具有XBee S2C模块。所有模块(总共97个)都在同一个网络中,并且能够相互通信。

软件启动并知道所有模块的64位地址。它将执行网络发现(本地AT - > ND)并等待响应。每个响应都会更新每个模块的16位地址。如果一个模块没有响应网络发现,它将每隔30秒再次发送一次(在大多数测试中,60秒后,发现所有节点)。应用程序将使用单播向每个节点发送一条消息,它不会在发送消息之间等待,我尝试了36,42,78和96个节点,每个节点在3秒钟内收到消息预计的),42和78分别需要4和7秒才能到达每个节点,然而96分钟需要90秒(至少)

没有外部干扰,我可以检测到并且所有节点都在到达(如果没有,网络发现将失败)。

我也尝试使用64位消息并忽略16位地址,使用此方法时需要更长的时间。

我使用attie(https://github.com/attie/libxbee3)制作的xbee3库。

我的问题是:如何加速96个节点的通信时间(请记住,目标是能够处理更大的网络),为什么78节点​​和96节点之间存在如此大的差异(为什么网络突然很慢?)

如果有任何关于我的情况需要更多信息,我会很乐意提供它。当我管理代码时,如果您需要更多信息,我可以执行测试。

+0

我不认为这个问题适合所以。 –

回答

3

首先,获得一个802.15.4嗅探器,并开始查看流量,看看发生了什么。没有这个,你就会猜测可能发生的事情。多年以来我一直没有使用802.15.4,但在Ember Desktop之外(仅在Silicon Labs的昂贵开发套件中提供),我对Ubiqua Protocol Analyzer感到满意。您可能还想探索Wireshark's 802.15.4 sniffing功能的位置。

其次,在发送下一条消息之前,尝试执行代码以等待传输状态消息。更好的做法是,编写代码来跟踪多个未完成的消息并用各种设置对其进行测试 - 网络如何在传输状态下等待1条消息而不是5条未完成消息?

我的猜测是,你遇到了管理许多节点的路由表的XBee模块的挑战。 Digi为working with large XBee networks提供了一个文档,它解释了如何在大型网络上使用源路由。您的中央节点可能需要维护路由表并在出站消息中指定路由以提高网络吞吐量。

+0

很好的反应,我正在考虑Ubiqua,它很昂贵,但非常精细。 96个节点现在正在使用中,因此我将尽快获得有关我的情况的更多信息,并且我将为其他具有类似情况的人员更新问题。 – Junky

0

的事情是有很多碰撞并在96个节点所涉及的场景在网络上大的开销的。
我的建议是随着网络的增长,用多个路由器对您的节点进行集群。

0

这个问题很可能是你使用的是基于stadard zigbee的路由,它是AODV,它基本上是在每次传输时计算出来的。一旦节点数量达到很大数目,计算就会呈指数级增长。您应该考虑更改为源路由,它基本上是一种不同的帧类型,也可以使用节点上存储的路由。在一个大的稳定网络上,这个消息的传输速度应该更快。

https://www.digi.com/wiki/developer/index.php/Large_ZigBee_Networks_and_Source_Routing