XBeeモジュールの使い方(ZDOコマンド:0x0038 Mgmt_NWK_Update)


1. ZDOコマンドによる管理ネットワーク更新要求

 ZDO(Zigbee Device Object)はZigbeeデバイスの検出やネットワーク管理など、Zigbeeネットワークの管理および検出機能を提供します。前回は、ZDOコマンド(クラスタID:0x0031)であるManagement LQI(Link Quality Indicator)要求を実行し、返信されたフレームを解析してLQI等のパラメータを確認しました。今回は、ZDOコマンド(クラスタID:0x0038)である管理ネットワーク更新要求を実施します。

              表1 ZDOコマンド(クラスタID)の種類

     ZDOコマンド(クラスタID)        内容
0x0001IEEEアドレス要求
0x0002ノード記述子要求
0x0004シンプル記述子要求
0x0005アクティブエンドポイント要求
0x0031管理LQI(Link Quality Indicator)要求
0x0032管理ルーティング要求
0x0034管理離脱要求
0x0036管理参加許可要求
0x0038管理ネットワーク更新要求

 Zigbeeプロトコルにおいて ZDO(Zigbee Device Object)コマンドの一つとして「管理ネットワーク更新要求(Mgmt Network Update Request)」が定義されているのは、Zigbeeの分散型ネットワーク設計思想に基づくものと考えられます。

 Digi International が提供する資料には、APIフレームを用いてZDOコマンドを送信する機能について、次のように記載されています。

「ZDO は通常、ホームオートメーションやスマートエネルギーなどのパブリックプロファイルで相互運用する Zigbee 製品を開発する場合、または他社の Zigbee デバイスと通信する場合に必要になります。また、ZDO を使用して、周波数アジリティ(エネルギー検出とチャネル変更 – Mgmt Network Update Request)、ルート(Mgmt Routing Request)とネイバー(Mgmt LQI Request)の検出、デバイスの接続管理(Mgmt Leave および Permit Join Request)等の管理機能を実行することもできます。」

 Zigbeeの設計思想に基づく「周波数アジリティ(Frequency Agility)」の管理機能は、モジュール内部に実装されており、ZDOを通じて実行できることが分かります。但し、この機能が常に自動的に動作するわけではありません。

 ZDOコマンド(クラスタID:0x0038)である管理ネットワーク更新要求(Management Network Update Request)を適切に発行することで、ユーザは手動、あるいは設定に基づく半自動的な制御によって、エネルギー検出(Energy Scan)やチャネル変更を実行できます。従って、XBee3における「周波数アジリティ」は、予め完全自動で動作する機能というよりも、ZDOコマンドを活用することで実現されるネットワーク管理機能と捉えるほうが、より正確な理解であるといえます。。

       図1  ZDOコマンド(0x0038)による管理ネットワーク更新要求の概念図

Figure 1 Conceptual diagram of a management network update request using the ZDO command (0x0038)

2. ZDOコマンド(クラスタID:0x0031)実施例

 XBee3のZigbeeファームウェアを使用し、コーディネータ1台とルータ2台から成るネットワーク構成において、その動作を確認します。

                 表2 XBee3のパラメータ設定

パラメータコーディネータルータ1&ルータ2
CE (Device Role)Form Network [1]Join Network [0]
AP (API Enable)API Mode Without Escape [1]API Mode Without Escape [1]
AO (API Output Mode)0x10x1

 コーディネータXBee3のXCTUのConsoles working modeからFrames Generator Toolを起動し、コーディネータ自身に以下のAPIフレームを送信します。

 Frame typeは0x11を選択します。コーディネータの64ビットアドレスは、0x0000000000000000を入力します。16ビットアドレスは0x0000です。

Source endpointとDestination endpointはどちらも0x00に設定します。

Cluster IDを0x0038に設定します。

Profile IDを0x0000に設定します

RF data (HEX)はHEXのタブから01 00 F8 FF 07 05 01 00 00を入力します。

               図2 API Frames Generatorの入力画面

(完成した送信用フレーム)

Explicit Addressing Command Frame (API 1)

7E 00 1D 11 01 00 00 00 00 00 00 00 00 00 00 00 00 00 38 00 00 00 00 01 00 F8 FF 07 05 01 00 00 B0

Start delimiter: 7E

Length: 00 1D (29)

Frame type: 11 (Explicit Addressing Command Frame)

Frame ID: 01 (1)

64-bit dest. address: 00 00 00 00 00 00 00 00

16-bit dest. address: 00 00

Source endpoint: 00

Dest. endpoint: 00

Cluster ID: 00 38

Profile ID: 00 00

Broadcast radius: 00 (0)

Transmit options: 00

RF data (HEX): 01 00 F8 FF 07 05 01 00 00

RF data (ASCII): 

 APIフレームが完成したら、送信を行うと以下の図のように、PCからUART経由でコーディネータにAPIフレームを返信します。

            図3 コーディネータからAPIフレーム送受信画面

(受信フレーム)

Explicit RX Indicator (API 1)

7E 00 2D 91 00 13 A2 00 42 1D 75 06 00 00 00 00 80 38 00 00 01 01 00 00 F8 FF 07 02 00 00 00 10 B3 B1 B3 B5 EC B3 B3 B5 B5 B5 C6 CC C6 DB C9 EF ED

Start delimiter: 7E

Length: 00 2D (45)

Frame type: 91 (Explicit RX Indicator)

64-bit source address: 00 13 A2 00 42 1D 75 06

16-bit source address: 00 00

Source endpoint: 00

Destination endpoint: 00

Cluster ID: 80 38

Profile ID: 00 00

Receive options: 01

RF data (HEX): 01 00 00 F8 FF 07 02 00 00 00 10 B3 B1 B3 B5 EC B3 B3 B5 B5 B5 C6 CC C6 DB C9 EF

RF data (ASCII): 

(受信フレームの解析)

       表3  ZDOコマンド(0x0038)に対して送信されたフレームの構造

フレーム説明
7EStart delimiter
00 2DLength 00 2D = 45 bytes
91Frame Type  Explicit RX Indicator
00 13 A2 00 42 1D 75 06コーディネータ自身の64bit Source Address
00 0016bit Source 00 00はコーディネータ自身
00APS層 Source Endpoint
00Destination Endpoint
80 38Cluster ID 要求0x0038に対する応答
00 00Profile ID  ZDO
01Receive Options  ACKあり
01 00 00 F8 FF 07 02 00 00 00 10 B3 B1 B3 B5 EC B3 B3 B5 B5 B5 C6 CC C6 DB C9 EFRF Data(ZDO応答ペイロード)
EDCheck Sum

 さらに、以下の表にRFデータの最初の11バイトの定義と意味を示します。

              表4 RFデータのヘッダー部分の構造

フィールドバイトサイズRFデータ意味
TSN101要求と一致
Status100スキャン成功 失敗は80
Scanned Channels400 F8 FF 07Little Endianで表示されているため変換すると、0x07FFF800 = CH11〜CH26を意味している。
Total Transmissions202 00内部処理回数Little Endian表示なので0x0002 = 2回
Transmission Failures200 00失敗なし
Energy ValuesN10残り16バイト

 以下に、RFデータの残りの16バイトは、エネルギースキャンの実施結果を表示しています。

B3 B1 B3 B5 EC B3 B3 B5 B5 B5 C6 CC C6 DB C9 EF

対応するチャネルはCH11〜CH26 = 16チャネルであり、これを16バイトで表しています。

          表5  RFデータの残りの16バイトのエネルギースキャン結果

CH値(hex)10進数
11B3179
12B1177
13B3179
14B5181
15EC236
16B3179
17B3179
18B5181
19B5181
20B5181
21C6198
22CC204
23C6198
24DB219
25C9201
26EF239

 エネルギー値は環境ノイズの大きさであり、値が大きいほど干渉が強いことを意味しています。 今回の結果を見ると、CH15 = 0xEC = 236及びCH26 = 0xEF = 239で、かなり高い値が得られていることが分かります。

3. まとめ

 今回は、ZDOコマンド(クラスタID:0x0038)である管理ネットワーク更新要求を実行し、その結果を示しました。本検証では、PCからUART経由でコーディネータに対してAPIフレームを送信し、ZDOコマンドを実行しています。取得した応答APIフレームを詳細に解析することで、エネルギースキャンの成否を確認できるだけでなく、対象となる16チャネル(CH11~CH26)それぞれのエネルギーレベル(ノイズ強度)を定量的に評価できることを明らかにしました。