使用Andrew的XBee-API,如何通过协调器从两个以上的端点对I/O数据进行采样?
我有17系列1 XBees。我已经编写了一个协调器(API模式= 2),其余的是端点。使用XBee,我将发送一个Force /O示例("IS")远程AT命令,对每个端点进行单播。当有最多两个端点时,这非常好,但是一旦添加了第三个端点,三个端点中的一个就会变得不响应(使用XBeeTimeoutException超时)。停止响应的并不总是同一个物理单元,但它总是第三个(例如,如果我向Device1、Device2和Device3发送Force /O示例,Device3将超时,如果我将顺序更改为Device3、Device1、Device2、Device2,则会超时。
如果我设置了三个以上的XBees,大约三分之一会超时,但不是三分之一。
我已经证实了XBees本身是好的。我已经搜索了互联网和堆栈溢出,特别是没有任何效果。我试过使用一个简单的ZNetRemoteAtRequest。我尝试为所有三个设备打开和关闭XBee协调器串行连接一次,每台设备一次,每次程序运行一次。我试着改变协调器和端点之间的距离(不超过5英尺)。我尝试过不同的协调器配置参数(来自Digi文档)。我已经尝试过为协调器更改XBee。
这是我用来向每个端点发送Force /O示例请求并读取响应的代码:
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的XBee库伪造了多线程行为,这导致了这个问题中描述的同步问题。我编写了一个替换库,是,实际上是多线程的,并且正确地映射了来自多个XBee端点的响应:https://github.com/steveperkins/xbee-api-for-java-1-4。当我编写它时,Java1.4对于在BeagleBone、即插即用和Zotac单板PC上使用是必要的,但它很容易转换到1.7+。
发布于 2013-03-13 00:45:39
您在串口上使用硬件流控制吗?当本地XBee取消CTS (例如,要求您停止发送)时,您是否有可能发送请求?我假设您的运行速度为115200 bps,因此XBee串口可以跟上网络数据速率。
您能打开调试信息,或者连接一些端口监控硬件/软件来显示通过串口传输的数据到本地XBee吗?
https://stackoverflow.com/questions/15330954
复制相似问题