1

Andrew RappのXBee-APIを使用して、3つ以上のエンドポイントからコーディネーターを介してI / Oデータをサンプリングするにはどうすればよいですか?

私は17のシリーズ1XBeesを持っています。1つをコーディネーター(APIモード= 2)に、残りをエンドポイントにプログラムしました。XBee-APIを使用して、各エンドポイントにユニキャストされたForce I / O Sample( "IS")リモートATコマンドを送信しています。これは、最大2つのエンドポイントがある場合に完全に機能しますが、3つ目のエンドポイントが追加されるとすぐに、3つのうちの1つが常に応答しなくなります(XBeeTimeoutExceptionでタイムアウトします)。応答を停止するのは常に同じ物理ユニットではありませんが、常に3番目のユニットです(たとえば、Force I / OサンプルをDevice1、Device2、およびDevice3に送信すると、Device3はタイムアウトになり、順序を次のように変更するとDevice3、Device1、Device2、Device2がタイムアウトします。

3つ以上のXBeをセットアップした場合、3つのうち約1つがタイムアウトになりますが、3つおきにタイムアウトするわけではありません。

XBees自体が正常であることを確認しました。私はインターネットとStackOverflowを特に検索しましたが、役に立ちませんでした。単純なZNetRemoteAtRequestを使用してみました。XBeeコーディネーターのシリアル接続を3つのデバイスすべてに対して1回、デバイスごとに1回、プログラムの実行ごとに1回開閉してみました。コーディネーターとエンドポイントの間の距離を変えてみました(5フィート以上離れてはいけません)。さまざまなコーディネーター構成パラメーターを試しました(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

3つ以上のエンドポイントからのI/Oサンプルのポーリングに役立つ可能性があるものは何ですか?

EDIT: I found that Andrew Rapp's XBee-API library fakes multithreaded behavior, which causes the synchronization issues described in this question. I wrote a replacement library that is actually multithreaded and correctly maps responses from multiple XBee endpoints: https://github.com/steveperkins/xbee-api-for-java-1-4. When I wrote it Java 1.4 was necessary for use on the BeagleBone, Plug, and Zotac single-board PCs but it's an easy conversion to 1.7+.

4

1 に答える 1

1

Are you using hardware flow control on your serial port? Is it possible that you're sending requests out when the local XBee has deasserted CTS (e.g., asking you to stop sending)? I assume you're running at 115200 bps, so the XBee serial port can keep up with the network data rate.

Can you turn on debugging information, or connect some port monitoring hardware/software to display the data going over the serial port to the local XBee?

于 2013-03-13T00:45:39.777 に答える