使用Andrew Rapp的XBee-API,如何通过来自两个以上端点的协调员对I/O数据进行采样?
我有17系列1 XBees。我已将一个编程为协调器(API模式= 2),其余为端点。使用XBee-API我发送一个Force I / O Sample(“IS”)远程AT命令,单播到每个端点。当最多有两个端点时,这非常有效,但是一旦添加了第三个端点,三个端点中的一个总是变得无响应(超出XBeeTimeoutException)。它并不总是停止响应的物理单元,但总是第三个(例如,如果我将Force I / O Sample发送到Device1,Device2和Device3,Device3将会超时,如果我将订单更改为Device3,则Device1,Device2,Device2将超时。
如果我设置了三个以上的XBees,那么大约三分之一的XBees会超时 - 但不是每三个一个。
我已经证实XBees本身很好。我搜索过互联网和Stack Overflow特别无济于事。我尝试过使用简单的ZNetRemoteAtRequest。我尝试为所有三个设备打开和关闭一次XBee协调器串行连接,每个设备一次,每个程序运行一次。我已经尝试改变协调器和端点之间的距离(相距不超过五英尺)。我尝试了不同的协调器配置参数(来自Digi文档)。我已经尝试为协调员更换XBee。
这是我用来向每个端点发送Force I / O Sample请求并读取响应的代码:
xbee = new XBee(); // Coordinator
xbee.open("/dev/ttyUSB0, 115200)); // Happens before any of the endpoints are contacted
... // Loop through known endpoint addresses
XBeeRequest request = new ZBForceSampleRequest(new XBeeAddress64(endpointAddress));
ZNetRemoteAtResponse response = null;
response = (ZNetRemoteAtResponse) xbee.sendSynchronous(request, remoteXBeeTimeout);
if (response.isOk()) {
// Process response payload
}
... // End loop and finally close coordinator connection
什么可能有助于轮询来自两个以上端点的I / O样本?
编辑:我发现Andrew Rapp的XBee-API库伪造了多线程行为,导致此问题中描述的同步问题。我写了一个替换库, 实际上是多线程的,并正确映射来自多个XBee端点的响应:https://github.com/steveperkins/xbee-api-for-java-1-4。当我写它时,Java 1.4是在BeagleBone,Plug和Zotac单板PC上使用所必需的,但它很容易转换为1.7 +。
答案 0 :(得分:0)
您是否在串口上使用硬件流量控制?当本地XBee取消断言CTS时(例如,要求您停止发送),您是否有可能发出请求?我假设您的运行速度为115200 bps,因此XBee串口可以跟上网络数据速率。
您是否可以打开调试信息,或连接某些端口监控硬件/软件以显示通过串口传输到本地XBee的数据?