java - Java中如何正确发送和接收多个XBee的数据包

标签 java swing xbee

我有一个 15 秒的定时器 Swing ,它通过我的协调器 API (XBee S2) 将数据包发送到最多 20 个路由器 AT。我通过 SerialPortEvent(我正在使用 RXTXcomm.jar 库)接收我的所有数据包,我收到的每个数据包都存储在缓冲区 ArrayList 中。 它们是两个不同的线程吗?我仍在继续使用主 GUI。

所以,我的问题是:向/从多个 XBee 模块发送和接收数据包的最佳方式是什么?我考虑了两种选择,制作一个 for 循环以将单播数据包发送到每个模块(最多 20 个),之后,如果我得到任何响应,请验证我的缓冲接收器。我目前使用这种方法,但有时我会丢失数据包,可能是因为 XBee 是半双工的并且我在发送的同时接收?

另一种选择是发送一个单播数据包并等待每个数据包的响应。在那种情况下,为了不延迟我的定时器 Swing (15 秒),我应该等待什么超时响应。我应该增加这 15 秒吗?

编辑:

我当前的 ACK 超时为 300 毫秒,响应为 450 毫秒

最佳答案

利用来自 XBee 的传输状态数据包,通知您是否在每个路由器的 radio 层接收到数据包。如果应用层的路由器 ACK 不包含任何附加信息,您可以潜在地消除它以减少网络流量。

您应该可以将每个帧发送到路由器并跟踪哪些是 ACK,然后重新发送在第一遍中未确认的帧。只要您在协调器上使用硬件流控制来监视 XBee 模块的串行缓冲区的状态,您就应该没问题。如果XBee掉落CTS,需要立即停止发送字节。

XBee以全双工方式与主机通信,但网络上一次只能发送一个 radio (类似于以太网)。 XBee 模块将管理入站/出站数据包。

最后,确保您的主机以 115,200 bps(或更快)的速度与 XBee 模块通信。使用默认值 9600 bps 效率低下并且会增加主机确认数据包所需的时间。

关于java - Java中如何正确发送和接收多个XBee的数据包,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24632318/

相关文章:

c++ - 串行端口 - 以 uint8 发送数据

java - 通过检查点找到穿过迷宫的最小路径

java - 使用 JavaCV 库接收 RTSP 流

java - 为什么我们在 Assertj Swing 测试中偶尔会失败?

java - 迷宫游戏编程

embedded - XBEE 双工通信

linux - Raspberry Pi 上的 XBee Linux 串口

java - StringBuilder 应该在打印之前转换为 String 吗?

java - Spring Boot + Security - 启用 CSRF 时无法上传文件(多部分)

java - 定时器延迟问题Java