XBee DigiMeshの通信リトライ、その他

DigiMeshでRF通信エラー時にどうなるか、データシート良く読んでみました。ユニキャスト時に相手がACK返さないときは、自動的にリトライされます。アプリ側でリトライ処理する必要がないので楽ですね。

●ユニキャスト

アドレスを指定してRF送信する方法です。相手が正常に受信したら、ACKが返ってきます。ACKが規定時間に返ってこない場合は、送信を自動でリトライします。このリトライ回数はMRパラメータで指定できます。デフォルト値はリトライ1回、つまり、最大2回送信されます。(データシートP40などに記載あり)

●ブロードキャスト

ブロードキャストの時は、相手が複数ある可能性があるため、相手側からACKは返ってきません。その代わり、無条件で送信を複数回繰り返します。この回数を指定するのが、MTパラメータです。デフォルトではリピート3回、つまり4回送信されます。(データシートP40記載あり)

※ここで言うACKというのは、ローカルのXBeeからシリアルで返ってくる、Transmit statusフレームのことではありません。ただ、送信後に返ってくる、ローカルのTransmit statusフレームのステータス値を見ると、送信が成功したか(RFのACKを受信して相手に正常に伝わったか)が確認できます。

送受信バッファのサイズが、今のところ記載が見つからないので不明なんですが、リトライしている間はバッファを占有しているため、マイコンと接続するUART信号はフロー制御しておいた方が安心ですね。

●16ビットアドレスは?

ZigBeeでは64ビットアドレス(MACアドレス=シリアル番号)のほかにコーディネータが自動でアサインする16ビットアドレスというものがありますが、DigiMeshにはないみたいです。MACアドレスの上位32ビットはすべてのXBeeで共通なので、下位32ビットで指定すればいいでしょう。ちなみにブロードキャストのときは、上位48ビットは0で、下位16ビットは0xFFFFです。

●リモートのXBeeのコンフィギュレーションを設定

Remote AT command requestで相手の設定値を書き換えます。デジタル出力を遠隔で書き換えるのと同じですね。このコマンドは相手側XBeeで実行するATコマンドを送ることができます。

●ネットワークに接続されているすべてのノードのアドレスを調べる

ネットワークディスカバリーの方法は、Remote AT command request でNDコマンドをブロードキャストで送信しますAT commandNDコマンドをローカルに送信します。それに応じて、各ノードからそれぞれRemoto command responseが返ってきます。その中に64ビットアドレスが含まれているので、それをアプリ側でリストに保存します。

簡易的にはアドレスを控えておいて、アプリ側で直接指定してもいいですが、つながっているかどうかの確認と、ノードの入れ替わりがある場合は、固定では対応できないケースがあります。


参考文献:XBee  XBee-PRO DigiMesh 2.4 RF Modules_90000991_M

コメントは受け付けていません。