以下、実施形態について、図面を参照しながら詳細に説明する。説明の順序は次のとおりである。
まず、図1を参照して、一実施形態による通信システムの概要を説明する。次に、図2〜3を参照して、図1の通信システムに含まれるゲートウェイとノード装置それぞれの構成について説明する。その後、図4〜7を参照して、ゲートウェイとノード装置で使われる各種情報について説明する。さらに、図8〜9を参照して、通信システム内で送受信される各種フレームについて説明する。それから、図10〜17のフローチャートを参照して、ゲートウェイとノード装置の動作について説明する。最後に、図1〜17に示した以外の実施形態についても説明する。
さて、図1は、一実施形態における通信システムのネットワークトポロジ図である。図1の通信システム100は、1台のゲートウェイ101と複数のノード装置111〜143を含む無線通信システムである。ゲートウェイ101とノード装置111〜143により構築される図1のネットワークは、無線アドホックネットワークであってもよい。
ゲートウェイ101およびノード装置111〜143のそれぞれは、ネットワークトポロジにおけるノードに相当し、図1では円形で示されている。また、1ホップで通信しあうことの可能なノード間のリンクは、図1では実線または破線の直線により示されている。
具体的には、本実施形態の通信システム100では、ゲートウェイ101が、ノード装置111〜143のそれぞれからデータを収集する。換言すれば、各ノード装置111〜143は、ゲートウェイ101宛のデータをそれぞれ送信する。図1の実線の直線は、データの収集に実際に使われるリンク(換言すれば、収集されるデータが経由する無線リンク)を示す。
例えば、ノード装置111が送信したデータは、直接ゲートウェイ101により受信される。また、ノード装置121が送信したデータは、ノード装置111により中継されてゲートウェイ101により受信される。したがって、図1では、ゲートウェイ101とノード装置111の間のリンクおよびノード装置111とノード装置121の間のリンクが、実線で表されている。
なお、収集されるデータは任意のデータでよい。例えば、各ノード装置111〜143は、センサと接続されていてもよく、センサが感知したデータをゲートウェイ101宛に送信してもよい。
また、通信システム100内では、各種の制御情報も送信される。図1の破線の直線が示すリンクは、物理的には1ホップで通信しあうことのできるノード間のリンクであるが、データの収集には使われていないリンクである。
例えば、本実施形態では、ノード装置126は、物理的にゲートウェイ101と1ホップで通信しあうことができる通信可能エリア102の中にある。よって、ノード装置126は、ゲートウェイ101との間で制御情報(例えば後述のハローフレーム)を交換することができる。
しかし、ノード装置126は、制御情報以外のデータ(例えば上記のセンサが感知したデータ)をゲートウェイ101宛に送信するときは、直接ゲートウェイ101を宛先として指定しない。代わりに、ノード装置126は、最終的な宛先としてゲートウェイ101を指定するとともに、1ホップ目の直接的な宛先としてはノード装置113を指定して、データを送信する。そのため、ノード装置126から送信されたデータは、ノード装置113を経由してゲートウェイ101に届く。
したがって、図1においてノード装置126は、ノード装置113とは実線でつながれているが、ゲートウェイ101とは破線でつながれている。図1では、他のリンクも同様に、ゲートウェイ101を最終的な宛先とするデータの送信に実際に使われるか否かに応じて、実線または破線で示されている。
よって、図1によれば、ノード装置111〜113からは1ホップでデータがゲートウェイ101に届き、ノード装置121〜126からは2ホップでデータがゲートウェイ101に届く。また、ノード装置131〜139からは3ホップでデータがゲートウェイ101に届き、ノード装置141〜143からは4ホップでデータがゲートウェイ101に届く。
以下では説明の便宜上、通信システム100内での最終的な宛先を「GD(Global Destination)」ともいい、1ホップ目の直接的な宛先を「LD(Local Destination)」ともいう。また、通信システム100内でのおおもとの送信元を「GS(Global Source)」ともいい、隣接ノード装置間の1ホップの通信における送信元を「LS(Local Source)」ともいう。
例えば、ノード装置122からノード装置111を介してゲートウェイ101にデータがマルチホップ送信される場合、GSは常にノード装置122でありGDは常にゲートウェイ101である。しかし、LSとLDはホップごとに変化する。つまり、ノード装置122からノード装置111への送信では、LSはノード装置122でありLDはノード装置111である。それに対し、ノード装置111からゲートウェイ101への送信では、LSはノード装置111でありLDはゲートウェイ101である。
なお、図1における実線の直線の太さは、当該直線が示すリンクを介して送信されるデータの量を示す。データの量が多いほど、直線も太い。換言すれば、リンクの負荷が高いほど、直線も太い。
例えば、ノード装置133と123の間のリンクを示す直線よりも、ノード装置123と112の間のリンクを示す直線の方が太い。そして、ノード装置123と112の間のリンクを示す直線よりも、ノード装置112とゲートウェイ101の間のリンクを示す直線の方が太い。その理由は、次のとおりである。
ノード装置133がゲートウェイ101宛に送信するデータは、ノード装置123と112を経由してゲートウェイ101に届く。すなわち、ノード装置123は、データをノード装置133から受信し、ノード装置112に中継する。さらに、ノード装置123は、ノード装置134から受信したデータをノード装置112に中継する処理も行うし、ノード装置123自身がGSとなって、ゲートウェイ101をGDとするデータをノード装置112に送信する処理も行う。
したがって、ノード装置133と123の間のリンクを介して送信されるデータの量よりも、ノード装置123と112の間のリンクを介して送信されるデータの量の方が多い。よって、図1では、ノード装置133と123の間のリンクよりもノード装置123と112の間のリンクの方が、より太い直線で示されている。
同様に、ノード装置123と112の間のリンクを介して送信されるデータの量よりも、ノード装置112とゲートウェイ101の間のリンクを介して送信されるデータの量の方が多い。よって、ノード装置123と112の間のリンクよりもノード装置112とゲートウェイ101の間のリンクの方が、より太い直線で示されている。
以上のとおり、通信システム100内の各ノード装置111〜143からゲートウェイ101がデータを収集する本実施形態では、ゲートウェイ101と、ゲートウェイ101から1ホップ目の各ノード装置111〜113との間のリンクの負荷が高い。したがって、通信システム100内で最も輻輳が起きやすい箇所は、ゲートウェイ101と、ゲートウェイ101から1ホップ目の各ノード装置111〜113との間のリンクである。
また、ゲートウェイ101と、ゲートウェイ101から1ホップ目の各ノード装置111〜113との間のリンクでは、負荷の高さが直接的に輻輳を引き起こすおそれがあるだけでなく、隠れ端末問題に起因する輻輳が起こるおそれもある。
例えば、ノード装置111は、ノード装置113から送信される電波を受信することができない位置にある。そのため、ノード装置111は、ノード装置113がゲートウェイ101宛にデータを送信しているときに、ノード装置113とゲートウェイ101が通信中であると認識することができない。
したがって、ノード装置113がゲートウェイ101宛にデータを送信している最中に、ノード装置111がゲートウェイ101宛のデータの送信を始めてしまうことがあり得る。その結果、ゲートウェイ101においてコリジョンが生じることがあり得る。そして、コリジョンの結果として、データの再送が行われ、ゲートウェイ101とノード装置111の間のリンクの負荷、およびゲートウェイ101とノード装置113の間のリンクの負荷が、一層高まることがあり得る。
他方で、例えばゲートウェイ101から4ホップ目のノード装置141と、ゲートウェイ101から3ホップ目のノード装置138の間のリンクの負荷は低い。そのため、当該リンクでは輻輳が起きにくい。
本実施形態は、以上のような輻輳の起きやすさの違いに着目することで、通信が集中する範囲では複数の無線周波数チャネルに負荷を分散して輻輳を解消するとともに、上記範囲外では余計な無線周波数チャネルの消費を避けることを目的とする。なお、以下では「無線周波数チャネル」を単に「チャネル」という。
詳しくは後述するが、本実施形態では、通信システム100内の各装置は、通常は、デフォルトチャネルとして予め決められた同じ1つのチャネルを用いて通信を行う。したがって、通信システム100は、限られた資源であるチャネルを必要以上に使うことがなく、他の無線通信システムへの外乱となりにくい。
しかし、上記のとおり通信システム100内では、輻輳の起きやすさが均一ではない。具体的には、ゲートウェイ101からのホップ数が1の範囲で特に輻輳が起こりやすい。
そこで、詳しくは後述するが、本実施形態では、ゲートウェイ101は、輻輳が生じたか否かを監視する。そして、ゲートウェイ101は、輻輳を検出すると、1ホップの範囲内にあるノード装置111〜113に対して、ゲートウェイ101へのデータの送信に使うチャネルを、デフォルトチャネルから別のチャネルに切り換えるよう命令する。
そして、ノード装置111〜113が命令にしたがってチャネルを切り換えることで、複数のチャネルに通信負荷が分散される。負荷分散の結果、輻輳は緩和または解消される。
なお、図1の例では、ゲートウェイ101から2ホップ目のノード装置126は、通信可能エリア102にあるので、ゲートウェイ101から送信される命令を受信することが可能である。しかし、ノード装置126は、「ノード装置126自身は、ゲートウェイ101から1ホップの範囲内ではない」と判断し、チャネルの切り換えを行わない。また、例えばノード装置123など、そもそも通信可能エリア102の外に位置するノード装置は、チャネルの切り換えを行わない。
よって、ゲートウェイ101以外のすべてのノード装置111〜143は、デフォルトチャネルでの通信を受信する受信機さえ備えていればよく、複数のチャネルからの受信のための複数の受信機を備える必要がない。そのため、本実施形態によれば、ゲートウェイ101以外のノード装置111〜143は、安価に製造することができる。
そして、通信システム100内では、ゲートウェイ101よりも、ゲートウェイ101以外のノード装置111〜143の方が、圧倒的に数が多い。よって、ゲートウェイ101以外のノード装置111〜143の製造コストの削減は、通信システム100全体の初期コストの削減に大いに貢献する。
また、ゲートウェイ101は、輻輳の解消を検出したら、1ホップ目のノード装置111〜113に対して、ゲートウェイ101への送信チャネルをデフォルトチャネルに戻すよう命令することが好ましい。なぜなら、輻輳が生じていない状況下では、有限のリソースであるチャネルの使用を抑制し、図1には不図示の外部の無線システムに与える外乱を抑制することが好ましいからである。
なお、図1に例示するように、ゲートウェイ101の近傍に干渉源201が存在することもあり得る。干渉源201は、例えば他の無線通信システムの端末機かもしれないし、電子レンジなどの装置かもしれない。
そして、例えば、干渉源201からの干渉の影響を受ける干渉エリア202に、ゲートウェイ101、ノード装置112、およびノード装置113が含まれることもあり得る。例えばこのような干渉源201の存在を検知した場合、ゲートウェイ101は、ノード装置111〜113へのチャネル切り換えの命令を発するに際して、干渉源201からの電波の周波数を避けるようにノード装置111〜113に通知することもできる。
さて、図2は、ゲートウェイ101の構成図である。また、図2はゲートウェイ101と他の装置との接続も示している。
図2に示すように、ゲートウェイ101は、図1に示した通信システム100のネットワークとは独立したネットワーク211にも接続されている。ネットワーク211は、例えば、有線LAN(Local Area Network)、無線LAN、WAN(Wide Area Network)、インターネット、またはそれらの組み合わせである。
ゲートウェイ101は、ネットワーク211を介してNTP(Network Time Protocol)サーバ212およびデータサーバ213と接続されている。なお、実施形態によっては、ゲートウェイ101は、NTPサーバ212を兼ねることもでき、データサーバ213を兼ねることもできる。
ゲートウェイ101は、NTPサーバ212と通信することで、時刻同期処理を行う。また、ゲートウェイ101は、通信システム100内のノード装置111〜143から収集したデータを、データサーバ213に送信する。データサーバ213はゲートウェイ101から受信したデータを蓄積し、蓄積したデータを用いて、実施形態に応じた適宜の処理を行う。
また、ゲートウェイ101は、通信システム100内のノード装置との通信のためのハードウェアとして、アンテナ301、スイッチ302、送信機303、分配機304、および異なる複数のチャネルに対応する複数の受信機305A〜305Dを有する。ゲートウェイ101はさらに、各種処理を実行するCPU(Central Processing Unit)306と、各種情報を記憶するメモリ307と、ネットワーク211を介した通信のためのネットワークI/F(interface)308を有する。
本実施形態のゲートウェイ101は、時分割複信(Time Division Duplex;TDD)方式により、送信と受信を時間に応じて切り換える。具体的には、アンテナ301は送信と受信の双方に使われる。また、スイッチ302は送信と受信を切り換える装置である。すなわち、スイッチ302は、時間に応じて、ゲートウェイ101が送信を行うことができるように送信機303とアンテナ301を接続するか、または、ゲートウェイ101が受信を行うことができるように分配機304とアンテナ301を接続する。
以下では説明の便宜上、通信システム100において使われる4つのチャネルをチャネルChA〜ChDとし、チャネルChAがデフォルトチャネルであるとする。
送信機303は、チャネルChAによる送信を行うための装置であり、変調器やD/A(Digital-to-Analog)変換器などを含む。また、分配機304は、アンテナ301で受信された信号をチャネルごとに分離する装置である。
受信機305Aは、分配機304で分離されたチャネルChAの信号を受信する装置であり、復調器やA/D(Analog-to-Digital)変換器などを含む。同様に、受信機305Bは、分配機304で分離されたチャネルChBの信号を受信する装置であり、復調器やA/D変換器などを含む。
また、受信機305Cは、分配機304で分離されたチャネルChCの信号を受信する装置であり、復調器やA/D変換器などを含む。そして、受信機305Dは、分配機304で分離されたチャネルChDの信号を受信する装置であり、復調器やA/D変換器などを含む。
ゲートウェイ101は、上記のように分配機304と受信機305A〜305Dを備えているので、4つのチャネルChA〜ChDの信号を同時に受信することが可能である。また、本実施形態では上記のようにゲートウェイ101が4つの受信機305A〜305Dを有するが、ゲートウェイ101が有する受信機の数は、実施形態に応じて任意である。
メモリ307は、ワークエリアとして使われるRAM(Random Access Memory)と、不揮発性記憶装置を含む。不揮発性記憶装置としては、例えば、ROM(Read Only Memory)またはフラッシュメモリなどが利用可能である。また、不揮発性記憶装置としては、コンピュータ読み取り可能な記憶媒体と、記憶媒体の駆動装置との組み合わせも利用可能である。記憶媒体の例は、半導体メモリカード、ハードディスクなどの磁気ディスク、CD(Compact Disc)やDVD(Digital Versatile Disk)などの光ディスク、および光磁気ディスクである。
メモリ307は、CPU306が実行するプログラム311を格納する。具体的には、プログラム311は、不揮発性記憶装置に格納される。プログラム311は、不揮発性記憶装置にプレインストールされていてもよいし、ネットワーク211から不揮発性記憶装置にダウンロードされてもよい。そして、プログラム311は、CPU306によって不揮発性記憶装置から読み出され、RAM上にロードされ、実行される。
また、プログラム311は、例えば、CPU306がゲートウェイ101を制御するためのファームウェアプログラムである。CPU306は、プログラム311を実行することで、図2に示した後述の各部として動作する。
また、メモリ307の一部(例えばRAMの一部)は、受信バッファ領域312として利用される。すなわち、受信機305A〜305Dは、それぞれ受信したフレームを受信バッファ領域312に出力する。なおここで「フレーム」とは、本実施形態で使われるPDU(Protocol Data Unit)のことである。
本実施形態では、情報が、あるプロトコルのPDUの形式で通信システム100内で送受信される。上記の「あるプロトコル」は、実施形態に応じて任意に定義されてよい。フレームの形式の具体例は図8〜9とともに後述する。
また、本実施形態のフレームが定義されるレイヤよりも下位のレイヤのプロトコルとしては、公知のプロトコルが利用可能である。例えば、物理層とMAC(Media Access Control)副層のプロトコルとして、IEEE(Institute of Electrical and Electronics Engineers)802.11シリーズまたは802.15シリーズのプロトコルが利用されてもよい。
メモリ307は、さらに、図5に例示されるシステムパラメタ313、図4に例示される登録ノード情報314、および図5に例示される輻輳情報315を格納する。システムパラメタ313は、メモリ307内の不揮発性記憶装置に格納され、必要に応じてRAM上にコピーされる。登録ノード情報314と輻輳情報315は、RAM上に格納されるのが好ましい。
システムパラメタ313は、通信システム100の動作を規定する定数などを含む。登録ノード情報314は、ゲートウェイ101にデータを送信する通信システム100内のノード装置に関する情報である。輻輳情報315は、ゲートウェイ101から1ホップの範囲内での輻輳をゲートウェイ101が検出したか否かを示す情報である。
詳しくは後述するが、ゲートウェイ101が輻輳を検出しない限り、ノード装置111〜113がデフォルトチャネルChA以外のチャネルを用いてフレームを送信することはない。よって、CPU306は、輻輳情報315を参照し、輻輳が検出されていないことを輻輳情報315が示す場合には受信機305B〜305Dへの電力供給を止めてもよい。それにより、ゲートウェイ101の省電力化が実現される。
さて、CPU306は、プログラム311を実行することにより、受信処理部321として動作する。図2に示すように、受信処理部321は、タイプ判断部322とRSSI(Received Signal Strength Indicator)計算部323とFCS(Frame Check Sequence)チェック部324と受信時刻取得部325を含む。
また、CPU306は、プログラム311を実行することにより、データ処理部326、登録処理部327、輻輳判断部328、命令発行部329、同期処理部330、およびハローフレーム生成部332としても動作する。さらに、CPU306は、時刻を表すタイマ331も、ハードウェア回路として含んでいる。
具体的には、受信機305A〜305Dは、フレームを受信すると、受信したフレームを受信バッファ領域312に出力するとともに、フレームの受信を受信処理部321に通知する。受信処理部321は、通知を契機として各種の処理を行う。なお、受信機305A〜305Dから受信処理部321への通知は、受信バッファ領域312内のフレームの先頭アドレスを含むので、受信処理部321は必要に応じてフレーム内の適宜のフィールドの値を受信バッファ領域312から読み出すことができる。
すなわち、タイプ判断部322は、受信されたフレームのタイプを受信バッファ領域312から読み出す。そして、タイプ判断部322は、タイプに応じた処理を行うよう、RSSI計算部323、FCSチェック部324、受信時刻取得部325、データ処理部326および登録処理部327に要求する。本実施形態で使われるタイプの例は、図8〜9とともに後述する。
また、RSSI計算部323は、タイプ判断部322からの要求を受けると、RSSIを計算し、計算したRSSIを輻輳判断部328に出力する。RSSI計算部323は、例えば、受信電力を示すパラメタを受信機305A〜305Dから受け取ってRSSIを計算することができる。RSSIの具体的な計算方法は実施形態に応じて任意であり、RSSI計算部323はRSSIの公知の計算方法を利用することもできる。
FCSチェック部324は、タイプ判断部322からの要求を受けると、受信バッファ領域312からフレームを読み出して、FCSの計算に用いられる各フィールドのビット列からFCSを計算する。そして、FCSチェック部324は、読み出したフレームに含まれるFCSフィールドの値と、計算したFCSの値を比較し、2つの値が一致するか否かを判断する。
2つの値が一致する場合、受信されたフレームは、エラーを含まないものと見なされる。逆に、2つの値が一致しない場合、受信されたフレームは、ビット反転などのエラーを含む。そこで、FCSチェック部324は、2つの値が一致するか否かの判断結果を、データ処理部326に出力する。また、FCSチェック部324は、最近受信された複数のフレームにおける誤り率を計算し、計算した誤り率を輻輳判断部328に出力する。
受信時刻取得部325は、タイプ判断部322からの要求を受けると、タイマ331を参照して現在時刻を取得する。取得された現在時刻は、本実施形態では近似的にフレームの受信時刻と見なされる。そして、受信時刻取得部325は、取得した受信時刻を、データ処理部326と登録処理部327と輻輳判断部328に出力する。
データ処理部326は、タイプ判断部322からの要求を受けると、受信されたフレームに含まれるデータを処理する。
例えば、データ処理部326は、FCSチェック部324から出力された判断結果から「エラーを含まない」と確認されたフレームを、受信バッファ領域312から読み出してもよい。そして、データ処理部326は、読み出したフレームのデータを、必要に応じて加工して、ネットワークI/F308とネットワーク211を介してデータサーバ213に送信してもよい。上記の加工の例は、受信時刻取得部325から出力された受信時刻の追加、フォーマット変換、圧縮、暗号化などである。
また、FCSチェック部324から出力された判断結果が、「受信されたフレームはエラーを含む」と示す場合は、データ処理部326は、受信されたフレームを受信バッファ領域312から削除してもよい。また、受信されたフレームがエラーを含む場合、実施形態によっては、データ処理部326は、フレームの再送を要求するための制御フレームを生成し、送信機303を介して制御フレームを送信してもよい。
また、登録処理部327は、タイプ判断部322からの要求を受けると、受信されたフレームのGSを示す値を受信バッファ領域312から読み出す。そして、登録処理部327は、GSを示す値と、受信時刻取得部325から出力された受信時刻とを対応づけて登録ノード情報314に記録する。
また、輻輳判断部328は、RSSI計算部323、FCSチェック部324、および受信時刻取得部325それぞれからの出力と、システムパラメタ313とから、ゲートウェイ101からのホップ数が1の範囲内で輻輳が生じているか否かを判断する。輻輳判断部328による判断の詳細は、後述の図10〜12のフローチャートとともに説明する。輻輳判断部328は、判断結果を輻輳情報315に上書きする。
また、輻輳判断部328は、輻輳を検出した場合は、輻輳の検出を命令発行部329に通知する。すると、命令発行部329は、ゲートウェイ101から1ホップの範囲内にあるノード装置(図1の例ではノード装置111〜113)に対して、ゲートウェイ101への送信チャネルを切り換えるように命令するための切り換え命令情報を生成する。切り換え命令情報も、具体的にはフレームの形にフォーマットされる。なお、切り換え命令情報の生成にあたり、命令発行部329は、システムパラメタ313を参照してもよい。
命令発行部329は、切り換え命令情報のフレームを、送信機303に出力する。すると、切り換え命令情報のフレームは送信機303からスイッチ302とアンテナ301を介して送信され、通信可能エリア102内の各ノード装置111〜113、126に受信される。
また、詳しくは後述するが、本実施形態では、輻輳判断部328が時刻に基づく判断を行う。そのため、本実施形態では、通信システム100内の各装置の時刻を同期させるための処理が行われる。
具体的には、同期処理部330は、システムパラメタ313に定められたスケジュールと、タイマ331が示す現在時刻にしたがって、ネットワークI/F308とネットワーク211を介してNTPサーバ212にアクセスする。そして、同期処理部330は、タイマ331が示す時刻をNTPにしたがって修正する。
また、同期処理部330は、タイマ331の修正後、通信システム100内での同期のためのフレーム(以下、「同期フレーム」という)を生成し、送信機303に出力する。すると、同期フレームは送信機303からスイッチ302とアンテナ301を介して送信される。後述のように、通信システム100内での同期は、同期フレームを用いて実現される。なお、同期フレームには、修正後のタイマ331が示す時刻に基づく時刻情報が含まれる。
また、フレームのタイプについて詳しくは後述するが、本実施形態では、「ハローフレーム」と呼ばれるタイプの一種の制御フレームが使われる。本実施形態でハローフレームが果たす機能の1つは、通信システム100内で互いに1ホップで直接通信しあうことの可能な装置(すなわち隣接する装置)の認識を可能にすることである。また、ハローフレームが果たす別の機能は、ゲートウェイ101からのホップ数の認識を可能にすることである。
ハローフレーム生成部332は、システムパラメタ313に定められたスケジュールと、タイマ331が示す現在時刻にしたがって、ハローフレームを生成し、送信機303に出力する。すると、送信機303は、スイッチ302とアンテナ301を介してハローフレームを送信する。
なお、受信処理部321、データ処理部326、登録処理部327、輻輳判断部328、命令発行部329、同期処理部330およびハローフレーム生成部332の一部または全部は、CPU306の代わりにハードウェア回路により実現されてもよい。ハードウェア回路としては、例えば、ASIC(Application Specific Integrated Circuit)が使われてもよいし、FPGA(Field Programmable Gate Array)などのリコンフィギュラブル回路が使われてもよい。
また、ゲートウェイ101は、不図示のRTC(Real Time Clock)を含んでいてもよい。RTCの示す時刻は、例えばゲートウェイ101の電源が切られるときに、タイマ331が示す時刻に基づいて、同期処理部330により修正されてもよい。
さて、図3は、図1の通信システム100に含まれる各ノード装置の構成図である。本実施形態では、図1のノード装置111〜143の各々は、図3のノード装置400と同様に構成されている。
図3に示すように、ノード装置400は、アンテナ401、スイッチ402、送信機403、受信機404、CPU405、およびメモリ406を有する。
本実施形態のノード装置400は、TDD方式により、送信と受信を時間に応じて切り換える。具体的には、アンテナ401は送信と受信の双方に使われる。また、スイッチ402は、時間に応じて、ノード装置400が送信を行うことができるように送信機403とアンテナ401を接続するか、または、ノード装置400が受信を行うことができるように受信機404とアンテナ401を接続する。
送信機403は、指定された送信チャネルによる送信を行うための装置であり、変調器やD/A変換器などを含む。送信チャネルとして指定可能なチャネルは、本実施形態では、上述のチャネルChA〜ChDである。送信チャネルの指定は、後述のチャネル指定部425により行われる。つまり、送信機403は、ファームウェアによるチャネル変更が可能な送信機である。
また、受信機404は、デフォルトチャネルChAの信号を受信する装置であり、復調器やA/D変換器などを含む。
メモリ406は、ワークエリアとして使われるRAMと、不揮発性記憶装置を含む。不揮発性記憶装置としては、例えば、ROMまたはフラッシュメモリなどが利用可能である。また、不揮発性記憶装置としては、コンピュータ読み取り可能な記憶媒体と、記憶媒体の駆動装置との組み合わせも利用可能である。記憶媒体の例は、半導体メモリカード、ハードディスクなどの磁気ディスク、CDやDVDなどの光ディスク、および光磁気ディスクである。
メモリ406の一部(例えばRAMの一部)は、送受信バッファ領域411として利用される。すなわち、受信機404は、受信したフレームを送受信バッファ領域411に出力する。また、CPU405により実現される後述の各部は、送信対象のフレームを生成し、生成したフレームを送受信バッファ領域411に出力する。そして、送信機403が送受信バッファ領域411からフレームを読み出し、スイッチ402とアンテナ401を介してフレームを送信する。
さらに、メモリ406は、送信モード情報412、ホップ数情報413を含む経路情報414、スケジュール情報415、個体情報416、およびリンク情報417を格納する。なお、スケジュール情報415と個体情報416は、メモリ406内の不揮発性記憶装置に格納され、必要に応じてRAM上にコピーされる。また、送信モード情報412、経路情報414、およびリンク情報417は、RAM上に格納されるのが好ましい。メモリ406が格納する各種情報の具体例は図7とともに後述するが、情報の概要を説明すれば下記のとおりである。
送信モード情報412は、ノード装置400の「送信モード」を示す。本実施形態では、送信モードは、送信チャネルをデフォルトチャネルChAに固定する「通常モード」か、送信チャネルをゲートウェイ101へのフレームの送信のたびに選びなおす「輻輳モード」のいずれかである。
なお、「輻輳モード」の場合であっても、ゲートウェイ101以外の他のノード装置へのフレームの送信では、デフォルトチャネルChAが使われる。また、「輻輳モード」の場合であっても、マルチホップ送信の対象ではない各種制御フレームの送信では、デフォルトチャネルChAが使われる。
ホップ数情報413は、ゲートウェイ101とノード装置400の間のホップ数が1であるか否かを、ノード装置400が認識するための情報である。実施形態に応じて、ホップ数情報413は、ホップ数を示す数値そのものであってもよいし、ホップ数が1であるか否かを直接的または間接的に示す情報であってもよい。
経路情報414は、ノード装置400からゲートウェイ101への経路の少なくとも一部を管理するための情報である。なお、「経路の少なくとも一部」とは、具体的には、ノード装置400からゲートウェイ101への経路のうち、ノード装置400から、ノード装置400に隣接する隣接ノード装置までのリンクである。
例えば、ノード装置400が図1のノード装置112の場合、GDであるゲートウェイ101自体もノード装置112に隣接する。よって、経路情報414が表す上記の「経路の少なくとも一部」は、例えば、ノード装置112から、ノード装置112に隣接するゲートウェイ101へのリンクである。
そして、当該リンクを含む経路上での、ゲートウェイ101とノード装置112の間のホップ数は1なので、経路情報414に含まれるホップ数情報413は、「ホップ数が1である」旨を示す。このように、ゲートウェイ101までのホップ数が1の場合、GDとLDは一致する。
また、ノード装置400が図1のノード装置123の場合、経路情報414が表す上記の「経路の少なくとも一部」は、例えば、ノード装置123から、ノード装置123に隣接するノード装置112へのリンクである。そして、当該リンクを含む経路上での、ゲートウェイ101とノード装置123の間のホップ数は2なので、経路情報414に含まれるホップ数情報413は、「ホップ数が1ではない」旨を示す。
スケジュール情報415は、ノード装置400が各タイプのフレームを送信するスケジュールを示す。また、個体情報416は、ノード装置400に固有の、ノード装置400を識別する情報である。
リンク情報417は、通信システム100内においてノード装置400に隣接する他の装置の識別情報を含む。例えば、ノード装置400が図1のノード装置123の場合、ノード装置123にはノード装置111、112、122、133および134が隣接している。よって、ノード装置123のメモリ406には、ノード装置111、112、122、133および134の識別情報を含むリンク情報417が格納される。
さて、メモリ406は、上記の各種情報のほかに、さらに、CPU405が実行するプログラム418を格納する。具体的には、プログラム418は、不揮発性記憶装置に格納される。プログラム418は、不揮発性記憶装置にプレインストールされていてもよいし、通信システム100のネットワークを介して不揮発性記憶装置にダウンロードされてもよい。そして、プログラム418は、CPU405によって不揮発性記憶装置から読み出され、RAM上にロードされ、実行される。
また、プログラム418は、例えば、CPU405がノード装置400を制御するためのファームウェアプログラムである。CPU405は、プログラム418を実行することで、以下に説明するように図3の各部として動作する。
すなわち、CPU405は、プログラム418を実行することにより、タイプ判断部421、干渉検出部422およびチャネル切り換え部423として動作する。チャネル切り換え部423は、モード変更部424とチャネル指定部425を含む。
また、CPU405は、プログラム418を実行することにより同期処理部426としても動作する。そして、CPU405は、同期処理部426が時刻の修正を行う対象のタイマ427も、ハードウェア回路として含んでいる。
さらに、CPU405は、プログラム418を実行することにより、ホップ数認識部428、ハローフレーム生成部429、転送処理部430、データ処理部431、登録要求部432、およびリンク管理部433としても動作する。
具体的には、受信機404は、フレームを受信すると、受信したフレームを送受信バッファ領域411に出力し、フレームの受信をタイプ判断部421に通知する。また、受信機404からタイプ判断部421への通知は、送受信バッファ領域411内のフレームの先頭アドレスを含む。よって、タイプ判断部421およびタイプ判断部421からの要求を受ける後述の各部は、必要に応じてフレーム内の適宜のフィールドの値を送受信バッファ領域411から読み出すことができる。
すなわち、タイプ判断部421は、受信されたフレームのタイプを送受信バッファ領域411から読み出す。そして、タイプ判断部421は、タイプに応じて、モード変更部424、同期処理部426、ホップ数認識部428、転送処理部430またはリンク管理部433に、タイプに応じた処理を行うよう要求する。なお、タイプ判断部421は、要求とあわせて、受信されたフレームの送受信バッファ領域411内での先頭アドレスも、モード変更部424、同期処理部426、ホップ数認識部428、転送処理部430またはリンク管理部433に通知する。
ところで、上記のとおりノード装置400の受信機404は、デフォルトチャネルChAを介したフレームの受信さえできればよく、他のチャネルChB〜ChDを介して送信されるフレームを受信する必要はない。しかし、受信機404が、チャネルChB〜ChDの受信電力を検出する機能をさらに備えていてもよい。なお、受信電力の検出だけならば、フレームを受信するよりも簡素な回路で実現することができる。
図3の干渉検出部422はなくてもよい。しかし、受信機404が、チャネルChB〜ChDの受信電力を検出する機能を有する場合、ノード装置400は、図3に示すように干渉検出部422を備えていてもよい。
干渉検出部422は、デフォルトチャネル以外のチャネルChB〜ChDそれぞれの受信電力を表すパラメタを受信機404から受け取り、チャネルChB〜ChDにおける干渉の強さを検出する。そして、干渉検出部422は、検出結果をチャネル指定部425に出力する。
チャネル切り換え部423は、送信チャネルを決定し、決定した送信チャネルを送信機403に指定する。本実施形態では、送信モード情報412の示す送信モードが通常モードの場合、送信チャネルは常にデフォルトチャネルChAである。また、送信モードが輻輳モードの場合、送信チャネルはフレームの送信のたびに決定される。
そして、送信モードは、ノード装置400とゲートウェイ101との間のホップ数が1であり、かつ、送信チャネルを切り換えるようにゲートウェイ101がノード装置400に命令した場合に限り輻輳モードとなる。それ以外の場合、送信モードは通常モードである。また、ゲートウェイ101がノード装置400に対して、送信チャネルをデフォルトチャネルに戻すよう命令した場合も、送信モードは通常モードとなる。
具体的には、受信機404が受信したフレームのタイプが送信チャネルの切り換え命令の場合、タイプ判断部421は、モード変更部424に、切り換え命令の受信に応じた処理を行うよう要求する。すると、モード変更部424は、ホップ数認識部428を介してノード装置400とゲートウェイ101との間のホップ数を認識する。そして、モード変更部424は、ホップ数が1であれば送信モードを輻輳モードに変更し、ホップ数が1でなければ送信モードを通常モードのままとする。
また、受信機404が受信したフレームのタイプが、送信チャネルをデフォルトチャネルに戻すように命令する復帰命令の場合、タイプ判断部421は、モード変更部424に、復帰命令の受信に応じた処理を行うよう要求する。すると、モード変更部424は、送信モードを通常モードに設定する。
以上のようにしてモード変更部424は送信モードを決定し、決定した送信モードを送信モード情報412としてメモリ406上に記録する。
また、チャネル指定部425は、送信モード情報412を参照する。そして、送信モードが通常モードであれば、チャネル指定部425は、送信機403に対して、送信チャネルとしてデフォルトチャネルChAを指定する。
逆に、送信モードが輻輳モードの場合、チャネル指定部425は、デフォルトチャネルChAを送信チャネルとして選ぶべきか、それとも他のチャネルChB〜ChDの中から送信チャネルを選ぶべきかを判断する。この判断は、ホップ数認識部428を介して「送信対象のフレームのLDがゲートウェイ101である」という条件が成立するか否かを認識することにより、行われる。上記条件は、ノード装置400とゲートウェイ101の間のホップ数が1であることを含意する。
そして、上記条件が成立する場合に、チャネル指定部425は、チャネルChB〜ChDの中から送信チャネルをランダムに選択し、選択した送信チャネルを送信機403に指定する。逆に、上記条件が成立しなければ、チャネル指定部425は、デフォルトチャネルChAを送信チャネルとして指定する。
また、受信機404が受信したフレームが同期フレームである場合、タイプ判断部421は、同期処理を行うよう同期処理部426に要求する。すると、同期処理部426は、送受信バッファ領域411からフレームを読み出し、フレームに含まれる時刻情報にしたがって、タイマ427が示す時刻を修正する。さらに、同期処理部426は、修正後のタイマ427が示す時刻に基づく時刻情報を含む同期フレームを生成し、同期フレームを送信機403に出力する。
すると、送信機403は、同期処理部426から出力された同期フレームを、スイッチ402とアンテナ401を介して送信する。なお、送信機403は、同期処理部426から出力された同期フレームを送信する場合は、常にデフォルトチャネルChAを用いる。
また、ホップ数認識部428は、受信機404が受信したフレームがハローフレームだった場合に、タイプ判断部421からの要求に応じて、ノード装置400とゲートウェイ101の間のホップ数を認識する。つまり、ホップ数認識部428は、タイプ判断部421からの要求を受けて、送受信バッファ領域411に格納されたハローフレームを読み出してホップ数を認識し、認識したホップ数をホップ数情報413に記録する。
また、ホップ数認識部428は、送受信バッファ領域411に格納されているフレームのヘッダを参照することで、ノード装置400とゲートウェイ101の間のホップ数が1か否かを認識することもできる。ホップ数認識部428は、ヘッダから認識した結果を、モード変更部424とチャネル指定部425に通知することもできる。
また、ゲートウェイ101と同様にノード装置400も、適宜のスケジュールにしたがってハローフレームを送信する。具体的には、ハローフレーム生成部429は、スケジュール情報415に定められたスケジュールと、タイマ427が示す現在時刻にしたがって、ハローフレームを生成し、送信機403に出力する。すると、送信機403は、スイッチ402とアンテナ401を介してハローフレームを送信する。なお、送信機403は、ハローフレームを送信する場合は、常にデフォルトチャネルChAを用いる。
転送処理部430は、特定のタイプのフレームに関して、フレームの直接の宛先(つまりLD)を決定する。つまり、転送処理部430は、通信システム100においてノード装置400に隣接する装置の中から、LDを選択する。
なお、転送処理部430は、LDの選択にあたり、送受信バッファ領域411に格納されているフレームの、最終的な宛先(つまりGD)を示すフィールドの値を参照し、経路情報414を参照する。そして、転送処理部430は、選択したLDを、送受信バッファ領域411内のフレームの所定のフィールドに記録する。
例えば、ノード装置400が図1のノード装置124であるとする。この場合、ノード装置124がノード装置135から受信した特定のタイプのフレームに関して、ノード装置124の転送処理部430は、LDとしてノード装置112を選択する。また、ノード装置124自身が生成した特定のタイプのフレームに関しても、ノード装置124の転送処理部430は、LDとしてノード装置112を選択する。
また、上記「特定のタイプのフレーム」とは、具体的には、通信システム100の中でマルチホップ転送の対象となるタイプのフレームであり、具体的には「データフレーム」と「登録要求フレーム」を含む。データフレームと登録要求フレームの詳細は図9を参照して後述するが、概要を説明すると次のとおりである。
データフレームは、ゲートウェイ101が収集する対象のデータ(例えば図1に関して例示したような、センサが感知したデータなど)を含むフレームである。また、登録要求フレームは、ゲートウェイ101がデータの収集を行うノード装置の1つとしてノード装置400を登録ノード情報314に登録するよう、ノード装置400がゲートウェイ101に要求するためのフレームである。
本実施形態の転送処理部430は、受信機404がデータフレームまたは登録要求フレームを受信して送受信バッファ領域411に出力した場合は、タイプ判断部421からの要求を受けて、LDを選択する。また、転送処理部430は、データ処理部431がデータフレームを生成して送受信バッファ領域411に出力した場合は、データ処理部431からの要求を受けて、LDを選択する。さらに、転送処理部430は、登録要求部432が登録要求フレームを生成して送受信バッファ領域411に出力した場合は、登録要求部432からの要求を受けて、LDを選択する。
そして、転送処理部430は、上記のとおり、選択したLDを、送受信バッファ領域411内のフレームの所定のフィールドに記録する。さらに、転送処理部430は、チャネル指定部425に対して、チャネルの指定を行うよう要求する。転送処理部430は、チャネル指定部425を介して、または直接的に、送信機403に対して、送信対象のフレームの送受信バッファ領域411における先頭アドレスを通知する。
すると、転送処理部430からの要求を契機として、チャネル指定部425は上述のようにデフォルトチャネルChAまたは他のチャネルChB〜ChDを適宜選択して送信機403に指定する。また、送信機403は、転送処理部430からの通知を契機として、送受信バッファ領域411から送信対象のフレームを読み出し、チャネル指定部425により指定された送信チャネルを用いて、スイッチ402とアンテナ401を介して、フレームを送信する。
また、本実施形態のデータ処理部431は、スケジュール情報415に定められたスケジュールと、タイマ427が示す現在時刻にしたがって、データフレームを生成して送受信バッファ領域411に出力する。そして、データ処理部431は、転送処理部430に対し、生成したフレームのLDを選択するよう要求する。なお、実施形態によっては、データ処理部431は、不定期にデータフレームを生成して送受信バッファ領域411に出力してもよい。
また、実施形態によっては、GDとしてゲートウェイ101以外のノード装置が指定されたデータフレームが利用されてもよい。例えば、ノード装置133が、ノード装置139をデータフレームのGDとして指定してもよい。その場合、ノード装置139のデータ処理部431は、受信したデータフレームのペイロードを適宜処理してもよい。
また、本実施形態の登録要求部432は、スケジュール情報415に定められたスケジュールと、タイマ427が示す現在時刻にしたがって、登録要求フレームを生成して送受信バッファ領域411に出力する。そして、登録要求部432は、転送処理部430に対し、生成したフレームのLDを選択するよう要求する。
ところで、受信機404が受信したフレームがハローフレームだった場合に、タイプ判断部421は、ホップ数情報413の更新をホップ数認識部428に要求するだけでなく、リンク情報417を更新するようリンク管理部433に要求する。
リンク管理部433は、タイプ判断部421からの要求に応じて、送受信バッファ領域411を参照してハローフレームの送信元を認識する。なお、詳しくは後述するが、ハローフレームはマルチホップ送信されないので、ハローフレームの送信元とはLSでもありGSでもある。
さらに、リンク管理部433は、リンク情報417がハローフレームの送信元の識別情報を含むか否かを確認する。リンク情報417がハローフレームの送信元の識別情報を含んでいなければ、リンク管理部433は、リンク情報417にハローフレームの送信元の識別情報を追加する。
なお、タイプ判断部421、干渉検出部422およびチャネル切り換え部423の一部または全部は、CPU306の代わりにハードウェア回路により実現されてもよい。同様に、同期処理部426、ホップ数認識部428、ハローフレーム生成部429、転送処理部430、データ処理部431、登録要求部432およびリンク管理部433の一部または全部も、CPU306の代わりにハードウェア回路により実現されてもよい。上記ハードウェア回路としては、例えば、ASICが使われてもよいし、FPGAなどのリコンフィギュラブル回路が使われてもよい。また、実施形態によっては、干渉検出部422は省略可能である。
また、ノード装置400は不図示のRTCを含んでいてもよい。RTCの示す時刻は、例えばノード装置400の電源が切られるときに、タイマ427が示す時刻に基づいて、同期処理部426により修正されてもよい。
さて、図4は、登録ノード情報314の例を示す図である。登録ノード情報314は、具体的には図4の登録ノードテーブル314aのような形式の情報でもよい。
登録ノードテーブル314aは、ゲートウェイ101が通信システム100内のどのノード装置400からデータを収集するのかを表す。換言すれば、どのノード装置400がゲートウェイ101にデータフレームを送信するのかということを、登録ノードテーブル314aは表す。
登録ノードテーブル314aに含まれる各エントリは、ゲートウェイ101にデータを送信するノード装置400に対応する。また、各エントリは、「ノードID(identification)」、「IP(Internet Protocol)アドレス」、「MACアドレス」、「データ受信時刻」、「登録時刻」、「1ホップ」というフィールドを含む。
ノードIDは、当該エントリに対応するノード装置400を通信システム100内で識別するための識別情報である。なお、以下では説明の便宜上、図1における参照番号の前に「ID」という文字列を付けたものをノードIDとする。例えば、ゲートウェイ101とノード装置111のノードIDは、それぞれ「ID101」と「ID111」であるとする。もちろん、ノードIDは実施形態に応じて任意である。
IPアドレスとMACアドレスは、当該エントリに対応するノード装置400のIPアドレスとMACアドレスである。なお、IPアドレスまたはMACアドレスをノードIDとして利用する実施形態も可能である。例えば、IPアドレスとMACアドレスは、データサーバ213に送信されるデータの中に、付加情報として追加されてもよい。
データ受信時刻は、当該エントリに対応するノード装置400からのデータフレームをゲートウェイ101が受信した時刻である。また、登録時刻は、当該エントリに対応するノード装置400からの登録要求フレームをゲートウェイ101が受信した時刻である。
そして、1ホップフィールドの値は、当該エントリに対応するノード装置400とゲートウェイ101との間のホップ数が1のときにTrueであり、ホップ数が2以上のときにFalseである。
例えば、図4には、図1の通信システム100のうち、ノード装置111、112、125、126、および132に対応する5個のエントリが例示されている。なお、以下では説明の便宜上、登録ノードテーブル314aにノードIDが登録されているノード装置400を「登録ノード装置」ともいう。
図4によれば、例えばノード装置111に対応するエントリでは、ノードIDはID111であり、IPアドレスは172.16.0.111であり、MACアドレスは00:00:0E:11:22:6Fである。また、ノード装置111に対応するエントリは、ゲートウェイ101がノード装置111から2010年9月29日15時0分0.723秒にデータフレームを受信したことを示す。同様に、ノード装置111に対応するエントリは、ゲートウェイ101がノード装置111から2010年9月29日9時30分6.208秒に登録要求フレームを受信したことを示す。
そして、ノード装置111、112、125、126、および132の中では、ノード装置111と112のみがゲートウェイ101からのホップ数が1である。よって、図4では、ノード装置111と112に対応する2つのエントリでは1ホップフィールドの値がTrueだが、残りの3つのエントリでは1ホップフィールドの値がFalseである。
なお、図1に示すように、ノード装置126は、物理的にはノード101から送信されたフレームを受信することが可能だが、実際のデータフレームの送信経路上でのノード101からのホップ数は2である。そのため、ノード装置126に対応するエントリにおける1ホップフィールドの値はFalseである。
図5は、システムパラメタ313と輻輳情報315の例を示す図である。図5に示すシステムパラメタ313aは、図3のシステムパラメタ313の具体例であり、以下のようなパラメタを含む。
データ収集スケジュールは、登録ノード装置がデータフレームを送信するスケジュールを示す。本実施形態では、すべての登録ノード装置が一斉にデータフレームを送信する。そのため、ゲートウェイ101は短時間に多数のデータフレームを受信することになり、ゲートウェイ101から1ホップの範囲内で輻輳が発生しやすい。
なお、図5に例示したデータ収集スケジュールは、「毎日15時丁度にすべての登録ノード装置がデータフレームを送信する」というスケジュールを示す。例えば、図4の登録ノードテーブル314aは、2010年9月29日の16時の状態であり、2010年9月29日の収集におけるデータ受信時刻を示す。
許容遅延時間は、データ収集スケジュールで決められた時刻から、ゲートウェイ101がすべての登録ノード装置から実際にそれぞれのデータフレームを受信し終わる時刻までの遅延時間として許容可能な最大の遅延時間を示す。図5の例では、許容遅延時間が5分である。つまり、図5のデータ収集スケジュールと許容遅延時間は、「15時5分丁度までにすべての登録ノード装置からのデータの収集が完了しない場合、遅延時間は許容範囲外である」ということを示している。
許容遅延時間の具体的な値は、実施形態に応じて適宜決められてよい。許容遅延時間は、例えば、通信システム100に属する登録ノード装置の数、通信システム100で使われる通信プロトコルの仕様(例えばビットレート)、などに応じて決められてもよい。あるいは、許容遅延時間は、通信システム100内での各ノード装置400が設置される物理的な位置、登録ノード装置からゲートウェイ101までのホップ数の最大値(またはホップ数の分布)、などに応じて決められてもよい。許容遅延時間は、予備実験またはシミュレーションに基づいて決められてもよい。
また、本実施形態では、受信機305A〜305Dの最低受信感度は同じ値である。よって、システムパラメタ313aの最低受信感度として、例えば−90dBmが設定される。最低受信感度は、受信機305A〜305Dの仕様に応じた値を持つ。また、受信機305A〜305Dの最低受信感度が異なる場合は、システムパラメタ313aは、受信機305A〜305Dそれぞれの最低受信感度を示す4つのパラメタを含んでもよい。
また、登録ノード装置の数(換言すれば登録ノードテーブル314aのエントリの数)が増えるにしたがって、ゲートウェイ101が受信するデータフレームの量も増大する。
他方、ゲートウェイ101の受信機305Aの受信スループットは有限である。つまり、デフォルトチャネルChAを介してゲートウェイ101が単位時間あたりに受信可能なフレームの量には限りがある。また、ゲートウェイ101自体の性能(例えばCPU306の性能、メモリ307の容量、ネットワークI/F308の実効スループットなど)も有限である。
よって、ゲートウェイ101が対処することが可能な登録ノード装置の最大数が、最大登録ノード数として設定される。最大登録ノード数は、少なくとも、デフォルトチャネルChA用の受信機305Aの受信スループットに基づいて決められることが好ましい。
なお、最大登録ノード数は、例えばゲートウェイ101の仕様から決められてもよいし、予備実験に基づいて決められてもよい。図5の例では最大登録ノード数は1000である。
また、詳しくは後述するが、輻輳判断部328は、FCSチェック部324によってエラーが検出されるフレームの割合を用いて輻輳を検出する。臨界誤り率は、輻輳の検出において、エラーが検出されるフレームの割合と比較される閾値であり、図5の例では50%である。臨界誤り率の具体的な値は、実施形態に応じて適宜決めることができる。
そして、同期スケジュールは、同期処理部330が同期処理を行うスケジュールを規定する。図5の例では、同期スケジュールは、毎時20分25.000秒と設定されている。
また、ゲートウェイ101は4つのチャネルChA〜ChDの信号を受信することができるので、受信可能チャネルとして、4つのチャネルChA〜ChDが設定されている。さらに、デフォルトチャネルとしてチャネルChAが設定されている。
また、ハローフレーム送信スケジュールは、ハローフレーム生成部332がハローフレームを送信するスケジュールを規定する。図5の例では、ハローフレーム送信スケジュールは、毎分25.000秒と設定されている。
そして、図5に示す輻輳フラグ315aは、図3の輻輳情報315の具体例であり、TrueまたはFalseの値を持つフラグである。本実施形態では、Trueという値は、輻輳判断部328が輻輳を検出したことを示し、Falseという値は、輻輳判断部328が輻輳を検出しなかったことを示す。
図6は、許容遅延時間について説明する図である。図5にはシステムパラメタ313aの1つとして許容遅延時間が5分に設定される例を示したが、システムパラメタ313aの許容遅延時間に設定される値は、図6のグラフ500における閾値T0に相当する。
グラフ500に示すように、すべての登録ノード装置からのデータの収集にかかる時間Tが長いほど、通信システム100全体としてのネットワーク負荷Lも高い。すなわち、ネットワーク負荷Lを時間Tの関数fにより表すと、L=f(T)のグラフは、近似的には、例えば直線502により表される。
ところで、一般に輻輳はネットワーク負荷Lが高いほど生じやすい。そして、ネットワーク負荷Lは、例えば、平均MAC効率(つまり、全時間に対する、無線媒体が使用されている時間の比率の、通信システム100内での平均値)により表すことができる。例えば、平均MAC効率が閾値L0を超えると、輻輳が生じやすい。
しかしながら、通信システム100全体でのネットワーク負荷Lそのものをゲートウェイ101が検出することは困難である。そこで、本実施形態では、輻輳判断部328が、時間Tの長さからネットワーク負荷Lの高さを間接的に認識し、時間Tが閾値T0を超えるか否かに応じて、輻輳が生じているか否かを検出する。具体的には、閾値T0は、L=L0を示す直線501とL=f(T)を示す直線502の交点におけるT座標の値である。上記のとおり、閾値T0は、様々な要因に基づいて決められてよい。
図7は、送信モード情報412、経路情報414、スケジュール情報415、個体情報416、およびリンク情報417の例を示す図である。
図7の送信モード情報412aは、図4の送信モード情報412の具体例であり、通常モードを表す値または輻輳モードを表す値を持つ。送信モード情報412aは、例えばフラグ変数でもよい。
また、経路情報414aは、ノード装置400がノード装置112である場合の経路情報414の例である。経路情報414aは、GDとLDと評価値とホップ数の各フィールドを含むエントリを1つ以上含む。なお、本実施形態では、評価値は0.0以上1.0以下であり、0.0が最高の評価であり、1.0が最低の評価であるとする。
具体的に、経路情報414aの1つ目のエントリは、「ID101」というGDと、「ID101」というLDと、「0.0」という評価値と、「1」というホップ数を含む。この1つ目のエントリは、次の(A1)〜(A3)を表す。
(A1)GDがゲートウェイ101であるフレームをノード装置112が送信する場合に、LDとして転送処理部430が選択可能な候補の1つは、ゲートウェイ101である。
(A2)GDがゲートウェイ101の場合の、ゲートウェイ101のLDとしての評価は、0.0という値で表される最高の評価である。
(A3)ゲートウェイ101をLDとして選択した場合に、経路情報414aを保持するノード装置112から、ゲートウェイ101というGDまでのホップ数は、1である。
また、経路情報414aの2つ目のエントリは、「ID101」というGDと、「ID111」というLDと、「0.7」という評価値と、「2」というホップ数を含む。この2つ目のエントリは、次の(B1)〜(B3)を表す。
(B1)GDがゲートウェイ101であるフレームをノード装置112が送信する場合に、LDとして転送処理部430が選択可能な候補の1つは、ノード装置111である。
(B2)GDがゲートウェイ101の場合の、ノード装置111のLDとしての評価は、0.7という値で表される。つまり、GDがゲートウェイ101の場合の、LDとしての評価は、ゲートウェイ101よりもノード装置111の方がかなり低い。
(B3)ノード装置111をLDとして選択した場合に、経路情報414aを保持するノード装置112からゲートウェイ101というGDまでのホップ数は、2である。
つまり、経路情報414aは、GDがゲートウェイ101であるフレームの送信経路が、少なくとも2つ存在することを示す。そして、経路情報414aによれば、2番目のエントリが示す送信経路(つまり、ノード装置111を経由する迂回路)は、1番目のエントリが示す送信経路より評価が低い。
したがって、転送処理部430は、より評価の高い送信経路を優先的に選択する。つまり、転送処理部430は、GDがゲートウェイ101であるフレームに関しては、より評価の高いゲートウェイ101を優先的にLDとして選択する。
なお、経路情報414aにおいては、ホップ数フィールド自体がホップ数情報413として使われる。しかし、GDフィールドとLDフィールドがホップ数情報413として使われてもよい。なぜなら、GDフィールドとLDフィールドの値が等しいことは、ゲートウェイ101までのホップ数が1であることを示し、GDフィールドとLDフィールドの値が等しくないことは、ゲートウェイ101までのホップ数が1ではないことを示すからである。
また、ノード装置123は、経路情報414aと同様の形式の経路情報414bを保持する。経路情報414bの1つ目のエントリは、次の(C1)〜(C3)を表す。
(C1)GDがゲートウェイ101であるフレームをノード装置123が送信する場合に、LDとして転送処理部430が選択可能な候補の1つは、ノード装置112である。
(C2)GDがゲートウェイ101の場合の、ノード装置112のLDとしての評価は、最高の評価である。
(C3)ノード装置112をLDとして選択した場合に、経路情報414bを保持するノード装置123からゲートウェイ101というGDまでのホップ数は、2である。
また、経路情報414bの2つ目のエントリは、次の(D1)〜(D3)を表す。
(D1)GDがゲートウェイ101であるフレームをノード装置123が送信する場合に、LDとして転送処理部430が選択可能な候補の1つは、ノード装置122である。
(D2)GDがゲートウェイ101の場合の、ノード装置122のLDとしての評価は、0.9という値で表される、最低に近い評価である。
(D3)ノード装置122をLDとして選択した場合に、経路情報414bを保持するノード装置123からゲートウェイ101というGDまでのホップ数は、3である。
なお、図7の例では、どのエントリもGDの値が「ID101」であるが、実施形態によっては、他のノード装置のノードIDをGDフィールドに持つエントリがあってもよい。
さて、スケジュール情報415aは、スケジュール情報415の具体例であり、3つのタイプのフレームそれぞれについての送信スケジュールを示す。
具体的には、スケジュール情報415aに含まれる「データ送信スケジュール」は、データ処理部431がデータフレームを生成して送信機403がデータフレームを送信するスケジュールを示す。なお、ノード装置400が保持するスケジュール情報415aにおけるデータ送信スケジュールには、ゲートウェイ101が保持するシステムパラメタ313aにおけるデータ収集スケジュールと同じスケジュールが設定される。
また、スケジュール情報415aに含まれる「ハローフレーム送信スケジュール」は、ハローフレーム生成部429がハローフレームを生成して送信機403がハローフレームを送信するスケジュールを示す。図7の例では、ハローフレーム送信スケジュールは、毎分2.000秒と設定されている。
さらに、スケジュール情報415aに含まれる「登録要求スケジュール」は、登録要求部432が登録要求フレームを生成して送信機403が登録要求フレームを送信するスケジュールを示す。図7の例では、登録要求スケジュールは、毎日10時30分25.000秒と設定されている。
さて、個体情報416aは、ノード装置400がノード装置123である場合の個体情報416の具体例である。個体情報416aには、ノード装置123のノードIDとIPアドレスとMACアドレスが含まれる。
また、リンク情報417aは、ノード装置400がノード装置123である場合のリンク情報417の具体例である。
図1において、ノード装置123は5つのノード装置111、112、122、133および134と実線または破線で結ばれている。すなわち、ノード装置123は、ノード装置111、112、122、133および134と隣接しており、上記5つの隣接ノード装置と1ホップで通信することができる。そのため、リンク情報417aには、上記5つの隣接ノード装置のノードIDが含まれる。
図8〜9は、フレームの例を示す図である。本実施形態のフレームの形式は、一般に図8のフレーム600のとおりである。フレーム600は、GD、GS、LD、LS、タイプ、ペイロード、FCSというフィールドを含む。
GD、GS、LD、およびLSの各フィールドは、フレーム600のGD、GS、LD、およびLSを、ノードIDにより示す。
例えば、フレーム600が図1のノード装置134で生成され、ノード装置134からノード装置123とノード装置112を経由してゲートウェイ101へと送信されるとする。この場合、フレーム600のGDにはゲートウェイ101のノードIDである「ID101」が設定され、フレーム600のGSにはノード装置134のIDである「ID134」が設定される。GDとGSの値は、フレーム600が通信システム100内を転送されていく間、変化しない。
他方、フレーム600がノード装置134からノード装置123に送信されるときは、LDには「ID123」が、LSには「ID134」が設定される。その後、フレーム600がノード装置123からノード装置112に送信されるときは、LDには「ID112」が、LSには「ID123」が設定される。最後に、フレーム600がノード装置112からゲートウェイ101に送信されるときには、LDには「ID101」が設定され、LSには「ID112」が設定される。
なお、本明細書では、「GDフィールド」を単に「GD」と表すこともある。また、「GDフィールドに指定された通信システム100内のノード(ゲートウェイ101またはノード装置400)自体」を単に「GD」と表すこともある。GS、LD、LSについても同様の表記の簡略化を行うことがある。
また、タイプフィールドは、フレーム600のタイプを示す。本実施形態では、タイプを示す値として4つの値(以下では説明の便宜上、「Hello」、「Sync」、「Data」、「Reg」と示す)が使われる。
ペイロードには、フレーム600のタイプに応じた適宜のデータが含まれる。また、FCSフィールドは、フレーム600中の誤りを検出するためのフィールドである。例えば、GDからペイロードまでの全フィールドからCRC(Cyclic Redundancy Check)が計算され、計算された値がFCSフィールドに設定される。
以上説明したフレーム600の具体例の1つは、タイプとして「Hello」という値が指定されたフレーム610である。以下では説明の便宜上、フレーム610を「広義のハローフレーム610」という。広義のハローフレーム610には、具体的には、図8のハローフレーム620と、図8の切り換え命令フレーム630と、図9の復帰命令フレーム640の3種類がある。
広義のハローフレーム610は、1ホップの範囲内でだけブロードキャストされ、転送はされない。したがって、広義のハローフレーム610において、GDには、ノードIDとしては無効な特殊な値(以下では説明の便宜上「Invalid」と示す)が設定される。また、GSとLSの値は等しい。そして、LDには、ブロードキャストを示す特殊な値(以下では説明の便宜上「BC」と示す)が設定される。そして、広義のハローフレーム610は、ペイロードとして制御情報を有する。例えば、「Invalid」と示した値は、具体的には全ビットが0の値でもよく、「BC」と示した値は、具体的には全ビットが1の値でもよい。
ハローフレーム620は、広義のハローフレーム610の一例である。広義のハローフレーム610における制御情報の具体例として、ハローフレーム620は、「Hello」という値が設定されたサブタイプフィールドと、基準点フィールドと、ホップ数フィールドを有する。図7までの説明における「ハローフレーム」は、タイプとサブタイプの値がともに「Hello」であるフレームのことである。
基準点フィールドには、通信システム100内のいずれかのノードのノードIDが設定される。ホップ数フィールドは、基準点フィールドが示すノードから、ハローフレーム620のGSまでのホップ数を示す。
例えば、ある時点でゲートウェイ101は、ゲートウェイ101自身のノードIDをGSとLSと基準点として設定したハローフレーム621を送信する。ゲートウェイ101からゲートウェイ101までのホップ数は0であるから、ハローフレーム621のホップ数フィールドの値は0である。
すると、通信可能エリア102に含まれるノード装置111は、ハローフレーム621を受信する。もし、ノード装置111におけるリンク情報417が、ハローフレーム621のLSである「ID101」を含まなければ、ノード装置111は、リンク情報417に「ID101」を追加する。
また、ノード装置111は、GDが「ID101」であり、かつLDがハローフレーム621のLSの「ID101」と等しいエントリを経路情報414内で検索する。もしエントリが見つからなければ、ノード装置111は、GDが「ID101」でLDが「ID101」のエントリを経路情報414に追加してもよい。あるいは、ノード装置111は、エントリを追加しなくてもよい。さらに、ノード装置111は、見つかったエントリまたは追加したエントリにおいて、ホップ数を1(すなわち、ハローフレーム621に設定されているホップ数に1を足した値)に設定する。
なお、エントリを追加する場合、ノード装置111は、評価値の初期値を適宜設定する。評価値の初期値は、例えば、最高の評価を示す0.0と最低の評価を示す1.0の平均値0.5でもよい。
その後、ノード装置111は、スケジュール情報415で決められた時刻になると、経路情報414においてGDが「ID101」のエントリのうち、最も高い評価のエントリを取得する。例えば、ノード装置111が取得したエントリのLDが「ID101」であったとすると(すなわち、ハローフレーム621の受信を契機にホップ数を1と設定したエントリを取得したとすると)、ノード装置111は、ハローフレーム622を生成し、送信する。
図8に示すように、ハローフレーム622のGSとLSには、ノード装置111自身のノードIDが設定される。また、ハローフレーム622の基準点には、取得されたエントリのGDがコピーされる。そして、ハローフレーム622のホップ数には、取得されたエントリのホップ数の値である1(すなわち、ノード装置111がハローフレーム621の受信を契機に設定した値)が設定される。
通信可能エリア102に含まれる他のノード装置112、113および126も、上記のノード装置111と同様に動作する。
つまり、もしノード装置112の経路情報414の中でGDが「ID101」のエントリのうち、最も高い評価のエントリのLDが「ID101」であれば、ノード装置112はハローフレーム623を送信する。同様に、もしノード装置113の経路情報414の中でGDが「ID101」のエントリのうち、最も高い評価のエントリのLDが「ID101」であれば、ノード装置113はハローフレーム624を送信する。そして、もしノード装置126の経路情報414の中でGDが「ID101」のエントリのうち、最も高い評価のエントリのLDが「ID101」であれば、ノード装置126はハローフレーム625を送信する。
ハローフレーム623、624、および625は、いずれも、基準点としてハローフレーム621と同じく「ID101」が設定されており、ホップ数が1(ハローフレーム621のホップ数に1を足した値)に設定されている。
また、ノード装置111が送信したハローフレーム622は、ノード装置111に隣接するゲートウェイ101で受信される。ハローフレーム622は、ハローフレーム622のLSであるノード装置111が、基準点であるゲートウェイ101から1ホップであることを示す。よって、ゲートウェイ101は、ハローフレーム622のLSであるノード装置111を、登録ノード情報314に、1ホップのノード装置として登録してもよい。
また、ハローフレーム622は、ノード装置111に隣接する他のノード装置400(具体的にはノード装置112、121、122、および123)でも受信される。そこで、ハローフレーム622を受信した各ノード装置400は、経路情報414の中でGDが「ID101」のエントリのうち、最も高い評価のエントリのLDと、ハローフレーム622のLSを比較する。もし、最も高い評価のエントリのLDとハローフレーム622のLSが同じならば、ノード装置400は、ノード装置400自身からゲートウェイ101までのホップ数を2と認識する。なお、ここで2という値は、ハローフレーム622のホップ数に1を足した値である。
そして、ハローフレーム622を受信したノード装置400は、もし上記のようにしてノード装置400自身からゲートウェイ101までのホップ数を2と認識した場合は、次にハローフレームを送信するとき、各フィールドを以下のように設定する。すなわち、ノード装置400は、GSとLSにはノード装置400自身のノードIDを設定し、基準点にはハローフレーム622と同じく「ID101」を設定し、ホップ数には上記で認識した2という値を設定する。
例えば、図1においてノード装置111と実線で結ばれているノード装置121と122は、上記のようにして、ゲートウェイ101までのホップ数を2と認識し、以後、ホップ数に2を設定したハローフレームを送信する。
他方、例えば、ノード装置112の経路情報414aでは、図7に示すように、GDが「ID101」のエントリのうち、最も高い評価のエントリのLDは、「ID101」である。そして、「ID101」は、受信されたハローフレーム622のLSとは異なる。そのため、ノード装置112は、ハローフレーム622の受信後であっても、上述のハローフレーム623を送信する。つまり、ハローフレーム622の受信後であっても、ノード装置112は、ホップ数に2と設定したハローフレームを送信するわけではない。
他のハローフレーム623〜625を受信した各ノード装置400でも、上記と類似の処理が行われる。それにより、通信システム100内の各ノード装置400(具体的にはノード装置111〜143の各々)は、ゲートウェイ101までの実際のデータフレームの送信経路での、ノード装置400自身からゲートウェイ101までのホップ数を認識する。つまり、ノード装置400は、GDがゲートウェイ101のフレームを送信するときにノード装置400自身がLDとして選択する隣接ノード装置を経由する送信経路での、ノード装置400自身からゲートウェイ101までのホップ数を認識する。
したがって、経路情報414がまだ不安定な過渡的状況においては、ノード装置126が、偶然ハローフレーム625を送信する可能性もゼロではないが、経路情報414が安定すれば、ノード装置126は、ハローフレーム626を送信するようになる。
すなわち、図1が安定後の状態を示すとすると、図1によればノード装置126は、GDがゲートウェイ101のとき、LDとしてノード装置113(つまり図1においてノード装置126と実線で結ばれたノード)を選択する。したがって、過渡的状況を脱してノード装置126における経路情報414が安定した段階では、経路情報414の中でGDが「ID101」のエントリのうち、最も高い評価のエントリのLDは「ID113」である。
よって、図1のようにノード装置126がLDとしてノード装置113を選択するようになった安定状態においては、ノード装置126は、ホップ数に2と設定したハローフレーム626を送信する。なお、ノード装置126は、ノード装置113から受信するハローフレーム624のホップ数に1を足すことで、上記の2というホップ数を認識することができる。
また、ノード装置126は通信可能エリア102の中にあるので、ゲートウェイ101はノード装置126からハローフレーム626を受信することができる。ゲートウェイ101は、受信したハローフレーム626のLSであるノード装置126を、「ゲートウェイ101からのホップ数が1ではないノード装置」として認識することができる。
さて、切り換え命令フレーム630も、広義のハローフレーム610の一例である。広義のハローフレーム610における制御情報の具体例として、切り換え命令フレーム630は、切り換え命令を含む。切り換え命令フレーム631〜634の図に示すように、切り換え命令の形式は実施形態に応じて様々であってよい。また、1つの実施形態の中で切り換え命令の複数の形式が併用されてもよい。
例えば、切り換え命令フレーム631は、切り換え命令として、切り換え命令を示す特定の値(以下では説明の便宜上「Switch」と示す)が設定されたサブタイプフィールドだけを含む。
また、切り換え命令フレーム632〜634は、いずれも、「Switch」という値が設定されたサブタイプフィールドと、長さフィールドと、長さフィールドに設定された長さの詳細フィールドを含む。
具体的には、切り換え命令フレーム632において、長さフィールドの値は「17」であり、詳細フィールドの値は「ID111,ID112,ID113」である。切り換え命令フレーム632における詳細フィールドは、ゲートウェイ101から1ホップのノード装置400のノードIDのリストを示す。
また、切り換え命令フレーム633において、長さフィールドの値は「25」であり、詳細フィールドの値は「Not ChC,ID111,ID112,ID113」である。切り換え命令フレーム633における詳細フィールドは、チャネル指定部425が指定するチャネルの候補からは除外される禁止チャネルと、ゲートウェイ101から1ホップのノード装置400のノードIDのリストを示す。つまり、切り換え命令フレーム633では、チャネルChCが禁止チャネルとして指定されている。
例えば、図1の例のようにゲートウェイ101の近傍に干渉源201がある場合、禁止チャネルを指定する禁止情報(例えば「Not ChC」と表される情報)を切り換え命令に含めることが好ましい。その理由は次のとおりである。
例えば、干渉源201からの電波の周波数帯域がチャネルChCと重なっているとする。ゲートウェイ101は、干渉源201の正確な位置や干渉エリア202の範囲を認識することはできないかもしれない。しかし、ゲートウェイ101は、RSSI計算部323の計算結果から、「チャネルChCと重なる周波数帯域の電波を発する何らかの干渉源が、ゲートウェイ101の近傍に存在する」と推測することはできる。
そして、干渉源がゲートウェイ101の近傍に存在する場合、ゲートウェイ101から1ホップで通信可能なノード装置111〜113も当該干渉源の影響を受けている蓋然性が高い。実際、図1のように、ゲートウェイ101から1ホップで通信が可能な通信可能エリア102と、干渉エリア202とが重なっているかもしれず、干渉エリア202にノード装置112と113が含まれることもあり得る。
また、ノード装置111〜113が干渉エリア202に含まるか否かによらず、干渉源201が近傍にあれば、ゲートウェイ101が干渉源201からの影響を受けることに変わりはない。よって、ゲートウェイ101が、チャネルChCで送信されるフレームの受信に失敗する蓋然性は高い。
そこで、ゲートウェイ101は、チャネルChCが干渉を受けていることを検出した場合には、チャネルChCを禁止チャネルとして指定する禁止情報を切り換え命令フレーム632に含めてもよい。すると、ゲートウェイ101は、ノード装置112や113に、チャネルChCを避けてゲートウェイ101にフレームを送信させることができる。
上記のように干渉源201からの干渉がある場合、チャネルChCを介してフレームが送信されても、ゲートウェイ101が受信に成功する見込みは低い。よって、干渉源201が存在する場合に禁止情報を利用することは、効果的なチャネルの選択を可能にし、輻輳の軽減または解消に資する。
ここで図8の説明に戻る。切り換え命令フレーム634において、長さフィールドの値は「29」であり、詳細フィールドの値は「ID111=ChB,ID112=ChC,ID113=ChD」である。すなわち、切り換え命令フレーム634における詳細フィールドはリストであり、リストの個々の要素は、ゲートウェイ101から1ホップのノード装置400のノードIDと、チャネルの指定とのペアである。
ある実施形態では、切り換え命令フレーム634の受信を契機として、ノード装置111のチャネル指定部425は、チャネルChBを送信チャネルとして選ぶ。同様に、切り換え命令フレーム634の受信を契機として、ノード装置112のチャネル指定部425は、チャネルChCを送信チャネルとして選ぶ。また、切り換え命令フレーム634の受信を契機として、ノード装置113のチャネル指定部425は、チャネルChDを送信チャネルとして選ぶ。
他の実施形態では、ノード装置111〜113各々のチャネル指定部425は、切り換え命令フレーム634の受信後は、フレームの送信のたびに送信チャネルをラウンドロビンアルゴリズムにしたがって選びなおしてもよい。そして、ノード装置111のチャネル指定部425は、切り換え命令フレーム634にしたがって、チャネルChBをラウンドロビンアルゴリズムの開始チャネルとして使用してもよい。
同様に、ノード装置112のチャネル指定部425は、チャネルChCをラウンドロビンアルゴリズムの開始チャネルとして使用してもよい。また、ノード装置113のチャネル指定部425は、チャネルChDをラウンドロビンアルゴリズムの開始チャネルとして使用してもよい。
なお、図8に示す切り換え命令フレーム631〜634は、いずれも、ゲートウェイ101から送信される切り換え命令フレーム630の例である。よって、切り換え命令フレーム631〜634のGSフィールドとLSフィールドには、「ID101」という値が設定されている。
また、以下の説明では、「本実施形態においては、切り換え命令フレーム630として、切り換え命令フレーム631のような形式が採用される」と仮定する。しかし、他の実施形態では、切り換え命令フレーム632、633、または634のような形式が採用されてもよい。
続いて、図9について説明する。図9の復帰命令フレーム640も、図8の広義のハローフレーム610の一例である。広義のハローフレーム610における制御情報の具体例として、復帰命令フレーム640は、復帰命令を含む。復帰命令は、ゲートウェイ101への送信に用いる送信チャネルを、デフォルトチャネル(本実施形態ではチャネルChA)に戻すことを、ノード装置400に命令するものである。
例えば、復帰命令フレーム641は、復帰命令として、復帰命令を示す特定の値(以下では説明の便宜上「Restore」と示す)が設定されたサブタイプフィールドだけを含む。なお、復帰命令フレーム641はゲートウェイ101から送信される復帰命令フレーム640の例であるから、GSフィールドとLSフィールドには、「ID101」という値が設定されている。
さて、図8のフレーム600のうち、タイプフィールドに「Sync」という値が指定されるフレームが、図9の同期フレーム650である。同期フレーム650は、通信システム100内のゲートウェイ101と複数のノード装置400の時刻を同期させるために使われる。
同期フレーム650は、1ホップの範囲内でだけブロードキャストされ、転送はされない。したがって、同期フレーム650において、GDには、ノードIDとしては無効な値である「Invalid」が設定される。また、GSとLSの値は等しい。そして、LDにはブロードキャストを示す特殊な値である「BC」が設定される。同期フレーム650は、ペイロードとして時刻情報を有する。
同期フレーム651は、同期フレーム650の具体例である。同期フレーム651はゲートウェイ101から送信されるので、GSとLSには「ID101」と設定されている。また、同期フレーム651は、2010年9月29日13時9分32.045秒という時刻を示す時刻情報を含む。
また、図8のフレーム600のうち、タイプフィールドに「Data」という値が指定されるフレームが、図9のデータフレーム660である。データフレーム660は、ペイロードとして、長さフィールドと、長さフィールドに設定された長さのアプリケーションデータフィールドを有する。アプリケーションデータフィールドに格納されたデータが、ゲートウェイ101により収集され、GSフィールドが示すノードIDと対応づけられてデータサーバ213に蓄積される。
例えば、図1のノード装置142に接続されたセンサが検出したデータが、アプリケーションデータとして使われるものとし、センサが検出したデータの長さが250であるとする。ノード装置142に接続されたセンサが検出したデータを含むデータフレーム660は、ノード装置142からノード装置139、126、113を経由して、ゲートウェイ101へと送信される。データフレーム661は、上記のマルチホップ送信の過程で、ノード装置139からノード装置126へ送信されるデータフレーム660の例である。
したがって、データフレーム661においては、GDフィールドにはゲートウェイ101のノードIDである「ID101」が設定されている。そして、GSフィールドには、センサからの出力に基づいてアプリケーションデータを作成したノード装置142のノードIDである「ID142」が設定されている。また、LDフィールドとLSフィールドには、それぞれ「ID139」と「ID126」が設定されている。そして、長さフィールドには「250」という値が設定されている。
また、図8のフレーム600のうち、タイプフィールドに「Reg」という値が指定されるフレームが、図9の登録要求フレーム670である。登録要求フレーム670は、個々のノード装置400がゲートウェイ101に対して、当該ノード装置400自身を「ゲートウェイ101宛にデータフレーム660を送信するノード装置400」として登録するよう要求するために使われる。
登録要求フレーム670は、データフレーム660と同様に、通信システム100内をマルチホップ転送される対象となり得る。また、登録要求フレーム670は、ペイロードとして、IPアドレスフィールドとMACアドレスフィールドを有する。IPアドレスフィールドには、GSフィールドに設定されたノードIDのノード装置400のIPアドレスが設定される。また、MACアドレスフィールドには、GSフィールドに設定されたノードIDのノード装置400のMACアドレスが設定される。
例えば、図1のノード装置137が登録要求フレーム670を生成して送信すると、登録要求フレーム670は、データフレーム660と同様の経路を経由してゲートウェイ101へ転送される。すなわち、登録要求フレーム670は、ノード装置137からノード装置125と113を経由して、ゲートウェイ101へと送信される。登録要求フレーム671は、上記のマルチホップ送信の過程で、ノード装置125からノード装置113へ送信される登録要求フレーム670の例である。
したがって、登録要求フレーム671においては、GDフィールドにはゲートウェイ101のノードIDである「ID101」が、GSフィールドにはノード装置137のノードIDである「ID137」が、それぞれ設定されている。また、LDフィールドとLSフィールドには、それぞれ「ID113」と「ID125」が設定されている。そして、IPアドレスフィールドには、ノード装置137のIPアドレスである「172.16.0.137」が設定されている。また、MACアドレスフィールドには、ノード装置137のMACアドレスである「00:00:0E:11:22:89」が設定されている。
続いて、図10〜12のフローチャートを参照して、ゲートウェイ101が行う処理について説明する。
ゲートウェイ101に電源が入れられると、まずステップS101の初期化が実行される。
具体的には、同期処理部330がネットワークI/F308とネットワーク211を介してNTPサーバ212にアクセスし、NTPにしたがってタイマ331の時刻を修正する。そして、同期処理部330は、修正後のタイマ331の時刻を含む同期フレーム650を生成し、送信機303に出力する。すると、送信機303は、スイッチ302とアンテナ301を介して同期フレーム650を送信する。
ステップS101ではさらに、ハローフレーム生成部332が図8のハローフレーム621を生成し、送信機303に出力する。すると、送信機303は、スイッチ302とアンテナ301を介してハローフレーム621を送信する。
また、システムパラメタ313aに含まれる同期スケジュールとハローフレーム送信スケジュールは、予め決められた定数であってもよいが、ステップS101で現在時刻に基づいて適宜の値に初期化されてもよい。
そして、初期化が完了すると、次のステップS102で、同期処理部330が、システムパラメタ313とタイマ331を参照して、前回の同期処理から所定時間が経過したか否かを判断する。なお、ステップS102での「所定時間」は、例えば図5のシステムパラメタ313aのように同期スケジュールが1時間に1回と決められている例では、1時間である。
そして、前回の同期処理から所定時間が経過している場合(すなわち、タイマ331が示す時刻が、同期スケジュールで決められた時刻に達している場合)、処理はステップS103に移行する。逆に、前回の同期処理からまだ所定時間が経過していない場合は、処理はステップS104に移行する。
ステップS103で同期処理部330は、ネットワークI/F308とネットワーク211を介してNTPサーバ212にアクセスし、NTPにしたがってタイマ331の時刻を修正する。そして、同期処理部330は、修正後のタイマ331の時刻にしたがって同期フレーム650を生成し、送信機303に出力する。すると、送信機303は、スイッチ302とアンテナ301を介して同期フレーム650を送信する。そして、処理はステップS104に移行する。
ステップS104でハローフレーム生成部332は、システムパラメタ313とタイマ331を参照して、前回のハローフレームの送信から所定時間が経過したか否かを判断する。なお、ステップS104での「所定時間」は、例えば図5のシステムパラメタ313aのようにハローフレーム送信スケジュールが1分に1回と決められている例では、1分である。
そして、前回のハローフレームの送信から所定時間が経過している場合(すなわち、タイマ331が示す時刻が、ハローフレーム送信スケジュールで決められた時刻に達している場合)、処理はステップS105に移行する。逆に、前回のハローフレームの送信からまだ所定時間が経過していない場合は、処理はステップS106に移行する。
ステップS105でハローフレーム生成部332は、基準点としてゲートウェイ101自身を指定し、ホップ数として0を指定したハローフレーム621を生成し、送信機303に出力する。すると、送信機303は、スイッチ302とアンテナ301を介してハローフレーム621を送信する。そして、処理はステップS106に移行する。
ステップS106で受信処理部321は、受信機305A〜305Dのいずれかから、フレームを受信したことを示す通知を受けたか否かを判断する。ゲートウェイ101が何らかのフレームを受信した場合は、受信処理部321は、受信機305A〜305Dのいずれかから、フレームを受信したことを示す通知を受けているので、受信処理部321は「受信あり」と判断し、処理はステップS107に移行する。逆に、ゲートウェイ101が何のフレームも受信していない場合、受信処理部321は「受信なし」と判断し、処理はステップS102に戻る。
ステップS107でタイプ判断部322は、フレームの受信を受信処理部321に通知した受信機(受信機305A〜305Dのいずれか)から通知された先頭アドレスに基づいて、受信バッファ領域312から、受信されたフレームのタイプを読み出す。そして、タイプ判断部322は、読み出したタイプの値が「Reg」であるか否か(すなわち受信されたフレームが登録要求フレーム670であるか否か)を判断する。
そして、タイプの値が「Reg」である場合、タイプ判断部322は、登録要求フレーム670の受信に伴う処理を行うよう登録処理部327に要求するとともに、受信時刻取得部325に受信時刻の取得を要求し、処理はステップS108に移行する。逆に、タイプの値が「Reg」以外の場合、処理はステップS110に移行する。
ステップS108で受信時刻取得部325は、タイマ331を参照して、登録要求フレーム670の受信時刻として現在時刻を取得し、取得した受信時刻を登録処理部327に出力する。
また、次のステップS109で登録処理部327は、登録要求フレーム670のGSであるノード装置400を、登録ノードテーブル314aに登録する。
例えば、ステップS106で受信が検出されたフレームが、図9の登録要求フレーム671であるとする。この場合、GSフィールドの値は、ノード装置137を示す「ID137」である。そこで、ステップS109で登録処理部327は、登録ノードテーブル314aにおいて、「ノードID」フィールドの値が「ID137」のエントリを検索する。検索の結果、エントリが見つかったら、登録処理部327はステップS109でさらに次の(E1)〜(E4)の処理を行う。なお、ステップS109では(E4)の処理が省略されてもよい。
(E1)登録処理部327は、見つかったエントリの「IPアドレス」フィールドに、受信された登録要求フレーム671のIPアドレスをコピーする。
(E2)登録処理部327は、見つかったエントリの「MACアドレス」フィールドに、受信された登録要求フレーム671のMACアドレスをコピーする。
(E3)登録処理部327は、見つかったエントリの「登録時刻」フィールドに、受信時刻取得部325から出力された受信時刻を設定する。
(E4)登録処理部327は、受信された登録要求フレーム671においてGSとLSの値が等しいか否かを判定する。そして、2つの値が等しければ、登録処理部327は、見つかったエントリの「1ホップ」フィールドにTrueという値を設定する。逆に、2つの値が異なれば、登録処理部327は、見つかったエントリの「1ホップ」フィールドにFalseという値を設定する。
また、検索の結果、登録ノードテーブル314a内にエントリが見つからなかった場合、登録処理部327はステップS109でさらに登録ノードテーブル314aに新たなエントリを作成する。そして、登録処理部327は、作成したエントリに関して、上記(E1)〜(E4)と同様の処理を行う。なお、新たなエントリが作成される場合も、上記と同様に(E4)の処理は省略可能である。
以上のようにして、ステップS109における登録が完了すると、処理はステップS102に戻る。
さて、ステップS110でタイプ判断部322は、ステップS107で読み出したタイプの値が「Hello」であるか否か(すなわち受信されたフレームが広義のハローフレーム610であるか否か)を判断する。なお、本実施形態においては、タイプの値が「Hello」の広義のハローフレーム610のうち、切り換え命令フレーム630と復帰命令フレーム640は、ゲートウェイ101自身が送信するフレームであって、ゲートウェイ101によって受信されることはない。したがって、タイプの値が「Hello」ならば、受信されたフレームはハローフレーム620であり、サブタイプの値も「Hello」である。
よって、タイプの値が「Hello」の場合、タイプ判断部322は、ハローフレーム620の受信に伴う処理を行うよう登録処理部327に要求するとともに、受信時刻取得部325に受信時刻の取得を要求し、処理はステップS111に移行する。逆に、タイプの値が「Hello」以外の場合、処理はステップS115に移行する。
ステップS111で受信時刻取得部325は、タイマ331を参照して、登録要求フレーム670の受信時刻として現在時刻を取得し、取得した受信時刻を登録処理部327に出力する。
また、次のステップS112で登録処理部327は、受信されたハローフレーム620に指定されたホップ数が1であるか、それとも2以上であるかを判断する。そして、ホップ数が1のとき処理はステップS113に移行し、ホップ数が2以上のとき処理はステップS114に移行する。
なお、説明の簡略化のため、図10〜12の説明においては、ハローフレーム620に基準点として設定されるのはゲートウェイ101のノードIDである「ID101」のみであると仮定する。
もちろん、実施形態によっては、ゲートウェイ101以外のノード装置400のノードIDが、ハローフレーム620に基準点として設定される場合があってもよい。例えば、ゲートウェイ101以外のノード装置400がGDとして設定され得る実施形態では、ノード装置400のノードIDが基準点として設定されたハローフレーム620が送信されることもある。しかし、そのようなハローフレーム620を利用するか否かということは、ゲートウェイ101からの1ホップの範囲内での輻輳に関わる諸々の制御とは関連がない。そのため、上記の仮定をおくことにより、本明細書では図10〜12の説明を簡略化する。
上記の仮定によれば、受信されたハローフレーム620の基準点としてはゲートウェイ101自身のノードIDが指定されている。よって、ハローフレーム620に指定されたホップ数とは、ゲートウェイ101からのホップ数にほかならない。
そこで、ステップS113で登録処理部327は、受信されたハローフレーム620のLSであるノード装置400までのゲートウェイ101からのホップ数が1である旨を登録ノード情報314に登録する。また、登録処理部327は、ハローフレーム620を受信バッファ領域312から削除する。そして、処理はステップS102に戻る。
なお、ステップS113の詳細は、例えば、次のとおりである。まず、登録処理部327は、受信されたハローフレーム620のLSと等しいノードIDを持つエントリを登録ノードテーブル314aにおいて検索する。検索の結果エントリが見つかれば、登録処理部327は、見つかったエントリの1ホップフィールドにTrueという値を設定する。なお、検索の結果エントリが見つからなければ、登録処理部327は、特に何もしない。
また、ステップS114で登録処理部327は、受信されたハローフレーム620のLSであるノード装置400までのゲートウェイ101からのホップ数が2以上である旨を登録ノード情報314に登録する。また、登録処理部327は、ハローフレーム620を受信バッファ領域312から削除する。
ステップS114の詳細はステップS113と類似であり、相違点は、登録処理部327がTrueという値ではなくFalseという値を設定することだけである。そして、処理はステップS102に戻る。
さて、ステップS115でタイプ判断部322は、ステップS107で読み出したタイプの値が「Sync」であるか否か(すなわち受信されたフレームが同期フレーム650であるか否か)を判断する。そして、タイプの値が「Sync」の場合、処理はステップS116に移行する。また、タイプの値が「Sync」ではない場合、処理は図11のステップS117に移行する。
ステップS116でタイプ判断部322は、受信機305A〜305Dのいずれかによって今回受信されたフレームを破棄する。なぜなら、本実施形態では、ゲートウェイ101における同期の結果に応じてノード装置400が同期処理を行うが、ゲートウェイ101は、ノード装置400における同期の結果に応じて同期処理を行ったりはしないからである。そのため、ノード装置400からの同期フレーム650をゲートウェイ101が受信した場合、ゲートウェイ101は、不要な同期フレーム650をステップS116で破棄する。破棄の後、処理はステップS102に戻る。
さて、図11のステップS117で、タイプ判断部322は、ステップS107で読み出したタイプの値が「Data」であるか否か(すなわち受信されたフレームがデータフレーム660であるか否か)を判断する。そして、タイプの値が「Data」ではない場合、処理はステップS118に移行する。
逆に、タイプの値が「Data」である場合、タイプ判断部322は、次のように動作する。すなわち、タイプ判断部322は、RSSIの計算をRSSI計算部323に要求し、FCSのチェックをFCSチェック部324に要求し、受信時刻の取得を受信時刻取得部325に要求する。また、タイプ判断部322は、データフレーム660の受信に伴う処理を行うよう、データ処理部326と登録処理部327に要求する。そして、処理はステップS119に移行する。
ステップS118は例外処理のステップである。本実施形態において、図8〜9に示したタイプのみが使われる場合、ステップS118では、具体的には、CPU306が、不正なタイプのフレームが受信された場合のエラー処理を行う。
しかし、もちろん実施形態によっては、図8〜9に示した以外のタイプのフレームがさらに定義されていてもよい。その場合、CPU306は、タイプ判断部322が判断したフレームのタイプに応じた適宜の処理を、ステップS118において行う。したがって、ステップS118の詳細は実施形態に応じて任意である。ステップS118の実行後、処理は図10のステップS102に戻る。
さて、ステップS119〜S121でFCSチェック部324は、誤り率を計算するための前処理を行う。本実施形態では、FCSチェック部324は、誤り率を計算するために「受信カウンタ」と「エラーカウンタ」という2つのカウンタを持つ。また、FCSチェック部324は、過去のエラーカウンタ値を退避して記憶する。
なお、上記のステップS101の説明では省略したが、例えばステップS101において、FCSチェック部324は、受信カウンタとエラーカウンタの値を0に初期化する。さらに、ステップS101でFCSチェック部324は、過去のエラーカウンタ値を、まだエラーカウンタからの値のコピーが行われていないことを示す特別な値(例えば−1)に初期化する。
また、以下では説明の便宜上、受信カウンタとエラーカウンタはともに、0から255まで数えることができる8ビットのカウンタであるとする。しかし、カウンタのビット数は、もちろん実施形態に応じて任意である。
具体的には、ステップS119でFCSチェック部324は、受信カウンタをインクリメントする。
そして、次のステップS120でFCSチェック部324は、受信カウンタの値が0か否かを判断する。受信カウンタの値が0のとき、処理はステップS121に移行し、受信カウンタの値が0でないとき、処理はステップS122に移行する。なお、受信カウンタの値が0の場合とは、受信カウンタの値が255のときにステップS119でインクリメントが行われた場合のことである。
ステップS121でFCSチェック部324は、エラーカウンタの値を過去のエラーカウンタ値として退避する。そして、受信カウンタの値が0に戻ったのに合わせるため、FCSチェック部324は、エラーカウンタをクリアする。その後、処理はステップS122に移行する。
ステップS122でRSSI計算部323は、RSSIを計算し、計算したRSSIを輻輳判断部328に出力する。
また、次のステップS123で受信時刻取得部325は、タイマ331を参照して、データフレーム660の受信時刻として現在時刻を取得する。受信時刻取得部325は、取得した時刻を登録処理部327と輻輳判断部328の双方に出力する。
さらに、ステップS124で登録処理部327は、登録ノードテーブル314aにおいて、受信されたデータフレーム660のGSとノードIDが一致するエントリを検索する。検索の結果、エントリが見つかった場合、登録処理部327は、見つかったエントリにおいて、受信時刻取得部325から出力された時刻を、データ受信時刻として設定する。
逆に、検索の結果、エントリが見つからなかった場合、登録処理部327は、登録ノードテーブル314aに新たなエントリを追加する。そして、登録処理部327は、追加したエントリにおいて、受信されたデータフレーム660のGSをノードIDに設定するとともに、受信時刻取得部325から出力された時刻をデータ受信時刻として設定する。
以上のステップS124の処理により、登録済みのノード装置400からデータフレーム660が届いた場合か、未登録のノード装置400から登録要求の前に突然データフレーム660が届いた場合かによらず、適切に登録ノードテーブル314aが更新される。
そして、次のステップS125でFCSチェック部324は、受信されたデータフレーム660を受信バッファ領域312から読み出し、GDからアプリケーションデータまでの範囲からFCSを計算する。また、FCSチェック部324は、計算したFCSと、受信されたデータフレーム660に含まれるFCSを比較することで、エラーの有無を確認する。
続いて、ステップS126でFCSチェック部324は、2つのFCSが等しければ「エラーがない」と判断し、2つのFCSが等しくなければ「エラーがある」と判断する。また、FCSチェック部324は、判断結果をデータ処理部326に通知する。そして、エラーがある場合、処理はステップS127に移行し、エラーがない場合、処理はステップS129に移行する。
ステップS127でFCSチェック部324は、受信されたデータフレーム660を破棄する(つまり、データフレーム660を受信バッファ領域312から削除する)。なお、データ処理部326は、ステップS126でのFCSチェック部324からの通知により、「データ処理部326は、受信されたデータフレーム660を処理する必要がない」と認識することができる。
そして、次のステップS128でFCSチェック部324は、エラーカウンタをインクリメントする。その後、処理はステップS130に移行する。
他方、ステップS126でFCSチェック部324から「エラーがない」という通知を受けたデータ処理部326は、ステップS129で、受信されたデータフレーム660に関する処理を行う。具体的には、データ処理部326は、データフレーム660のペイロードであるアプリケーションデータと、データフレーム660のGSフィールドの値を含むデータを生成する。そして、データ処理部326は、生成したデータを、ネットワークI/F308とネットワーク211を介してデータサーバ213に送信する。
なお、データ処理部326は、データフレーム660のGSと同じ値をノードIDとして持つ登録ノードテーブル314aのエントリから、IPアドレスとMACアドレスをさらに読み出してもよい。そして、データ処理部326は、データサーバ213に送信するためのデータに、さらに、読み出したIPアドレスとMACアドレスを含めてもよい。
また、実施形態によっては、ゲートウェイ101がデータサーバ213を兼ねてもよい。その場合、ステップS129でデータ処理部326は、上記と同様にデータを生成し、生成したデータをメモリ307内の不図示のデータベースに蓄積する。
また、データサーバ213へのデータの送信後、データ処理部326は、データフレーム660を受信バッファ領域312から削除する。そして処理はステップS130に移行する。
ステップS130で輻輳判断部328は、現在の輻輳フラグ315aの値を「前の輻輳フラグ」としてコピーする。詳しくはステップS139とともに後述するが、前の輻輳フラグを利用することで、輻輳判断部328は、輻輳からの回復を検出することができる。
また、ステップS130に続いて、図12に示すステップS131で、FCSチェック部324は、受信カウンタとエラーカウンタの値を用いて誤り率を計算する。誤り率の計算方法は実施形態に応じて任意でよい。
例えば、FCSチェック部324は、過去のエラーカウンタ値が上記の特別な値(例えば−1)である場合は式(1)により、それ以外の場合は式(2)により、誤り率を計算してもよい。
rate=err/rcv (1)
rate=(err+errOld)/(rcv+256) (2)
なお、式(1)と(2)において、「rate」は誤り率を示し、「err」はエラーカウンタの値を示し、「rcv」は受信カウンタの値を示し、「errOld」は過去のエラーカウンタ値を示す。また、式(2)の256(=28)という値は、「2つのカウンタはともに8ビットのカウンタである」という上記の仮定に基づく。
FCSチェック部324は、計算した誤り率を輻輳判断部328に出力する。そして、処理はステップS132に移行する。ステップS132〜S135は、輻輳判断部328が、ゲートウェイ101から1ホップの範囲内で輻輳が生じているか否かを判断するためのステップである。本実施形態では、以下の(F1)〜(F3)の条件がすべて成立するときに輻輳判断部328が輻輳を検出する。
(F1)システムパラメタ313aのデータ収集スケジュールに定められた時刻から、ゲートウェイ101がすべての登録ノード装置からそれぞれデータフレーム660を受信するまでにかかった時間が、システムパラメタ313aの許容遅延時間を超えている。
(F2)登録ノード装置の数が、システムパラメタ313aの最大登録ノード数を超えている。
(F3)RSSIがシステムパラメタ313aの最低受信感度以上であるにもかかわらず、FCSチェック部324によって検出される誤り率がシステムパラメタ313aの臨界誤り率を超えている。
なお、条件(F1)は本実施形態に特有の条件である。つまり、本実施形態では、すべての登録ノード装置が同じ時刻にデータフレーム660を送信しようとするので、図6を参照して説明したように、通信システム100のネットワーク全体の負荷Lが、データの収集にかかる時間Tから推定可能である。そして、通信システム100のネットワーク全体の負荷Lが高ければ、当然、通信システム100内で最もトラフィックが集中する範囲(すなわちゲートウェイ101から1ホップの範囲)での負荷も高く、当該範囲での輻輳も生じやすい。
それだけでなく、許容遅延時間(すなわち図6の閾値T0)が適切に定義されているという前提のもとでは、もしゲートウェイ101から1ホップの範囲で実際に輻輳が生じていれば、データの収集にかかる時間Tは、許容遅延時間を超えるであろう。
つまり、ゲートウェイ101から1ホップの範囲で輻輳が生じると、ゲートウェイ101から1ホップ目のノード装置111〜113からゲートウェイ101へのデータフレーム660の送信が、なかなかすぐには成功しない。その結果、データの収集にかかる時間Tは、許容遅延時間を超えてしまう。
なお、輻輳が発生した場合に、ノード装置111〜113からゲートウェイ101へのデータフレーム660の送信に時間がかかる理由は、例えば、下記の(G1)〜(G3)などである。
(G1)コリジョンの発生により送信が失敗し、失敗の結果として、送信のリトライが発生する。
(G2)無線通信システムでは、所定時間内にACK(acknowledgment)信号が受信されない場合に、コリジョンの発生と見なされるので、コリジョンの検知までに上記所定時間の待ち時間がかかる。
(G3)物理層のプロトコルによっては、リトライのたびに、バックオフ時間が次第に長く設定されるようになる。
よって、本実施形態では、条件(F1)が成立することは、輻輳の発生をうかがわせる兆候の1つである。ただし、本実施形態では、条件(F1)は、輻輳が生じていることの十分条件とは見なされない。なぜなら、例えば、登録ノード装置の故障や、通信システム100内での送信経路の偶然の変動などに起因して、輻輳が発生していなくても、条件(F1)が成立することがあり得るからである。
例えば、ある1つの登録ノード装置が偶然故障していることがあり得る。すると、故障している当該登録ノード装置は、スケジュール情報415で定められたデータ送信スケジュールとは全く異なる時刻にデータフレーム660を送信することがあり得る。
また、通信システム100は、アドホックネットワークシステムでもよい。すると、通信システム100では、各ノード装置400からゲートウェイ101までの経路は、ハローフレーム620の交換などを通じて自律分散的に決定され得る。
また、経路は、環境の変化に応じて動的に変化し得る。環境の変化の具体例は、ノード装置400の追加もしくは削除、干渉源201の出現もしくは移動、遮蔽物の出現もしくは移動などである。
したがって、ある時点で偶然、ある登録ノード装置からゲートウェイ101へ向かう経路にループができてしまうこともあり得る。そして、通信システム100内で、ループしない経路が構築されるまでに、例えば5分間かかるかもしれない。すると、たとえ輻輳が発生していなくても、データ収集スケジュールに定められた時刻から、ゲートウェイ101がすべての登録ノード装置からデータを収集し終わる時刻までの遅延時間は、許容遅延時間を超えてしまうかもしれない。
以上のとおりであるから、条件(F1)は、本実施形態では、輻輳の検出の必要条件として利用され、十分条件とは見なされない。
また、例えば図1の通信システム100に多数のノード装置400が追加され、追加された各ノード装置400が登録要求フレーム670をゲートウェイ101に送信した場合、登録ノード装置の数が最大登録ノード数を超えることがある。登録ノード装置の数が増えるほど、データ収集スケジュールで決められた時刻の直後の、ゲートウェイ101から1ホップの範囲内の通信量は増え、当該範囲内で輻輳が生じやすくなる。
つまり、登録ノード装置の数が最大登録ノード数を超えると、ゲートウェイ101は、デフォルトチャネルChA用の受信機305Aだけでは、ゲートウェイ101から1ホップ目のノード装置からのデータフレーム660を受信しきれなくなる。よって、条件(F2)も、本実施形態では、輻輳の検出の必要条件の1つとして利用される。
また、条件(F3)は、データ送信スケジュールが予め決められている本実施形態に限らず、様々な実施形態で有効な条件である。条件(F3)の意味を説明すれば、下記のとおりである。
RSSIが最低受信感度未満のときは、受信電力が不十分なため、そもそも「ゲートウェイ101がフレームを正しく受信することが可能である」という保証がない。よって、RSSIが最低受信感度未満のときは、たとえFCSチェック部324によって検出される誤り率が臨界誤り率を超えていたとしても、「受信電力不足によって雑音等の影響で誤りが生じている」と見なすのが妥当である。つまり、RSSIが最低受信感度未満のときは、「輻輳が生じている」と見なすのは不適当である。
他方、RSSIが最低受信感度以上のとき、次の2つの場合があり得る。
(H1)受信環境が良好な場合。この場合、FCSチェック部324によって検出される誤り率は低い。
(H2)ゲートウェイ101から1ホップの範囲内のノード装置111〜113からの大量のフレーム送信に起因して、あるいはゲートウェイ101の近傍に干渉源201が存在することに起因して、輻輳が発生した場合。この場合、FCSチェック部324によって検出される誤り率は高い。
よって、臨界誤り率が適切に設定されていれば、(H1)の場合と(H2)の場合が弁別可能である。したがって、本実施形態では、条件(F3)が輻輳の検出の必要条件の1つとして使われる。
したがって、本実施形態の輻輳判断部328は、以上説明した条件(F1)〜(F3)がすべて成立するときにのみ輻輳を検出する。具体的には、図12のステップS132は条件(F1)に関する判断のステップであり、ステップS133は条件(F2)に関する判断のステップであり、ステップS134〜S135は条件(F3)に関する判断のステップである。
具体的には、ステップS132で輻輳判断部328は、システムパラメタ313aを参照し、データ収集スケジュールで決められた時刻に許容遅延時間を足した時刻を計算する。そして、輻輳判断部328は、ステップS123で受信時刻取得部325が取得して輻輳判断部328に出力した、データフレーム660の受信時刻が、計算した時刻よりも遅いか否かを判断する。
受信時刻が、計算された時刻よりも遅い場合、条件(F1)が成立するので、処理はステップS133に移行する。
逆に、受信時刻が、計算された時刻と同じか計算された時刻よりも早い場合、条件(F1)が最終的に成立するか否かはまだ不明である。そのため、輻輳判断部328は「現時点では条件(F1)は成立していない」と判断する。そして、処理はステップS138に移行する。
例えば、図4の例のように、ノード装置132からのデータフレーム660の受信時刻が15時0分35.247秒であるとする。この場合、その後、すべての登録ノードからのデータフレーム660の受信が許容遅延時間以内に終了すれば、最終的に「条件(F1)が不成立である」と確定する。しかし、例えばノード装置143からのデータフレーム660が15時5分より後にゲートウェイ101に受信される場合もあり得る。このように、ノード装置132からのデータフレーム660が受信された時点では、条件(F1)が最終的に成立するか否かは未確定である。
したがって、輻輳判断部328は、受信時刻が、計算された時刻と同じか計算された時刻よりも早い場合、上記のように「現時点では条件(F1)は成立していない」と判断する。
また、ステップS133で輻輳判断部328は、登録ノードテーブル314aのエントリ数を数え、エントリ数がシステムパラメタ313aの最大登録ノード数を超えているか否かを判断する。エントリ数が最大登録ノード数を超えている場合、条件(F2)が成立するので処理はステップS134に移行する。逆に、エントリ数が最大登録ノード数以下の場合、条件(F2)は成立しないので処理はステップS138に移行する。
そして、ステップS134で輻輳判断部328は、ステップS122でRSSI計算部323から出力されたRSSIが、システムパラメタ313aの最低受信感度以上であるか否かを判断する。RSSIが最低受信感度以上のとき、条件(F3)が成立する可能性があるので、処理はステップS135に移行する。逆に、RSSIが最低受信感度未満のとき、上記のとおり条件(F3)は成立しないので、処理はステップS138に移行する。
ステップS135で輻輳判断部328は、ステップS131でFCSチェック部324から出力された誤り率が、システムパラメタ313aの臨界誤り率を超えているか否かを判断する。
ステップS135が実行されるのは、RSSIが最低受信感度以上のときなので、誤り率が臨界誤り率を超えていれば条件(F3)が成立する。また、ステップS135が実行されるのは、条件(F1)と(F2)が成立することが既にステップS132とS133で判明している場合である。
よって、誤り率が臨界誤り率を超えていれば、輻輳判断部328は、「輻輳が発生している」と判断する。そして、処理はステップS136に移行する。
逆に、誤り率が臨界誤り率を超えていなければ、条件(F3)は成立しない。したがって、輻輳判断部328は「輻輳は発生していない」と判断する。そして、処理はステップS138に移行する。
さて、ステップS136〜S137は、輻輳判断部328が輻輳を検出した場合に実行される。具体的には、ステップS136で輻輳判断部328は、輻輳フラグ315aをTrueに設定し、輻輳を検出したことを命令発行部329に通知する。
そして、次のステップS137で命令発行部329は、切り換え命令フレーム630を生成し、送信機303に出力する。すると、送信機303が、スイッチ302とアンテナ301を介して切り換え命令フレーム630を送信する。
なお、送信された切り換え命令フレーム630は、通信可能エリア102内のノード装置111、112、113、および126により受信される。また、図8を参照して説明したように、切り換え命令フレーム630の具体的な形式は実施形態に応じて様々である。切り換え命令フレーム630の送信後、処理は図10のステップS102に戻る。
さて、ステップS138〜S140は、輻輳判断部328が輻輳を検出しなかった場合に実行される。具体的には、ステップS138で輻輳判断部328は、輻輳フラグ315aをFalseに設定する。
そして、次のステップS139で輻輳判断部328は、ステップS130で値を設定した「前の輻輳フラグ」を参照する。現在の輻輳フラグ315aの値がFalseであることに着目すると、前の輻輳フラグの値がTrueの場合とは、すなわち輻輳が解消した場合である。また、前の輻輳フラグの値がFalseの場合とは、輻輳していない状態が持続している場合である。
よって、前の輻輳フラグの値がTrueのとき、輻輳判断部328は輻輳の解消を検出し、輻輳の解消を検出したことを命令発行部329に通知する。そして、処理はステップS140に移行する。他方、前の輻輳フラグの値がFalseの場合、処理は図10のステップS102に戻る。
また、ステップS140で命令発行部329は、復帰命令フレーム640を生成し、送信機303に出力する。すると、送信機303が、スイッチ302とアンテナ301を介して復帰命令フレーム640を送信する。
なお、送信された復帰命令フレーム640は、通信可能エリア102内のノード装置111、112、113、および126により受信される。復帰命令フレーム640の送信後、処理は図10のステップS102に戻る。
以上のようにして、ゲートウェイ101は、輻輳の発生を監視し、輻輳が発生した場合は切り換え命令フレーム630を送信し、輻輳が解消した場合は復帰命令フレーム640を送信する。すなわち、ゲートウェイ101は、切り換え命令フレーム630と復帰命令フレーム640の送信により、ゲートウェイ101から1ホップの範囲内にあるノード装置400の送信チャネルを間接的に制御する。
その結果、通信負荷は、必要に応じて複数のチャネルに分散されるが、輻輳が発生しなければデフォルトチャネルのみが使われる。したがって、有限のリソースである無線通信チャネルが効率的に活用される。
なお、より好ましくは、ステップS136の実行後、輻輳判断部328は、前の輻輳フラグを参照し、前の輻輳フラグの値がFalseである場合にのみ、ステップS137を実行するとよい。つまり、前の輻輳フラグの値がTrueの場合とは、「既に輻輳が検出されており、まだなお輻輳が持続している」という場合なので、ステップS137は省略されることが好ましい。
続いて、図13〜17のフローチャートを参照して、ノード装置400が行う処理について説明する。まず概要を説明すると、下記のとおりである。なお、下記の概要の説明に登場しないステップは、条件分岐または例外処理のためのステップである。
ノード装置400は、まずステップS201〜S208で初期化を行う。ステップS209以降は、繰り返し実行される。
ステップS209〜S224でノード装置400は、スケジュール情報415にしたがって適宜フレームを送信する。その後、ノード装置400は、もしフレームを受信していれば、ステップS226以降の処理を適宜行う。
すなわち、ノード装置400は、同期フレーム650を受信した場合はステップS227〜S228を実行する。また、ノード装置400は、通信システム100内でのマルチホップ送信の対象であるデータフレーム660または登録要求フレーム670を受信した場合は、ステップS231〜S238を実行する。
また、ノード装置400は、切り換え命令フレーム630を受信した場合は、ステップS246〜S249を実行し、復帰命令フレーム640を受信した場合は、ステップS244を実行する。また、ノード装置400は、ハローフレーム620を受信した場合は、ステップS252〜S257を実行する。
以上概要を説明したノード装置400の処理について、以下では詳細に説明する。
ノード装置400に電源が入れられると、まずステップS201で、ノード装置400は、同期フレーム650を受信するまで待機する。具体的は、同期処理部426が、タイプ判断部421から同期フレーム650の受信を通知されるまで、ノード装置400は待機する。
ノード装置400に隣接する隣接ノード装置が同期フレーム650を送信すると、アンテナ401とスイッチ402を介して、受信機404が同期フレーム650を受信する。そして、受信機404は、受信した同期フレーム650を送受信バッファ領域411に出力する。
また、受信機404は、フレームを受信したことと、受信したフレームの送受信バッファ領域411における先頭アドレスを、タイプ判断部421に通知する。すると、タイプ判断部421は、送受信バッファ領域411を参照して、受信されたフレームが同期フレーム650であることを認識する。そして、タイプ判断部421は、同期処理部426に対して、同期フレーム650が受信されたことと、同期フレーム650の送受信バッファ領域411における先頭アドレスを通知する。
ノード装置400に電源が入れられてから、以上のようにしてタイプ判断部421からの通知を受けるまで、同期処理部426はステップS201で待機する。そして、同期処理部426がタイプ判断部421からの通知を受けると、処理はステップS202に移行する。
ステップS202で同期処理部426は、同期フレーム650に基づいてタイマ427を設定する。具体的には、まず、同期処理部426は、受信された同期フレーム650のペイロードに含まれる時刻情報を送受信バッファ領域411から読み出す。そして、同期処理部426は、読み出した時刻情報が示す時刻(以下「t1」とする)に所定の時間(以下「Δt」とする)を足して得られる時刻を、タイマ427に設定する。
例えば、時間Δtは、同期フレーム650のサイズを伝送速度(transmission rate)で割った値である。本実施形態では同期フレーム650は固定長である。また、伝送速度は物理層の通信プロトコルの仕様に応じて決まる。よって、例えば、時間Δtは、1ホップの伝送遅延時間を示す定数としてプログラム418に定義されていてもよく、同期処理部426は時間Δtを認識することが可能である。
あるいは、タイプ判断部421によるタイプの判断にかかる時間などを無視することができない場合などは、1ホップの伝送遅延時間に、タイプ判断部421の処理時間などの所定の時間を足した値が、時間Δtとして定義されていてもよい。
または、同期処理部426は次のようにして時間Δtを認識してもよい。ノード装置400に電源が入れられた直後から、タイマ427が動作し始めるので、受信機404は、タイマ427を参照して、フレームのプリアンブルを検出し始めた時刻と、同期フレーム650を受信し終わった時刻を認識してもよい。そして、受信機404は、2つの時刻の差分を時間Δtとして同期処理部426に通知してもよい。
ノード装置400に電源が入れられた直後には、タイマ427が指す時刻自体は不正確かもしれないが、時間の長さを計測するのにタイマ427を利用することに支障はない。なお、もし、タイプ判断部421によるタイプの判断にかかる時間などを無視することができなければ、受信機404が同期フレーム650を受信し終わった時刻の代わりに、同期処理部426がタイプ判断部421から通知を受けた時刻が利用されてもよい。
上記に例示したいずれかの方法により、同期処理部426は時間Δtを認識することができる。よって、同期処理部426は、タイマ427に時刻(t1+Δt)を設定する。
そして、次のステップS203で同期処理部426は、新たな同期フレーム650を生成し、送信機403に出力する。すると、送信機403は、生成された新たな同期フレーム650を、スイッチ402とアンテナ401を介して送信する。
なお、同期処理部426は、新たな同期フレーム650のGSとLSにノード装置400自身のノードIDを設定する。また、同期処理部426は、新たな同期フレーム650のペイロードに、タイマ427に設定した時刻(t1+Δt)に所定の時間(以下「α」とする)を足した時刻を示す時刻情報を設定する。
時間αは、ノード装置400内部での処理にかかる時間(例えば同期処理部426が同期フレーム650を生成するのにかかる時間を含む)であり、例えば、定数としてプログラム418に定義されていてもよい。したがって、同期処理部426は、時間αを認識することが可能であり、時刻(t1+Δt+α)を示す時刻情報を含む新たな同期フレーム650を生成することが可能である。
同期フレーム650の送信後、ノード装置400はステップS204でハローフレーム620が受信されるまで待機する。具体的には、転送処理部430とリンク管理部433が、タイプ判断部421からハローフレーム620の受信を通知されるまで、ノード装置400は待機する。
ノード装置400に隣接する装置(具体的にはゲートウェイ101または他のノード装置)がハローフレーム620を送信すると、アンテナ401とスイッチ402を介して、受信機404がハローフレーム620を受信する。そして、受信機404は、受信したハローフレーム620を送受信バッファ領域411に出力する。
また、受信機404は、フレームを受信したことと、受信したフレームの送受信バッファ領域411における先頭アドレスを、タイプ判断部421に通知する。すると、タイプ判断部421は、送受信バッファ領域411を参照して、受信されたフレームがハローフレーム620であることを認識する。そして、タイプ判断部421は、転送処理部430とリンク管理部433に対して、ハローフレーム620が受信されたことと、ハローフレーム620の送受信バッファ領域411における先頭アドレスを通知する。
以上のようにして転送処理部430とリンク管理部433がタイプ判断部421からの通知を受けるまで、ノード装置400はステップS204で待機する。そして、転送処理部430とリンク管理部433がタイプ判断部421からの通知を受けると、処理はステップS205に移行する。
ステップS205で転送処理部430は、経路情報414に新規エントリを追加する。そして、転送処理部430は、受信されたハローフレーム620を送受信バッファ領域411から読み出して、読み出したハローフレーム620にしたがって新規エントリのフィールドに値を設定する。
なお、以下では説明の便宜上、経路情報414が経路情報414aおよび414bのような形式であるとする。また、ノード装置400に電源が入れられた直後には、経路情報414は1つもエントリを持っていない。
具体的には、転送処理部430は、受信されたハローフレーム620に基準点として設定されているノードIDを、新規エントリのGDにコピーする。また、転送処理部430は、新規エントリのLDに、受信されたハローフレーム620のLSの値をコピーする。また、転送処理部430は、新規エントリのホップ数に、受信されたハローフレーム620に指定されたホップ数に1を足して得られる値を設定する。なお、転送処理部430は、新規エントリの評価値に、所定のデフォルト値(例えば0.5)を設定する。
以上のステップS205の処理により、ノード装置400は、受信したハローフレーム620のLSである装置が、ハローフレーム620に基準点として設定されている装置宛のフレームのLDの候補となり得ることを認識することができるようになる。例えば、ノード装置125がハローフレーム624を受信した場合、ノード装置125は、「ノード装置113がゲートウェイ101宛のフレームのLDの候補となり得る」と認識することができるようになる。
そして、次のステップS206でリンク管理部433は、リンク情報417に新規エントリを追加する。なお、リンク情報417も、ノード装置400に電源が入れられた直後には、1つもエントリを持っていない。
具体的には、リンク管理部433は、受信されたハローフレーム620のLSの値を、新規エントリに設定する。その結果、ノード装置400は、ノード装置400自身に隣接する装置(具体的にはゲートウェイ101または他のノード装置)が存在することを認識することができるようになるとともに、隣接する当該装置のノードIDを認識することもできるようになる。
すると、次のステップS207でハローフレーム生成部429は、新たなハローフレーム620を生成して送信機403に出力する。具体的には、ハローフレーム生成部429は、新たなハローフレーム620のLSとGSにノード装置400自身のノードIDを設定する。また、ハローフレーム生成部429は、ステップS205で作成された新規エントリを参照し、新たなハローフレーム620の基準点には新規エントリのGDの値をコピーし、新たなハローフレーム620のホップ数には新規エントリのホップ数の値をコピーする。なお、ステップS207は、例えば、ステップS206の処理を終えたリンク管理部433がハローフレーム生成部429に通知を送ることを契機として実行されてもよい。
そして、次のステップS208では、送信モード情報412とスケジュール情報415が初期化される。例えば、ステップS204で初めてのハローフレーム620の受信を検出したタイプ判断部421が、ステップS208で初期化を行ってもよい。
具体的には、送信モード情報412は、通常モードを示す値に初期化される。また、本実施形態では、スケジュール情報415のうちデータ送信スケジュールは、予め固定的に決められている。よって、本実施形態では、スケジュール情報415のうち、ハローフレーム送信スケジュールと登録要求スケジュールが、ステップS208で初期化される。
例えば、タイプ判断部421は、タイマ427を参照して現在時刻を取得し、現在時刻から秒の部分を抽出し、抽出した秒の部分にしたがってハローフレーム送信スケジュールを設定してもよい。例えば、抽出された秒の部分が「2.000秒」の場合、図7のスケジュール情報415aのようにハローフレーム送信スケジュールが「毎分2.000秒」と設定される。
また、タイプ判断部421は、例えば乱数を使って、ランダムな時刻を登録要求スケジュールとして設定してもよい。乱数を用いることにより、通信システム100内で多数の登録要求フレーム670が一斉に送信されることを防ぐことができ、登録要求フレーム670の送信に関して時間的な負荷分散が実現される。
そして、以上のステップS201〜S208の初期化の後、ステップS209でハローフレーム生成部429は、前回のハローフレーム620の送信から所定時間が経過したか否かを判断する。例えば図7のスケジュール情報415aのように、ハローフレーム送信スケジュールが1分間に1回の送信を示す場合、「所定時間」とは1分間のことである。もちろん、初めてステップS209が実行される場合には、ステップS207でハローフレーム620の送信が行われたばかりであるから、まだ所定時間は経過していない。
もし、前回のハローフレーム620の送信から所定時間が既に経過していれば、処理はステップS210に移行する。逆に、前回のハローフレーム620の送信からまだ所定時間が経過していなければ、処理はステップS211に移行する。
ステップS210でハローフレーム生成部429は、新たなハローフレーム620を生成し、送信機403に出力する。そして、送信機403は、スイッチ402とアンテナ401を介してハローフレーム620を送信する。
例えば、ノード装置400が図1のノード装置123であり、ステップS210が実行される時点におけるノード装置123の経路情報414が、図7の経路情報414bのとおりであるとする。また、本実施形態では、GDとして指定されるのはゲートウェイ101に事実上限られるものとする。
すると、ノード装置123のハローフレーム生成部429は、経路情報414bにおいてGDが「ID101」であるエントリのうち、最も評価の高い(すなわち最も評価値の小さい)エントリを選択する。そして、ハローフレーム生成部429は、選択したエントリのホップ数の値を、ステップS210で生成する新たなハローフレーム620のホップ数として設定する。また、ノード装置123のハローフレーム生成部429は、基準点に「ID101」を設定し、GSとLSの双方にノード装置123自身のIDである「ID123」を設定する。
例えば以上のようにしてステップS210で新たなハローフレーム620が送信されると、処理はステップS211に移行する。
そして、ステップS211では、登録要求部432が、タイマ427とスケジュール情報415の登録要求スケジュールを参照して、登録要求フレーム670を送信する時刻になったか否かを判断する。もし、登録要求フレーム670を送信する時刻になっていれば、処理はステップS212に移行する。逆に、まだ登録要求フレーム670を送信する時刻になっていなければ、処理は図14のステップS218に移行する。
ステップS212〜S217は、登録要求フレーム670の送信に関するステップである。まず、ステップS212では、登録要求部432が、新たな登録要求フレーム670を生成して送受信バッファ領域411に出力し、LDの決定を転送処理部430に要求する。そして、転送処理部430が登録要求フレーム670のLDを決定する。
具体的には、登録要求部432は、新たな登録要求フレーム670において、GDには「ID101」を設定し、GSとLSにはノード装置400自身のノードIDを設定する。また、登録要求部432は、タイプを「Reg」と設定する。さらに、登録要求部432は、個体情報416を参照し、個体情報416に記録されているノード装置400自身のIPアドレスとMACアドレスを、登録要求フレーム670のIPアドレスとMACアドレスとして設定する。
そして、登録要求部432は、登録要求フレーム670の送受信バッファ領域411内での先頭アドレスを転送処理部430に通知するとともに、登録要求フレーム670のLDを決定するよう転送処理部430に要求する。すると、転送処理部430は、送受信バッファ領域411から登録要求フレーム670のGDの値を読み出し、経路情報414において、読み出した値と同じ値がGDに設定されたエントリのうち最も評価の高いエントリを検索する。そして、転送処理部430は、検索の結果見つかったエントリのLDの値を、送受信バッファ領域411に格納されている登録要求フレーム670のLDフィールドに設定する。
転送処理部430は、以上のようにしてLDを決定すると、チャネル指定部425に、登録要求フレーム670の送信の準備が完了したことを通知する。また、転送処理部430は、登録要求フレーム670の送受信バッファ領域411内での先頭アドレスをさらにチャネル指定部425に通知してもよい。すると、チャネル指定部425は後のステップにおいて適宜ホップ数認識部428や送信機403に先頭アドレスを通知することが可能となる。
さて、転送処理部430からの通知を受けたチャネル指定部425は、次のステップS213で、ノード装置400とゲートウェイ101の間のホップ数が1か否かを、ホップ数認識部428を介して認識する。すなわち、ホップ数認識部428は、送受信バッファ領域411を参照して、送信対象の登録要求フレーム670のLDの値を読み取り、LDの値が、ゲートウェイ101のID(すなわち「ID101」)であるか否かを判断する。換言すれば、ホップ数認識部428は、GDとLDが等しいか否かを判断する。
読み取られたLDの値が「ID101」であれば、登録要求フレーム670は他のノード装置を経由せずに直接ゲートウェイ101に送信されるということであり、ノード装置400とゲートウェイ101の間のホップ数は1である。そして、ホップ数が1の場合、送信モードによっては、ノード装置400は、デフォルトチャネルChA以外での送信を行う。よって、LDの値が「ID101」のとき、ホップ数認識部428はホップ数が1であることをチャネル指定部425に通知し、処理は図14のステップS214に移行する。
逆に、読み取られたLDの値が「ID101」でなければ、登録要求フレーム670は他のノード装置を経由してゲートウェイ101に送信されるということであり、ノード装置400とゲートウェイ101の間のホップ数は2以上である。そして、ホップ数が2以上の場合、上記のとおり常にデフォルトチャネルChAが使われる。よって、LDの値が「ID101」でないとき、ホップ数認識部428はホップ数が2以上であることをチャネル指定部425に通知し、処理は図14のステップS215に移行する。
さて、ステップS214では、チャネル指定部425が送信モード情報412を参照し、送信モード情報412が輻輳モードを示しているか否かを判断する。もし、送信モード情報412が輻輳モードを示していれば、処理はステップS216に移行する。逆に、送信モード情報412が通常モードを示していれば、処理はステップS215に移行する。
ステップS215でチャネル指定部425は、デフォルトチャネルChAを選び、選んだチャネルChAを送信チャネルとして送信機403に指定する。そして、処理はステップS217に移行する。なお、ステップS215においてチャネル指定部425は、さらに、送受信バッファ領域411における登録要求フレーム670の先頭アドレスを送信機403に通知することもできる。
ステップS216でチャネル指定部425は、デフォルトチャネルChA以外のチャネルChB〜ChDの中から、1つのチャネルをランダムに選び、選んだチャネルを送信チャネルとして送信機403に指定する。そして、処理はステップS217に移行する。なお、ステップS216においてチャネル指定部425は、さらに、送受信バッファ領域411における登録要求フレーム670の先頭アドレスを送信機403に通知することもできる。
実施形態によっては、チャネル指定部425は、デフォルトチャネルChAを含む4つのチャネルChA〜ChDの中から1つのチャネルをランダムに選んでもよい。しかし、上記のようにチャネル指定部425は、ステップS216において、送信チャネルの候補からチャネルChAを除外することが好ましい。理由は次のとおりである。
例えばノード装置400がノード装置113であるとし、送信モードが輻輳モードであると仮定する。そして、送信モードが輻輳モードのときに、ランダムな選択の結果、たまたまノード装置113がチャネルChAを用いてゲートウェイ101宛のフレームを送信すると仮定する。
すると、ノード装置113がチャネルChAを用いてゲートウェイ101宛のフレームを送信している間は、ノード装置113を介してゲートウェイ101へフレームを送信しようとするノード装置125と126は、フレームの送信ができない。なぜなら、ノード装置125と126は、送信のためにキャリアセンスを行い、その結果、チャネルChAが占有されていることを検出するからである。
よって、ノード装置125と126は、ノード装置113が送信を終えるまで待たねばならない。そして、チャネルChAが空くのをノード装置125とノード装置126が待つ間にも、送信対象のフレームが続々とノード装置125と126に蓄積されるおそれがある。フレームの蓄積は輻輳を悪化させる要因となり得る。
よって、ノード装置113は、ノード装置125や126の送信を妨げないようにするために、送信モードが輻輳モードのときには送信チャネルの候補からチャネルChAを除外することが好ましい。
ステップS217で送信機403は、チャネル指定部425が選んだチャネルを用いて、送受信バッファ領域411に格納されている登録要求フレーム670を、スイッチ402とアンテナ401を介して送信する。送信後、送信機403は送受信バッファ領域411から登録要求フレーム670を削除する。そして、処理はステップS218に移行する。
続くステップS218〜S224は、データフレーム660の送信に関するステップである。まず、ステップS218では、データ処理部431がタイマ427とスケジュール情報415のデータ送信スケジュールを参照して、データフレーム660を送信する時刻になったか否かを判断する。もし、データフレーム660送信する時刻になっていれば、処理はステップS219に移行する。逆に、まだデータフレーム660を送信する時刻になっていなければ、処理はステップS225に移行する。
そして、ステップS219では、データ処理部431が新たなデータフレーム660を生成して送受信バッファ領域411に出力し、LDの決定を転送処理部430に要求する。そして、転送処理部430がデータフレーム660のLDを決定する。
具体的には、データ処理部431は、新たなデータフレーム660において、GDには「ID101」を設定し、GSとLSにはノード装置400自身のノードIDを設定する。また、データ処理部431は、タイプを「Data」と設定する。さらに、データ処理部431は、適宜のアプリケーションデータを生成し、データフレーム660のペイロードに格納する。例えば、データ処理部431は不図示のセンサから値を読み取り、読み取った値をアプリケーションデータとして使ってもよい。
そして、データ処理部431は、データフレーム660の送受信バッファ領域411内での先頭アドレスを転送処理部430に通知するとともに、データフレーム660のLDを決定するよう転送処理部430に要求する。すると、転送処理部430は、ステップS212と同様にして、データフレーム660のGDの値に基づいてLDを決定し、データフレーム660のLDフィールドに値を設定する。
そして、転送処理部430は、チャネル指定部425に、データフレーム660の送信の準備が完了したことを通知する。また、転送処理部430は、データフレーム660の送受信バッファ領域411内での先頭アドレスをさらにチャネル指定部425に通知してもよい。
さて、転送処理部430からの通知を受けたチャネル指定部425は、次のステップS220で、ノード装置400とゲートウェイ101の間のホップ数が1か否かを、ホップ数認識部428を介して認識する。具体的には、ホップ数認識部428が、ステップS213と同様にしてデータフレーム660のLDの値を読み取る。
そして、LDの値が「ID101」ならば、ホップ数認識部428は、ホップ数が1であることをチャネル指定部425に通知し、処理はステップS221に移行する。逆に、読み取られたLDの値が「ID101」でなければ、ホップ数認識部428はホップ数が2以上であることをチャネル指定部425に通知し、処理はステップS222に移行する。
そして、ステップS221では、チャネル指定部425が送信モード情報412を参照し、送信モード情報412が輻輳モードを示しているか否かを判断する。もし、送信モード情報412が輻輳モードを示していれば、処理はステップS223に移行する。逆に、送信モード情報412が通常モードを示していれば、処理はステップS222に移行する。
ステップS222でチャネル指定部425は、デフォルトチャネルChAを選び、選んだチャネルChAを送信チャネルとして送信機403に指定する。そして、処理はステップS224に移行する。
また、ステップS223でチャネル指定部425は、デフォルトチャネルChA以外のチャネルChB〜ChDの中から、1つのチャネルをランダムに選び、選んだチャネルを送信チャネルとして送信機403に指定する。そして、処理はステップS224に移行する。なお、ステップS222およびS223においても、S215およびS216と同様に、チャネル指定部425はさらに先頭アドレスを送信機403に通知することもできる。
ステップS224で送信機403は、チャネル指定部425が選んだチャネルを用いて、送受信バッファ領域411に格納されているデータフレーム660を、スイッチ402とアンテナ401を介して送信する。送信後、送信機403は送受信バッファ領域411からデータフレーム660を削除する。そして、処理はステップS225に移行する。
さて、ステップS225では、ノード装置400が受信した未処理のフレームが送受信バッファ領域411にあるか否かが、例えばタイプ判断部421によって判断される。
例えば、受信機404は、フレームを受信すると送受信バッファ領域411に出力し、受信したフレームの送受信バッファ領域411内での先頭アドレスをタイプ判断部421に通知する。また、タイプ判断部421は、受信機404から通知を受けると、不図示のバックグラウンド処理を行う。
上記バックグラウンド処理において、タイプ判断部421は、受信されたフレームのLDのフィールドの値を読み出す。そして、タイプ判断部421は、読み出した値がノード装置400自身のノードIDでもなく、ブロードキャストアドレス(図8〜9における「BC」)でもない場合、受信されたフレームを送受信バッファ領域411から削除する。つまり、タイプ判断部421は、ノード装置400自身とは無関係なフレームが受信された場合、無関係なフレームを送受信バッファ領域411から削除する。
例えば以上のような、受信機404からタイプ判断部421への通知と、タイプ判断部421によるバックグラウンド処理の結果にしたがって、タイプ判断部421はステップS225の判断を実行することができる。
ノード装置400が受信した未処理のフレームが送受信バッファ領域411にある場合、処理はステップS226に移行する。逆に、ノード装置400が受信した未処理のフレームが存在しない場合、処理は図13のステップS209に戻る。
ステップS226でタイプ判断部421は、送受信バッファ領域411を参照して、受信されたフレームのタイプを読み取り、タイプが「Sync」か否かを判断する。
タイプが「Sync」のとき、タイプ判断部421は同期処理部426に対して、同期フレーム650が受信されたことと、同期フレーム650の送受信バッファ領域411における先頭アドレスを通知する。そして、処理はステップS227に移行する。逆に、タイプが「Sync」ではないとき、処理は図15のステップS229に移行する。
ステップS227で同期処理部426は、ステップS202と同様にして、同期フレーム650に基づいてタイマ427を設定し、設定が済んだら同期フレーム650を送受信バッファ領域411から削除する。
そして、次のステップS228で同期処理部426は、ステップS203と同様にして、新たな同期フレーム650を生成し、送信機403に出力する。すると、送信機403は、生成された新たな同期フレーム650を、スイッチ402とアンテナ401を介して送信する。
なお、図14では説明の簡略化のため省略したが、同期処理部426は、前回の同期フレーム650の送信から一定時間以上経過していない場合は、ステップS228で新たな同期フレーム650を生成しないことが望ましい。理由は次のとおりである。
例えば、ゲートウェイ101が送信した第1の同期フレーム650をノード装置111と112がともに受信し、受信を契機としてノード装置111が第2の同期フレーム650を送信し、ノード装置112が第3の同期フレーム650を送信することがある。すると、ノード装置111と112は隣接しているので、第2の同期フレーム650はノード装置112でも受信され、第3の同期フレーム650はノード装置111でも受信される。
通信システム100が大量の同期フレーム650で「あふれかえる(flooded)」事態を防ぐためには、ノード装置111は、第3の同期フレーム650を受信したとき、第4の同期フレーム650を新たに送信しないようにすることが望まれる。同様に、ノード装置112は、第2の同期フレーム650を受信したとき、第5の同期フレーム650を新たに送信しないようにすることが望まれる。
以上のとおり、ステップS228では、場合によっては新たな同期フレーム650の生成と送信が省略されることが望ましい。例えば、上記の「一定時間」は、隣接するノード装置間のRTT(Round Trip Time)に、適宜のマージンを足した時間でもよい。マージンは、スイッチ402の切り換え周期や、同期処理部426の処理時間などに基づいて決められることが好ましい。なお、ステップS228の後、処理は図13のステップS209に戻る。
さて、図15のステップS229で、タイプ判断部421は、受信機404により受信されたフレームのLSを送受信バッファ領域411から読み出し、LSの値がゲートウェイ101のノードID(すなわち「ID101」)であるか否かを判断する。そして、LSの値が「ID101」ならば処理はステップS239に移行し、LSの値が「ID101」でなければ処理はステップS230に移行する。なお、ステップS229の条件分岐の意味を説明すれば以下のとおりである。
実施形態によってはゲートウェイ101がフレームの転送(つまり中継)を行ってもよいが、本実施形態では、ゲートウェイ101はフレームを転送しない。他方、ノード装置400は、必要に応じてデータフレーム660や登録要求フレーム670を転送する。
また、本実施形態のゲートウェイ101は、ハローフレーム620や同期フレーム650などの制御フレームを生成して送信するが、データフレーム660などの非制御フレームを通信システム100内のいずれかのノード装置400に宛てて送信することはない。他方、ノード装置400は、非制御フレームを送信する。
さらに、ハローフレーム620と同期フレーム650は、ゲートウェイ101からもノード装置400からも送信されることがあるが、切り換え命令フレーム630と復帰命令フレーム640は、ゲートウェイ101からしか送信されることがない。
以上のように、本実施形態では、ゲートウェイ101とノード装置400の間に、実行する処理の点でも、送信するフレームのタイプおよびサブタイプの点でも、違いがある。そこで、本実施形態では、後の処理における条件分岐が複雑化するのを防ぐため、受信されたフレームのLSがゲートウェイ101であるか否かを、先にステップS229でタイプ判断部421が判断する。
さて、上記のようにステップS230は、受信されたフレームのLSの値が「ID101」ではない場合に実行される。そこで、ステップS230でタイプ判断部421は、送受信バッファ領域411を参照して、受信されたフレームのタイプを読み取り、タイプが「Data」または「Reg」であるか否かを判断する。すなわち、タイプ判断部421は、受信されたフレームが、マルチホップ送信される可能性のあるフレームなのか否かを判断する。
そして、タイプが「Data」または「Reg」のとき、タイプ判断部421は転送処理部430に対して、タイプを通知するとともに、受信されたフレームの送受信バッファ領域411における先頭アドレスを通知する。そして、処理はステップS231に移行する。逆に、タイプが「Data」でもなく「Reg」でもないとき、処理は図17のステップS250に移行する。
ステップS231で転送処理部430は、送受信バッファ領域411を参照して、受信されたフレームのGDの値を読み出す。そして、転送処理部430は、読み出したGDの値とノード装置400自身のノードID(「自ノードID」ともいう)が同じか否かを判断する。
2つの値が同じとき、受信されたフレームの最終的な宛先は、ノード装置400自身である。また、本実施形態では、登録要求フレーム670のGDとして指定され得るのは、ゲートウェイ101のみなので、2つの値が同じとき、受信されたフレームはデータフレーム660である。
よって、2つの値が同じとき、転送処理部430は、受信されたデータフレーム660の送受信バッファ領域411における先頭アドレスをデータ処理部431に通知し、データフレーム660を処理するようデータ処理部431に要求する。そして、処理はステップS232に移行する。
逆に、2つの値が異なるときは、転送処理部430は、受信されたフレームを転送するための処理を行う。そこで、処理はステップS233に移行する。
ステップS232でデータ処理部431は、送受信バッファ領域411を参照して、受信されたデータフレーム660のペイロードを読み取り、ペイロードを適宜処理する。その後、データ処理部431は、データフレーム660を送受信バッファ領域411から削除する。
ペイロードの内容は実施形態に応じて任意である。例えば、ペイロードにプログラム418のアップデータが含まれる場合、データ処理部431は、プログラム418をアップデートしてもよい。ステップS232の実行後、処理は図13のステップS209に戻る。
また、ステップS233で転送処理部430は、ステップS231で読み出したGDの値に基づいて、受信されたフレームをどの隣接ノード装置に転送するかを決定する。すなわち、転送処理部430は、GDの値に基づいて、新たにLDフィールドに設定する値を決定する。ステップS233で転送処理部430は、ステップS212と同様に経路情報414を参照してLDを決定する。
そして、転送処理部430は、LDとして決定したノードIDを、受信されて送受信バッファ領域411に格納されているフレームのLDフィールドに上書きする。また、転送処理部430は、受信されて送受信バッファ領域411に格納されているフレームのLSフィールドに、ノード装置400自身のノードIDを上書きする。
また、転送処理部430は、LDとLSの上書きの後、FCSを計算する。そして、転送処理部430は、計算したFCSの値を、受信されて送受信バッファ領域411に格納されているフレームのFCSフィールドに上書きする。
例えば、ノード装置400がノード装置126であり、受信されたフレームが図9のデータフレーム661である場合、ノード装置126の転送処理部430は、ノード装置113のノードID「ID113」を新たなLDの値として決定する。そして、ノード装置126の転送処理部430は、データフレーム661のLDフィールドを「ID113」と上書きし、データフレーム661のLSフィールドを「ID126」と上書きする。
そして、ステップS233におけるLDとLSとFCSの上書きの後、転送処理部430は、チャネル指定部425に、データフレーム660または登録要求フレーム670の送信(具体的には転送のための送信)の準備が完了したことを通知する。また、転送処理部430は、データフレーム660または登録要求フレーム670の送受信バッファ領域411内での先頭アドレスをさらにチャネル指定部425に通知してもよい。
すると、通知を受けたチャネル指定部425は、次のステップS234で、ノード装置400とゲートウェイ101の間のホップ数が1か否かを、ホップ数認識部428を介して認識する。具体的には、ホップ数認識部428が、ステップS213と同様にしてデータフレーム660または登録要求フレーム670のLDの値を読み取る。
そして、LDの値が「ID101」ならば、ホップ数認識部428は、ホップ数が1であることをチャネル指定部425に通知し、処理はステップS235に移行する。逆に、LDの値が「ID101」でなければ、ホップ数認識部428は、ホップ数が2以上であることをチャネル指定部425に通知し、処理はステップS236に移行する。
そして、ステップS235では、チャネル指定部425が送信モード情報412を参照し、送信モード情報412が輻輳モードを示しているか否かを判断する。もし、送信モード情報412が輻輳モードを示していれば、処理はステップS237に移行する。逆に、送信モード情報412が通常モードを示していれば、処理はステップS236に移行する。
ステップS236でチャネル指定部425は、デフォルトチャネルChAを選び、選んだチャネルChAを送信チャネルとして送信機403に指定する。そして、処理はステップS238に移行する。
また、ステップS237でチャネル指定部425は、デフォルトチャネルChA以外のチャネルChB〜ChDの中から、1つのチャネルをランダムに選び、選んだチャネルを送信チャネルとして送信機403に指定する。そして、処理はステップS238に移行する。なお、ステップS236およびS237においても、S215およびS216と同様に、チャネル指定部425はさらにフレームの先頭アドレスを送信機403に通知することもできる。
ステップS238で送信機403は、チャネル指定部425が選んだチャネルを用いて、送受信バッファ領域411に格納されているデータフレーム660または登録要求フレーム670を、スイッチ402とアンテナ401を介して送信する。送信後、送信機403は送受信バッファ領域411からデータフレーム660または登録要求フレーム670を削除する。そして、処理は図13のステップS209に戻る。
ところで、上記のステップS229において、受信されたフレームのLSの値が「ID101」だと判断された場合、ステップS239でタイプ判断部421は、送受信バッファ領域411を参照して、受信されたフレームのタイプを読み取る。そして、タイプ判断部421は、タイプが「Hello」であるか否かを判断する。つまり、タイプ判断部421は、受信されたフレームが広義のハローフレーム610であるか否かを判断する。
タイプが「Hello」のとき、サブタイプによる分類を行うため、処理はステップS241へ移行する。また、タイプが「Hello」以外のとき、処理はステップS240に移行する。
ステップS240は例外処理のステップである。本実施形態において、図8〜9に示したタイプのみが使われる場合、ステップS240では、具体的には、不正なタイプのフレームが受信された場合のエラー処理をCPU405が行う。
しかし、もちろん実施形態によっては、図8〜9に示した以外のタイプのフレームがさらに定義されていてもよい。その場合、CPU405は、タイプ判断部421が判断したフレームのタイプに応じた適宜の処理を、ステップS240において行う。したがって、ステップS240の詳細は実施形態に応じて任意である。ステップS240の実行後、処理は図13のステップS209に戻る。
また、ステップS241でタイプ判断部421は、送受信バッファ領域411を参照して、受信された広義のハローフレーム610のサブタイプを読み取り、サブタイプが「Hello」か否かを判断する。つまり、タイプ判断部421は、受信されたフレームがハローフレーム620であるか否かを判断する。
そして、サブタイプが「Hello」の場合、処理は図17のステップS252に移行する。逆に、サブタイプが「Hello」ではない場合、処理は図16のステップS242に移行する。
ステップS242でタイプ判断部421は、ステップS241で読み取ったサブタイプが「Switch」であるか否かを判断する。つまり、タイプ判断部421は、受信されたフレームが切り換え命令フレーム630であるか否かを判断する。
そして、サブタイプが「Switch」のとき、タイプ判断部421はモード変更部424に対して、切り換え命令フレーム630が受信されたことを通知する。
なお、本実施形態では、具体的には切り換え命令フレーム631のようにサブタイプ以外のペイロードを含まない形式の切り換え命令フレーム630が使われる。そのため、モード変更部424は、受信された切り換え命令フレーム630を参照する必要がない。よって、サブタイプが「Switch」のとき、タイプ判断部421は、受信された切り換え命令フレーム630を送受信バッファ領域411から削除する。そして、処理はステップS246に移行する。
逆に、サブタイプが「Switch」ではない場合、処理はステップS243に移行する。
ステップS243でタイプ判断部421は、ステップS241で読み取ったサブタイプが「Restore」であるか否かを判断する。つまり、タイプ判断部421は、受信されたフレームが復帰命令フレーム640であるか否かを判断する。
そして、サブタイプが「Restore」のとき、タイプ判断部421はモード変更部424に対して、復帰命令フレーム640が受信されたことを通知する。
なお、本実施形態では、具体的には、復帰命令フレーム641のようにサブタイプ以外のペイロードを含まない形式の復帰命令フレーム640が使われる。そのため、モード変更部424は、受信された復帰命令フレーム640を参照する必要がない。よって、サブタイプが「Restore」のとき、タイプ判断部421は、受信された復帰命令フレーム640を送受信バッファ領域411から削除する。そして、処理はステップS244に移行する。
逆に、サブタイプが「Restore」ではない場合、処理はステップS245に移行する。
ステップS244でモード変更部424は、送信モード情報412を、通常モードを示す値に設定する。そして、処理は図13のステップS209に戻る。
なお、ステップS244の処理は、GDとしてゲートウェイ101が指定されたフレームをノード装置400が送信するときの送信経路において、ノード装置400とゲートウェイ101の間のホップ数が1であるか否かによらず実行されても、何ら問題がない。そのため、ステップS244においてモード変更部424は、ホップ数認識部428を介してホップ数を確認することなしに、ステップS244で送信モード情報412を設定する。また、このようにステップS244はどのノード装置400が実行しても問題がないステップであるから、本実施形態では、復帰命令フレーム641のようにサブタイプ以外のパラメタを含まない単純な復帰命令フレーム640が使われる。
さて、ステップS245は例外処理のステップである。本実施形態において、「Hello」というタイプに関して、図8〜9に示したサブタイプのみが使われる場合、ステップS245では、具体的には、不正なサブタイプのフレームが受信された場合のエラー処理をCPU405が行う。
しかし、もちろん実施形態によっては、図8〜9に示した以外のサブタイプのフレームがさらに定義されていてもよい。その場合、CPU405は、タイプ判断部421が判断したフレームのサブタイプに応じた適宜の処理を、ステップS245において行う。したがって、ステップS245の詳細は実施形態に応じて任意である。ステップS245の実行後、処理は図13のステップS209に戻る。
また、ステップS246でモード変更部424は、ホップ数認識部428に対して、ノード装置400とゲートウェイ101との間のホップ数が1であるか否かを問い合せる。すると、ホップ数認識部428は、受信された切り換え命令フレーム630(具体的には切り換え命令フレーム631)のLSの値「ID101」がGDとして設定されているエントリを、経路情報414において検索する。
そして、次のステップS247でホップ数認識部428は、検索の結果見つかった1つまたは複数のエントリの中で、最も評価の高い(つまり最も評価値が小さい)エントリを特定する。
さらに、次のステップS248でホップ数認識部428は、ステップS247で特定したエントリにおいて、GDとLDの値が等しいか否かを判断する。
GDとLDの値が等しければ、ホップ数認識部428は、モード変更部424に対して、ノード装置400とゲートウェイ101の間のホップ数が1であることを通知する。そして、処理はステップS249に移行する。例えば、ノード装置400がノード装置111の場合、ノード装置111のホップ数認識部428は、ホップ数が1であるとモード変更部424に通知し、処理がステップS249に移行する。
他方、GDとLDの値が等しくなければ、ホップ数認識部428は、モード変更部424に対して、ノード装置400とゲートウェイ101の間のホップ数が2以上であることを通知する。すると、モード変更部424は、「送信モード情報412を変更する必要がない」と認識するので、処理は図13のステップS209に戻る。例えば、ノード装置400がノード装置126の場合、ノード装置126のホップ数認識部428は、ホップ数が2以上であるとモード変更部424に通知し、処理がステップS209に戻る。
ステップS249でモード変更部424は、送信モード情報412を、輻輳モードを示す値に設定する。そして、処理は図13のステップS209に戻る。
以上説明した、図16の各ステップの処理により、ゲートウェイ101からのホップ数が2以上のノード装置400(例えばノード装置121〜143)では、送信モード情報412が常に通常モードを示す。つまり、たとえ切り換え命令フレーム630または復帰命令フレーム640が受信されたとしても、ホップ数が2以上のノード装置400では、送信モード情報412が輻輳モードを示すことはない。他方、ゲートウェイ101からのホップ数が1であるノード装置400(例えばノード装置111〜113)では、送信モード情報412は、切り換え命令フレーム630または復帰命令フレーム640の受信のたびに、変化する。
さて、図17のステップS250は、ゲートウェイ101以外の装置から(つまり、ノード装置400自身に隣接する他のノード装置から)、マルチホップ送信の対象外のフレームをノード装置400が受信した場合に実行される。
具体的には、ステップS250でタイプ判断部421は、送受信バッファ領域411を参照して、受信されたフレームのタイプを読み取る。また、タイプが「Hello」であれば、タイプ判断部421はさらにサブタイプを読み取る。
そして、タイプ判断部421は、タイプが「Hello」かつサブタイプが「Hello」という条件が成立するか否かを判断する。つまり、タイプ判断部421は、受信されたフレームがハローフレーム620であるか否かを判断する。
タイプが「Hello」かつサブタイプが「Hello」のとき、処理はステップS252に移行する。逆に、タイプが「Hello」かつサブタイプが「Hello」という条件が成立しない場合、処理はステップS251に移行する。
ステップS251は例外処理のステップである。本実施形態において、図8〜9に示したタイプとサブタイプのみが使われる場合、ステップS251では、具体的には、不正なタイプまたは不正なサブタイプのフレームが受信された場合のエラー処理をCPU405が行う。
しかし、もちろん実施形態によっては、図8〜9に示した以外のタイプまたはサブタイプのフレームがさらに定義されていてもよい。その場合、CPU405は、タイプ判断部421が判断したフレームのタイプとサブタイプに応じた適宜の処理を、ステップS251において行う。したがって、ステップS251の詳細は実施形態に応じて任意である。ステップS251の実行後、処理は図13のステップS209に戻る。
さて、ステップS252が実行されるのは、ノード装置400が、ノード装置400自身に隣接するいずれかの装置(つまり、ゲートウェイ101または他のノード装置)から、ハローフレーム620を受信した場合である。
具体的には、ステップS252でタイプ判断部421は、受信されたハローフレーム620にしたがって必要に応じてリンク情報417を更新するよう、リンク管理部433に要求する。要求に際してタイプ判断部421は、送受信バッファ領域411におけるハローフレーム620の先頭アドレスをリンク管理部433に通知する。
すると、リンク管理部433は、送受信バッファ領域411を参照して、受信されたハローフレーム620のLSの値を読み取る。そして、リンク管理部433は、リンク情報417において、読み取ったLSの値が隣接ノードとして設定されたエントリを検索する。
そして、次のステップS253でリンク管理部433は、ステップS252の検索の結果、エントリが見つかったか否かを判断する。
エントリが見つかった場合とは、隣接ノードとして既知の装置からハローフレーム620が受信された場合のことなので、リンク情報417にさらにエントリを追加する必要はない。したがって、処理はステップS255に移行する。
他方、エントリが見つからなかった場合とは、隣接ノードとしては未知の装置からハローフレーム620が受信された場合のことである。そこで、エントリの追加のため処理はステップS254に移行する。
ステップS254でリンク管理部433は、ステップS252でハローフレーム620から読み取ったLSの値を隣接ノードとして設定した新規エントリを、リンク情報417に追加する。そして、処理はステップS255に移行する。
また、ステップS255でタイプ判断部421は、受信されたハローフレーム620にしたがって必要に応じて経路情報414内のホップ数情報413を更新するよう、ホップ数認識部428に要求する。要求に際してタイプ判断部421は、送受信バッファ領域411におけるハローフレーム620の先頭アドレスをホップ数認識部428に通知する。
すると、ホップ数認識部428は、送受信バッファ領域411を参照して、受信されたハローフレーム620のLSの値を読み取る。そして、ホップ数認識部428は、下記の(I1)と(I2)の条件をともに満たすエントリを、経路情報414において検索する。
(I1)GDが、ゲートウェイ101のノードIDである「ID101」と等しい。つまり、GDが、受信されたハローフレーム620で基準点として指定されているノードIDと等しい。
(I2)LDが、ハローフレーム620から読み取られたLSの値と等しい。
そして、次のステップS256でホップ数認識部428は、ステップS255の検索の結果、エントリが見つかったか否かを判断する。
エントリが見つかった場合とは、GDとしてゲートウェイ101が指定されたフレームをノード装置400が送信するときに、LDとして選択可能な装置からのハローフレーム620が受信された場合である。この場合、受信されたハローフレーム620の送信元(つまりLS)の装置を通る経路における、ノード装置400とゲートウェイ101の間のホップ数の更新のため、処理はステップS257に移行する。
他方、エントリが見つからなかった場合とは、GDとしてゲートウェイ101が指定されたフレームをノード装置400が送信するときに、LDとして選択されない装置からのハローフレーム620が受信された場合である。この場合、本実施形態では、ハローフレーム620の受信は経路情報414内のホップ数情報413に影響を及ぼさない。よって、ホップ数認識部428は送受信バッファ領域411からハローフレーム620を削除し、処理は図13のステップS209に戻る。
ステップS257でホップ数認識部428は、送受信バッファ領域411を参照して、受信されたハローフレーム620からホップ数を読み取る。そして、ホップ数認識部428は、読み取ったホップ数に1を足して得られる値を、ステップS255の検索で見つかったエントリのホップ数として設定する。その後、ホップ数認識部428は送受信バッファ領域411からハローフレーム620を削除し、処理は図13のステップS209に戻る。
以上のようにして、ノード装置400は、ステップS201〜S208の初期化を実行した後、ステップS209〜S257の処理を繰り返し実行する。
なお、図13〜17に示した処理は、ゲートウェイ101からのホップ数が2以上のノード装置400が誤って輻輳モードに遷移するのを防ぐための、二重の対策を含む。すなわち、1つ目の対策は、ステップS213、S220およびS234のような、データフレーム660または登録要求フレーム670の送信時に行われるホップ数のチェックである。2つ目の対策は、ステップS246〜S248のような、切り換え命令フレーム630の受信時に行われるホップ数のチェックである。このように本実施形態において2つの対策が併用される理由は、通信システム100内の経路が時間とともに変動し得るためである。
例えば、図1のノード装置126は、切り換え命令フレーム630や復帰命令フレーム640を受信することができるが、データフレーム660や登録要求フレーム670の送信経路上でのゲートウェイ101からのホップ数は2である。
しかし、経路が安定するまでの過渡的状況下では、ノード装置126がLDとしてノード装置113ではなくゲートウェイ101を選択することもあり得る。すなわち、過渡的状況下では、ノード装置126とゲートウェイ101のホップ数が1ということもあり得る。
あるいは、環境の変動にともない、ノード装置126がノード装置126内の経路情報414(具体的には評価値)を変更し、その結果、ノード装置126とゲートウェイ101の間のホップ数が1になることもあり得る。例えば、ノード装置113とノード装置126の間に遮蔽物が置かれたり、ノード装置113が撤去されたりすると、ノード装置126の経路情報414が変化することがある。
各ノード装置400が経路情報414をどのようにして書き換えるかは、実施形態に応じて任意であるが、ノード装置400は、環境の変動に追従するように、経路情報414の評価値を書き換えることができる。
例えば、ノード装置400は、ハローフレーム620の受信頻度が低い隣接ノード装置のLDとしての評価を低めてもよい(すなわち評価値を大きくしてもよい)。
あるいは、ノード装置400は、データフレーム660の送信が1回で成功する場合には、データフレーム660の送信時に指定したLDの評価を高めてもよい(すなわち評価値を小さくしてもよい)。逆に、データフレーム660の送信時にリトライが生じた場合、ノード装置400は、データフレーム660の送信時に指定したLDの評価を低めてもよい。
また、ノード装置400は、送信したデータフレーム660が通信システム100内をループしてノード装置400に戻ってくることがあるか否かを監視してもよい。そして、データフレーム660が戻ってきた場合、ノード装置400は、データフレーム660の送信時に指定したLDの評価を低めてもよい。フレームを識別するための識別情報を含む形式のフレームを用いることで、上記のような監視が可能である。
いずれにせよ、経路情報414の変化にともない、あるノード装置400とゲートウェイ101の間のホップ数が、時間によって変化することがあり得る。よって、ホップ数が変化してもノード装置400が適切に動作するようにするため、図13〜17に示した処理は、二重の対策を含む。
ところで、本発明は上記実施形態に限られるものではない。例えば、本明細書および図面中に例示した具体的な数値や「Hello」などの具体的な値は、説明の便宜上の例示に過ぎず、実施形態に応じて任意に変更してよい。
また、例えば条件(F1)〜(F3)などに関して、閾値との比較処理の例をいくつか示したが、閾値との比較処理は、実施形態により適宜変更されてよい。つまり、閾値との比較処理は、「比較対象の数値が、閾値を超えるか否か」を判断する処理でもよいし、「比較対象の数値が、閾値以上か否か」を判断する処理でもよい。
それ以外にも、上記実施形態は、例えば下記の観点から様々に変形することもできる。上記または下記の各種変形は、相互に矛盾しない限り、任意に組み合わせることが可能である。
変形の第1の観点は、輻輳判断部328の判断基準に関する。上記実施形態の輻輳判断部328は、条件(F1)〜(F3)のすべてが成立するときに輻輳を検出する。しかし、実施形態によっては、輻輳判断部328は、条件(F1)〜(F3)のうちの1つが成立する場合に「輻輳が生じている」と判断してもよいし、条件(F1)〜(F3)のうちの2つが成立する場合に「輻輳が生じている」と判断してもよい。
輻輳判断部328は、「実際は輻輳が生じているのに輻輳判断部328が輻輳を検出しない」という事態をできるだけ避けるために、条件(F1)〜(F3)のうちの少なくとも1つが成立する場合に「輻輳が生じている」と判断してもよい。あるいは、輻輳判断部328は、「実際は輻輳が生じていないのに輻輳判断部328が輻輳を検出する」という事態をできるだけ避けるために、条件(F1)〜(F3)のすべてが成立する場合にのみ「輻輳が生じている」と判断してもよい。
また、条件(F1)は時刻の差を利用して輻輳を検出するための条件の例だが、輻輳判断部328は、時刻の差を利用する別の条件を、条件(F1)の代わりに用いることもできる。
例えば、輻輳判断部328は、「データ収集スケジュールで定められた時刻から3分以内に、登録ノード装置の80%以上からそれぞれデータフレーム660が収集された」という条件が成立するか否かの判断を、ステップS132の判断の代わりに行ってもよい。
その場合、上記の「3分」という時間差と、「80%」という割合は、システムパラメタ313に定義されているものとする。すると、輻輳判断部328は次のようにして上記条件が成立するか否かを判断することもできる。
輻輳判断部328は、まず、受信時刻取得部325が取得した時刻とデータ収集スケジュールで定められた時刻の差が3分を超えるか否かを判断する。そして、差が3分を超える場合に、輻輳判断部328は、登録ノード情報314のデータ受信時刻フィールドを参照して、データフレーム660が既に受信された登録ノード装置の割合を計算する。もし、計算した割合が80%未満であれば、輻輳判断部328は、上記条件が成立すると判断する。
あるいは、輻輳判断部328は、輻輳の検出に、上記で例示した以外の条件を利用してもよい。例えば、「単位時間あたりに受信されるフレームの量(例えば直近の10秒間あたりに受信されたフレームの量)が、システムパラメタ313に規定される所定の閾値を超えている」という条件が、輻輳を判断するための条件の1つとして利用されてもよい。上記所定の閾値は、例えば物理層プロトコルで規定される帯域幅に基づいて決められてもよい。
また、輻輳判断部328は、輻輳が生じたことを検出する場合と、輻輳からの回復を検出する場合とで、異なる条件を利用してもよい。
例えば、輻輳判断部328は、ステップS136で輻輳フラグ315aをTrueに設定するときに、システムパラメタ313aの臨界誤り率の値から、所定の値を引いてもよい。そして、輻輳判断部328は、ステップS140で、臨界誤り率の値に上記所定の値を足してもよい。
例えば所定の値が「20%」であるとすると、輻輳フラグ315aの値がTrueのときにステップS135が実行される場合には、誤り率が30%(=50%−20%)と比較される。そして、輻輳フラグ315aの値がFalseのときにステップS135が実行される場合には、誤り率が50%と比較される。
輻輳の発生後に複数のチャネルへ負荷が分散されると、負荷分散の結果として、誤り率が次第に低下していくと期待される。よって、上記のような臨界誤り率の書き換えにより、輻輳判断部328は、輻輳の緩和の度合を、誤り率を介して間接的に検出することが可能となる。
また、輻輳フラグ315aがFalseの場合、ステップS122でRSSI計算部323は、デフォルトチャネルChA用の受信機305Aからの出力に基づいてRSSIを計算する。
それに対して、輻輳フラグ315aがTrueの場合は、RSSI計算部323は、ステップS122において、フレームを受信した受信機からの出力に基づいてRSSIを計算してもよい。あるいは、輻輳フラグ315aがTrueの場合は、RSSI計算部323は、ステップS122において、フレームを受信した受信機によらず、受信機305Aからの出力に基づいてデフォルトチャネルChAのRSSIを計算してもよい。
例えば、輻輳フラグ315aがTrueのときに受信機305Bがフレームを受信したとする。この場合、複数のチャネルへの負荷の分散後にチャネルChBが輻輳しているか否かを輻輳判断部328が判断することができるようにするため、RSSI計算部323はチャネルChBのRSSIを計算してもよい。
負荷が分散されてさえもなお輻輳の緩和が不十分なのであれば、負荷がチャネルChAに集中したと仮定した場合にチャネルChAが輻輳することは、ほぼ確実である。よって、輻輳フラグ315aがTrueであり受信機305Bがフレームを受信した場合、RSSI計算部323は、チャネルChBのRSSIを計算してもよい。
あるいは、輻輳フラグ315aがTrueであり受信機305Bがフレームを受信した場合であっても、RSSI計算部323は、受信機305Aからの出力に基づいてデフォルトチャネルChAのRSSIを計算してもよい。それにより、輻輳判断部328は、チャネルChAの通信負荷がまだ高いままなのか否かを判断することができる。
例えば、ノード装置126からノード装置113へチャネルChAを介して送信されるフレームは、ゲートウェイ101でも受信可能である。よって、ノード装置126の送信量が多い場合は、ノード装置126からの送信が輻輳の原因の1つとなり得る。そこで、RSSI計算部323は、輻輳フラグ315aがTrueのとき、実際にフレームが受信されたチャネルによらず、常にデフォルトチャネルChAのRSSIを計算してもよい。
あるいは、輻輳フラグ315aがTrueのときは、RSSI計算部323がすべてのチャネルChA〜ChDのRSSIを計算し、輻輳判断部328がすべてのチャネルChA〜ChDのRSSIに基づく判断を行ってもよい。
変形の第2の観点は、ホップ数認識部428がホップ数を認識する方法に関する。例えば、図8の切り換え命令フレーム632〜634のように、ノードIDがペイロードに含まれる形式の切り換え命令フレーム630が使われる実施形態においては、ホップ数認識部428は、次のようにしてホップ数を認識してもよい。
すなわち、ホップ数認識部428は、送受信バッファ領域411を参照して切り換え命令フレーム630のペイロードを読み出す。そして、ホップ数認識部428は、読み出したペイロードの中に、ノード装置400自身のノードIDが含まれるか否かを判断する。
そして、ホップ数認識部428は、読み出したペイロードの中にノード装置400自身のノードIDが含まれる場合は、ノード装置400とゲートウェイ101の間のホップ数が1であると認識する。逆に、ホップ数認識部428は、読み出したペイロードの中にノード装置400自身のノードIDが含まれない場合は、ホップ数が2以上であると認識する。
ホップ数認識部428は、以上のようにして認識した結果を、モード変更部424やチャネル指定部425に通知することができる。
また、ノード装置400とゲートウェイ101の間のホップ数が1か否かの判断のために、ステップS213、S220、S234では、送信対象のフレームのLDの値が「ID101」であるか否かが判断される。
しかし、実施形態によっては、代わりに、LDの決定の際に選択された経路情報414内のエントリのホップ数の値が1であるか否かによって、ノード装置400とゲートウェイ101の間のホップ数が1か否かが判断されてもよい。経路情報414内のエントリのホップ数は、ステップS252〜S257の実行によって、最新の経路を反映するように更新される。そのため、経路情報414内のエントリのホップ数に基づく判断も可能なのである。
変形の第3の観点は、チャネル指定部425がチャネルを選択しなおす頻度に関する。図13〜17の処理によれば、ゲートウェイ101から1ホップ目のノード装置400では、送信モード情報412が輻輳モードを示すとき、チャネル指定部425は、データフレーム660または登録要求フレーム670の送信のたびにチャネルを選択しなおす。
しかし、実施形態によっては、チャネル指定部425は、登録要求フレーム670に関しては、輻輳モードであっても常にデフォルトチャネルChAを選択してもよい。例えば、通信システム100内のノード装置111〜143それぞれのスケジュール情報415の登録要求スケジュールが時間的に分散している実施形態では、登録要求フレーム670が常にデフォルトチャネルChAで送信されてもよい。
また、ゲートウェイ101から1ホップ目のノード装置400のチャネル指定部425は、送信モード情報412が輻輳モードを示すとき、F個(F≧1)のデータフレーム660の送信ごとに1回、送信チャネルを選択しなおしてもよい。ただし、もちろんFの値は小さいほど好ましく、図13〜17のように、F=1の場合が最も好ましい。
なぜなら、Fの値が大きくなるほど、「ゲートウェイ101から1ホップ目の複数のノード装置400が、偶然、同時に同じチャネルを送信チャネルとして選択している」という状況が発生しやすいからである。つまり、Fの値が大きくなるほど、コリジョンも発生しやすく、輻輳を緩和する効果が小さくなってしまうので、F=1が最も好ましい。
なお、たとえFの値が最小の1の場合であっても、送信チャネルが切り換えられる頻度は、Bluetooth(登録商標)などで採用されている周波数ホッピングの場合より低い。しかしながら、周波数ホッピングを実現するには、予めホッピングパターンを決定するためのネゴシエーションなどの処理が必要である。それに対して、上記実施形態によれば、各ノード装置400のチャネル指定部425が独立に(換言すれば、自律的に)ランダムに送信チャネルを選択するので、ネゴシエーションなどのオーバヘッドは生じない。輻輳発生時にネゴシエーションのための余計な通信が不要である点は、上記実施形態の利点である。
また、セルラ・システムにおいては、端末機(例えば携帯電話など)が、基地局からの指示にしたがって送信チャネルを切り換えることがある。しかし、端末機は自律的に送信チャネルを決定するのではなく、基地局から指定されたチャネルを使う。よって、各ノード装置400のチャネル指定部425が独立に(換言すれば、自律的に)送信チャネルを選択する上記実施形態におけるチャネルの切り換えは、セルラ・システムにおけるチャネルの切り換えとは異なる。
変形の第4の観点は、同期処理の省略に関する。上記実施形態では、輻輳判断部328が図12のステップS132において時刻に基づく判断を行う。したがって、輻輳判断部328が適切に判断を行えるようにするために、通信システム100内で各装置のタイマが示す時刻を同期させるための処理が行われる。
しかし、実施形態によっては、輻輳判断部328は、条件(F2)と(F3)がともに成立する場合を輻輳と判断してもよく、条件(F1)が利用されなくてもよい。そして、条件(F1)が利用されないならば、通信システム100内の各装置のタイマは必ずしも同期していなくてもよいので、同期フレーム650を使った同期処理は省略可能である。
例えば、通信システム100内のノード装置111〜143それぞれのデータ送信スケジュールは異なっていてもよい。その場合、輻輳判断部328は条件(F1)を用いなくてもよい。
なお、データ送信スケジュールが異なる場合、輻輳が生じる蓋然性は低い。しかし、それでも通信システム100内に非常に多くのノード装置400が含まれる場合などには、偶発的に輻輳が生じることもあり得る。そこで、輻輳判断部328は、条件(F2)と(F3)がともに成立する場合を輻輳と判断してもよい。
変形の第5の観点は、登録ノード情報314の更新に関する。上記実施形態では、ゲートウェイ101への登録を要求する登録要求フレーム670が使われる。実施形態によっては、ゲートウェイ101における登録を削除することを要求するためのフレーム(便宜上、「削除要求フレーム」という)がさらに使われてもよい。
例えば、通信システム100に第2のゲートウェイが追加された場合、ノード装置111〜143の一部は、ゲートウェイ101に削除要求フレームを送信し、第2のゲートウェイに登録要求フレーム670を送信してもよい。ゲートウェイ101は、削除要求フレームを受信すると、削除要求フレームのGSのノード装置400に対応するエントリを登録ノード情報314から削除する。
また、上記実施形態では、登録処理部327は、受信機305Aがハローフレーム620を受信した場合にステップS112〜S114で登録ノードテーブル314aの更新を行う。しかし、登録処理部327は、受信機305Aがデータフレーム660または登録要求フレーム670を受信した場合にも、登録ノードテーブル314aの「1ホップ」フィールドを更新してもよい。それにより、登録処理部327は、各ノード装置400までのホップ数に関する最新の情報を登録ノードテーブル314aに反映することができる。
つまり、登録処理部327は、受信されたデータフレーム660または登録要求フレーム670において、GSとLSが等しければ、受信されたフレームのGSと同じノードIDを持つエントリにおける「1ホップ」フィールドをTrueに設定してもよい。逆に、GSとLSが等しくなければ、登録処理部327は、「1ホップ」フィールドをFalseに設定してもよい。
変形の第6の観点は、処理の順序に関する。図10〜17のフローチャートに示した処理の順序は一例である。矛盾が生じない限り、実施形態に応じて、適宜ステップの順序を入れ替えることも可能だし、いくつかの処理を並列化することも可能である。
例えば、図10〜12によれば、ゲートウェイ101は、送信に関する処理をステップS102〜S105で行い、その後で受信を契機とする処理をステップS107〜S140で行う。しかし、ゲートウェイ101は、受信を契機とする処理を先に行ってから、送信に関する処理を行ってもよい。同様に、ノード装置400も、受信を契機とする処理を先に行ってから、送信に関する処理を行ってもよい。
また、ステップS132〜S135の順序も任意に入れ替え可能である。ステップS132〜S135の順序が入れ替えられても、輻輳判断部328は、条件(F1)〜(F3)のすべてが成立するか否かを判断することができる。
変形の第7の観点は、ゲートウェイ101によるフレームの転送に関する。上記実施形態では、ゲートウェイ101はフレームを転送しない。そのため、各ノード装置400は、フレームの送信にあたって、ゲートウェイ101がGDである場合を除き、ゲートウェイ101をLDとして指定することもない。
しかし、もちろん、実施形態によっては、ゲートウェイ101がノード装置400と同様にフレームの転送を行ってもよい。また、ゲートウェイ101自身がいずれかのノード装置400宛のデータフレーム660を生成してもよい。
つまり、ゲートウェイ101のCPU306が、さらに、転送処理部430およびリンク管理部433と同様の処理も行ってもよい。そして、ゲートウェイ101のメモリ307が、経路情報414やリンク情報417と同じ形式の情報をさらに保持してもよく、送信バッファとして使われてもよい。
変形の第8の観点は、フレームの形式に関する。フレームの形式は実施形態に応じて様々であってよい。そして、フレームの形式の変更に合わせて、当然、図10〜17のフローチャートのステップは適宜変更されてよい。
例えば、切り換え命令と復帰命令をそれぞれ表すタイプが定義されていれば、図8〜9の例のようなサブタイプは使われなくてもよい。
そして、図8〜9に例示した以外のタイプまたはサブタイプがさらに定義されていてもよい。また、各種のフレームは、図8〜9に例示したフィールド以外のフィールドをさらに含んでもよい。フィールドの並び順も、実施形態に応じて任意に取り決めることができる。
例えば、上記では詳しい説明を省略したが、ACK信号を伝えるための特別なタイプのフレームとして「ACKフレーム」が使われてもよい。その場合、ACKフレームを返信する対象のフレーム(例えばデータフレーム)とACKフレームとの対応づけのために、フレームを一意に識別するための識別情報のフィールドが、各フレームに含まれていてもよい。
変形の第9の観点は、FCSを用いたチェックに関する。上記実施形態では、輻輳判断部328による判断に用いられる誤り率に関連する、データフレーム660でのFCSエラーについてのみ明示的に説明した。しかし、実施形態に応じて、他のタイプのフレームについてもFCSチェック部324がFCSを用いてエラーの有無を検出してもよい。そして、FCSチェック部324は、すべてのタイプのフレーム全体での誤り率を算出してもよい。
また、FCSを用いたエラー検出処理は、図11のステップS125よりも早い段階で行われてもよい。例えば、受信機305A〜305Dのいずれかからフレームの受信を通知されるとすぐに、FCSチェック部324が、FCSを用いてエラーの有無を検出してもよい。さらに、エラーがない場合にのみ、FCSチェック部324は、上記ACKフレームの返信を送信機303に要求してもよい。逆に、エラーがある場合、FCSチェック部324は、エラーのあるフレームを受信バッファ領域312から削除してもよい。
また、もちろん、各ノード装置400も、受信したフレームのFCSを用いて、受信したフレームにエラーがあるか否かをチェックすることができる。
変形の第10の観点は、FCSチェック部324による誤り率の計算方法に関する。図11〜12では、2つのカウンタを利用する計算方法を例示したが、もちろん、誤り率の計算方法は実施形態に応じて適宜変形可能である。
例えば、FCSチェック部324は、所定個数のフラグを記憶するリングバッファを使って誤り率を計算してもよい。上記「所定個数」の値は任意だが、説明の便宜上、例えば256であるとする。すると、FCSチェック部324は、例えば以下のようにして誤り率を計算することができる。
FCSチェック部324は、FCS誤りを検出した場合は、リングバッファのバッファポインタが指すフラグをTrueに設定し、FCS誤りを検出しなかった場合は、バッファポインタが指すフラグをFalseに設定する。また、フラグに値を設定した後、FCSチェック部324は、バッファポインタをインクリメントする。すると、FCSチェック部324は、値がTrueのフラグの個数を256で割ることにより、直近に受信された256個のフレームでの誤り率を得ることができる。
なお、以上説明した様々な実施形態について概観すれば、下記のとおりである。
図1の通信システム100は、第1の受信部と判断部と制御部と第1の送信部を有する制御装置と、各々が第2の受信部と第2の送信部と認識部とチャネル切り換え部を有する複数のノード装置とを備える無線通信システムの具体例である。
つまり、図1と図2のゲートウェイ101は制御装置の具体例である。また、図1のノード装置111〜143と図3のノード装置400が、上記無線通信システムにおけるノード装置の具体例である。
上記第1の受信部は、複数の無線周波数チャネルから同時に情報を受信することが可能なように構成される。例えば、図2の例では、第1の受信部は、アンテナ301、スイッチ302、分配機304、および受信機305A〜305Dにより実現され、4つのチャネルChA〜ChDから同時に、フレーム形式の情報を受信することが可能である。
上記判断部は、複数の無線周波数チャネルのうちの第1のチャネルが輻輳しているか否かを判断し、例えば図2の例では、輻輳判断部328により実現される。第1のチャネルの具体例は、図2の例ではデフォルトチャネルChAである。
上記制御部は、第1のチャネルが輻輳していると判断部が判断した場合、切り換え命令情報を生成する。制御部は、例えば図2の例では、命令発行部329により実現される。
なお、制御部が生成する切り換え命令情報は、送信チャネルを第1のチャネルから別のチャネルに切り換えることを、複数のノード装置のうち少なくとも一部に対して命令するための情報である。また、「複数のノード装置のうち少なくとも一部」とは、具体的には、複数のノード装置のうちで制御装置からのホップ数が1のもののことである。そして、切り換え命令情報の具体例は、図8の切り換え命令フレーム630〜634である。
上記第1の送信部は、切り換え命令情報を送信する。第1の送信部は、例えば図2の例では、送信機303とスイッチ302とアンテナ301により実現される。
また、上記第2の受信部は、制御装置または他のノード装置から前記第1のチャネルを介して情報を受信する。例えば、図3の例では、第2の受信部は、アンテナ401、スイッチ402および受信機404により実現され、フレーム形式の情報をデフォルトチャネルChAを介して受信する。
上記第2の送信部は、複数の無線周波数チャネルのうち送信チャネルとして指定されるチャネルを介して制御装置宛の情報を送信する。例えば、図3の例では、第2の送信部は、送信機403とスイッチ402とアンテナ401により実現される。そして、図3の例では、第2の送信部は、チャネルChA〜ChDのうちでチャネル指定部425から送信チャネルとして指定されるチャネルを介して、ゲートウェイ101宛の(つまりGDとして「ID101」が指定された)フレーム形式の情報を送信する。
上記認識部は、制御装置からのホップ数が1か否かを認識する。認識部は、例えば、図3の例では、ホップ数認識部428により実現される。
上記チャネル切り換え部は、第1の場合には、第1のチャネル以外の第2のチャネルを選んで第2のチャネルを送信チャネルとして第2の送信部に指定し、第1の場合以外の第2の場合には、第1のチャネルを送信チャネルとして第2の送信部に指定する。なおここで、「第1の場合」とは、第2の受信部が切り換え命令情報を制御装置から受信し、かつ、ホップ数は1であると認識部が認識した場合である。
例えば、図3の例では、チャネル切り換え部は、モード変更部424とチャネル指定部425を含むチャネル切り換え部423により実現される。また、第1の場合と第2の場合の弁別のために、送信モード情報412が参照されるとともに、送信されるフレームのLDが参照される。
なお、判断部は、複数のノード装置から制御装置への情報の送信についての予め決められたスケジュールと、複数のノード装置から制御装置へ情報が実際に送信された時刻との差を利用して、第1のチャネルが輻輳しているか否かを判断してもよい。そのような判断の具体例は、ステップS132である。
あるいは、判断部は、複数のノード装置のうち、制御装置へ情報を送信することを制御装置に登録したノード装置の数を利用して、第1のチャネルが輻輳しているか否かを判断してもよい。そのような判断の具体例は、ステップS133である。
あるいは、判断部は、制御装置における受信電力と、複数のノード装置から制御装置へ送信される情報の誤り率との組み合わせを利用して、第1のチャネルが輻輳しているか否かを判断してもよい。そのような判断の具体例は、ステップS134〜S135である。
また、第1の場合において、チャネル切り換え部は、第2の送信部からの送信のたびに、複数の無線周波数チャネルのうちの1つを、新たに第2のチャネルとして選びなおしてもよい。送信のたびに第2のチャネルを選びなおす処理の具体例の1つは、登録要求フレーム670の送信のためのS212〜S217である。別の例は、データフレーム660の送信のためのステップS219〜S224である。さらに別の例は、データフレーム660または登録要求フレーム670の送信のためのステップS233〜238である。
また、チャネル切り換え部は、ステップS216、S223、およびS237のように、ランダムに第2のチャネルを選びなおしてもよい。
または、チャネル切り換え部は、ラウンドロビンアルゴリズムにしたがって第2のチャネルを選びなおしてもよい。
なお、チャネル切り換え部は、ラウンドロビンアルゴリズムにおける開始ポイントのチャネルを、ランダムに決めることが好ましい。または、制御装置が、ノード装置ごとに異なるチャネルを開始ポイントとして切り換え命令情報中で指定してもよい。どちらの場合でも、複数のノード装置それぞれのチャネル切り換え部が、偶然同時に同じチャネルを第2のチャネルとして選択する蓋然性が低く抑えられる。すなわち、開始ポイントの分散化は、コリジョンの発生を抑制するので、輻輳の緩和に有効である。
あるいは、チャネル切り換え部は、複数の無線周波数チャネルそれぞれの使用状況にしたがって、第2のチャネルを選びなおしてもよい。例えば、チャネル切り換え部は、第2のチャネルを選びなおす際に、干渉検出部422に複数の無線周波数チャネルそれぞれの使用状況を問い合わせてもよい。
例えば、干渉検出部422が「チャネルChBは使用されているがチャネルChCとChDは使用されていない」と検出した場合は、チャネル切り換え部は、第2のチャネルを、チャネルChCとChDの中から選んでもよい。すなわち、チャネル切り換え部は、使用されている(換言すれば、受信電力の大きい)チャネルChBを、第2のチャネルの候補から除外してもよい。
または、干渉検出部422が検出したチャネルChB〜ChDそれぞれの受信電力に応じて、受信電力が大きいチャネルほど第2のチャネルとして選ばれる頻度が低くなるような重み付けを行って、チャネル切り換え部が第2のチャネルを選ぶこともできる。
また、切り換え命令情報が、例えば切り換え命令フレーム634のように、第2のチャネルを指定するチャネル指定情報を含んでもよい。すると、チャネル切り換え部は、チャネル指定情報にしたがって第2のチャネルを選ぶこともできる。例えば、切り換え命令フレーム634を受信したノード装置111のチャネル指定部425は、ステップS216、S223、およびS237において、ランダムにチャネルを選ぶ代わりに、チャネル指定情報で指定されたチャネルChBを選んでもよい。
あるいは、切り換え命令情報が、例えば切り換え命令フレーム633のように、複数の無線周波数チャネルのうちで第2のチャネルの候補からは除外される禁止チャネルを指定する禁止情報を含んでもよい。切り換え命令フレーム633における禁止チャネルはチャネルChCである。すると、チャネル切り換え部は、禁止情報にしたがって、禁止チャネル以外のチャネルを第2のチャネルとして選ぶことができる。
例えば、ゲートウェイ101は、輻輳判断部328が輻輳を検出したとき、チャネルChB〜ChDの受信電力を監視してもよい。監視は、例えばRSSI計算部323により行われてもよい。そして、例えばチャネルChCの受信電力が所定の閾値以上の場合は、チャネルChCを禁止チャネルとして指定する切り換え命令フレーム633を、命令発行部329が生成してもよい。
また、判断部は、第1のチャネルが輻輳しているか否かの判断を繰り返し行ってもよい。そして、第1のチャネルが輻輳していると判断部が一旦判断した後に行う新たな判断において、輻輳が解消したと判断部が判断した場合に、制御部は、送信チャネルを第1のチャネル戻すことを命令する復帰命令情報を生成してもよい。復帰命令情報も、第1の送信部により送信される。
なお、図10〜12の例では、データフレーム660の受信のたびに輻輳判断部328による判断が行われるが、輻輳判断部328による判断の頻度は、実施形態に応じて異なっていてもよい。例えば、輻輳判断部328は、送信および受信に関する処理とは独立して、定期的に輻輳の検出のための処理を繰り返し行ってもよい。
また、チャネル切り換え部は、第2の受信部が復帰命令情報を受信した場合、第2の送信部に対して指定する送信チャネルを、第1のチャネル(すなわちデフォルトチャネル)に戻してもよい。復帰命令情報の具体例は、図9の復帰命令フレーム640〜641である。
また、制御装置は、第1の受信部が受信した情報を用いて、制御装置からのホップ数が1である1台以上のノード装置を認識し、認識した1台以上のノード装置を登録する登録処理部をさらに備えてもよい。
例えば、図3の登録処理部327は、受信されたハローフレーム620を用いて、ステップS113で、ゲートウェイ101からのホップ数が1のノード装置400を登録する。あるいは、登録処理部327は、データフレーム660または登録要求フレーム670が受信された場合に、受信されたフレームのGSとLSが等しいか否かを判断してもよい。そして、GSとLSが等しい場合は、受信されたフレームの送信元のノード装置400を、「ゲートウェイ101からのホップ数が1のノード装置」として登録してもよい。
そして、制御装置からのホップ数が1である1台以上のノード装置が上記のように登録されている場合、制御部は、切り換え命令情報に、登録処理部が登録した1台以上のノード装置をそれぞれ識別する識別情報を含めることができる。例えば、切り換え命令フレーム632〜634には、ゲートウェイ101からのホップ数が1のノード装置400として登録されたノード装置111〜113を識別する識別情報としてのノードIDが含まれる。
切り換え命令情報に識別情報が含まれる場合、認識部は、制御装置からのホップ数が1か否かを、次のようにして、第2の受信部が切り換え命令情報を受信したときに認識してもよい。すなわち、認識部は、「認識部自体を備えるノード装置が、切り換え命令情報に含まれる識別情報により識別されるならば、当該ノード装置は制御装置からのホップ数が1である」と認識してもよい。
例えば、ホップ数認識部428は、切り換え命令フレーム632〜634のようにノードIDを含む切り換え命令フレーム630が受信された場合に、ノード装置400自身のノードIDが切り換え命令フレーム630に含まれるか否かを判断してもよい。ホップ数認識部428は、「ノード装置400自身のノードIDが切り換え命令フレーム630に含まれるならば、ホップ数が1であり、含まれないならば、ホップ数は2以上である」と認識することができる。