図1は、実施形態にかかる通信方法の例を示すシーケンス図である。図1に示す例では、アドホックネットワークには、ノード装置10と中継装置50が含まれている。中継装置50は、アドホックネットワーク中のゲートウェイとして動作し、ノード装置10から受信したデータをサーバに送信する。なお、図1のシーケンス図では、アドホックネットワーク中の2台のノード装置10(10a、10b)と2台の中継装置50(50a、50b)の動作を例として示しているが、アドホックネットワークに含まれるノード装置10と中継装置50の数は任意である。
(1)ノード装置10aは、ノード装置10aが保持している経路情報を用いて、ノード装置10aが中継装置50aに隣接していることを特定する。以下の説明では、複数のノード装置が互いにフレームを送受信できる距離に位置することを「隣接する」と記載する。また、あるノード装置から送信されたフレームを受信できる範囲に位置するノード装置のことを、そのノード装置の「隣接ノード」と記載することがある。
(2)ノード装置10bは、測定や計算によりサーバに報告するデータBを得たとする。ここで、ノード装置10bは、ノード装置10aを介して、中継装置50aに、サーバ向けのデータを含むフレームを送信できるという経路情報を保持しているとする。ノード装置10bは、経路情報に従って、データBを含むフレームをノード装置10aに送信する。
(3)ノード装置10aは、ノード装置10bから中継装置50a宛のデータフレームを受信すると、データフレームに含まれているデータを、そのデータフレームのグローバル送信元(Global Source、GS)アドレスと対応付けて記憶する。以下の説明では、「グローバル送信元」は、フレームを生成したノード装置10を示す。図1の例では、ノード装置10aは、ノード装置10bのアドレスとデータBを対応付けて記憶する。
(4)ノード装置10aは、ノード装置10bから受信したデータフレームを中継装置50aに転送する。
(5)中継装置50aは、ノード装置10aから受信したデータを含むサーバ宛のフレームを生成する。中継装置50aは、生成したフレームをサーバに送信する。ここで、中継装置50aとサーバの間ではフレームの送信ができない状態になっているため、サーバは中継装置50aからフレームを受信できなかったものとする。
(6)中継装置50aは、ノード装置10aから受信したデータを含むフレームを、サーバに再送する。フレームの再送回数が予め決められた値に達すると、中継装置50aは、ノード装置10から受信したデータを破棄する。このため、データBが破棄される。
(7)ノード装置10aは、データBを含むデータフレームを中継装置50aに送信してから、一定の時間以内にサーバへの送信に成功したことが確認できない場合、中継装置50aを経由してサーバにデータを送信できないと判定する。
(8)ノード装置10aは、データBを含むフレームを生成し、生成したフレームを中継装置50bに送信する。
(9)中継装置50bは、ノード装置10aから受信したフレームに含まれているデータを含むサーバ宛のフレームを生成し、サーバに送信する。
このように、中継装置50に隣接しているノード装置10は、他のノード装置10から受信したデータを保持する。さらに、ノード装置10は、データの送信先とした中継装置50がサーバへのフレームの送信に失敗したと判定すると、データの送信先の中継装置50とは別の中継装置50に向けてデータを送信しなおす。このため、中継装置50とサーバの間での通信の失敗により、ノード装置10で得られたデータがサーバに送信されずに破棄されることを防止できる。また、本実施形態では、中継装置50aからサーバにデータが送信できなかった場合は、中継装置50aに隣接するノード装置10がデータを再送するので、中継装置50aの隣接ノード装置以外はデータを再送信しなくても良い。従って、中継装置50とサーバの間での通信の不具合により、アドホックネットワーク中の各ノード装置10がデータを再取得して送りなおすという事態を避けることもできる。
<システム構成と装置構成>
以下、アドホックネットワーク中の各ノード装置10がメーターから検針データを回収し、中継装置50を介してサーバに検針データを通知するシステム(検針システム)で行われる通信を例として、詳しく説明する。また、検針システム中では、中継装置50は、アドホックネットワーク5のゲートウェイとして動作するものとする。
図2は、検針システムの例を示す。検針システム中のアドホックネットワーク5は、ノード装置10(10a〜10k、10m)と中継装置50(50a〜50c)を含む。以下の例では、アドホックネットワーク5中では無線通信が行われ、中継装置50とサーバ90との間では有線通信が行われるものとする。図2に示すように、アドホックネットワーク5は、ルータ95を介してサーバ90に接続されても良い。また、アドホックネットワーク5は、サーバ90に直接接続されても良く、ハブを介してサーバ90に接続されてもよいものとする。
各ノード装置10と各中継装置50は、各々の装置に隣接する装置との間でHelloフレームを送受信することにより、経路情報を送受信する。Helloフレームについては後述する。各ノード装置10は、経路情報を用いて、中継装置50宛てにデータを送信するためのローカル宛先(Local Destination、LD)を特定する。「ローカル宛先」は、フレームを最終的な宛先に送信するために行われる1ホップの転送の際に、宛先として指定されるノード装置10または中継装置50を示す。以下、フレームの最終的な宛先のことを、「グローバル宛先」(Global Destination、GD)と記載することがある。さらに、フレームが1ホップ転送される場合の転送元のノード装置10を「ローカル送信元」(Local Source、LS)と記載する。
図2に記載されている破線の矢印は、各ノード装置がサーバ90に送信する対象である対象データを含むデータフレームを送信するときのローカル宛先の例を示す。以下、対象データがメーターの検針結果(検針データ)である場合を例として説明する。例えば、ノード装置10cで取得された検針データを含むフレームは、ノード装置10bに転送される。ノード装置10bはノード装置10cで得られた検針データを含むフレームをノード装置10aに転送する。ノード装置10aは、ノード装置10bから受信したデータフレーム中の検針データを、ノード装置10cと対応付けて記憶した上で、中継装置50aに転送する。他のノード装置10も同様に検針データを含むフレームを送信する。さらに、中継装置50a〜50cに隣接するノード装置10は、他のノード装置10から受信したデータと、そのノード装置10で得られたデータを記憶することができる。このため、図2の例では、ノード装置10aは、ノード装置10a〜10dで得られた検針データを、そのデータが得られたノード装置10の識別子と対応付けて保持する。同様に、ノード装置10eは、ノード装置10e〜10hで得られた検針データを、そのデータが得られたノード装置10の識別子に対応付けて保持する。また、同様に、ノード装置10iは、ノード装置10iとノード装置10jで得られたデータを保持し、ノード装置10kはノード装置10kとノード装置10mでの検針データを保持する。
図3は、ノード装置10の構成の例を示す。ノード装置10は、アドホックエンジン20とアプリケーション処理部30を備える。アドホックエンジン20は、受信部21、送信部22、Helloフレーム生成部23、経路情報処理部24、ルーティングテーブル25、中継装置テーブル26、判定部27、決定部28、フレーム処理部29を備える。アプリケーション処理部30は、データ取得部31、格納処理部32、圧縮処理部33、および、記憶部40を備える。
受信部21は、隣接するノード装置10または中継装置50からフレームを受信し、受信したフレームをそのフレームの種類に応じた出力先に出力する。例えば、受信部21は、Helloフレームを経路情報処理部24に出力し、データフレームをフレーム処理部29に出力する。送信部22は、隣接するノード装置10または中継装置50にフレームを送信する。送信部22は、Helloフレーム生成部23からHelloフレームを取得し、データフレームをフレーム処理部29から取得する。
Helloフレーム生成部23は、Helloフレームを生成する。Helloフレームの生成は、予め設定された周期で行われるものとする。Helloフレーム生成部23は、生成したHelloフレームを送信部22に出力する。経路情報処理部24は、他の装置から送信されてきたHelloフレームが受信部21から入力されると、Helloフレームに含まれている経路情報を取得して、ルーティングテーブル25を生成する。
図4(a)にルーティングテーブル25の例を示す。ルーティングテーブル25は、1つのグローバル宛先に対して、1つ以上の任意の数のローカル宛先を記録することができる。例えば、図4(a)の例では、ルーティングテーブル25は、1つのグローバル宛先に対して、3つ以下のローカル宛先を対応付けて記憶することができる。ルーティングテーブル25は、経路の品質を示す評価値を、経路ごとに含む。なお、ルーティングテーブル25は、評価値の他にも、例えば、ホップ数や受信電波強度などの経路の品質を表す情報を、グローバル宛先とローカル宛先の組合せごとに記録することができる。経路の品質を現す情報としてルーティングテーブル25に含まれる情報の数や種類、1つのグローバル宛先に対応付けられるローカル宛先の数は、実装に応じて変更され得る。なお、図4(a)の例では、ルーティングテーブル25の各経路に割り当てられている番号の最初の数字はグローバル宛先に対応し、ハイフンの後の数字は、同じグローバル宛先への経路のうちでの優先度に対応するものとする。例えば、3−1から3−3までの3つの経路は、いずれもグローバル宛先アドレスがGW1である中継装置50aまでの経路であるが、優先度は3−1>3−2>3−3の順である。なお、優先度が大きな経路ほど、評価値の値が小さく、経路の状況が良好である。例えば、3−1から3−3までの3つの経路では、評価値の値はv31<v32<v33の順に大きくなる。なお、1つのグローバル宛先に対して得られたローカル宛先の数が1つのグローバル宛先に対応付けることができるローカル宛先の数より多い場合、経路情報処理部24は、状況の良好な経路を優先的にルーティングテーブル25に記録する。例えば、図4(a)のルーティングテーブル25を生成する経路情報処理部24は、ある1つのグローバル宛先について4つ以上の転送先が発見された場合、評価値が小さい順に3つの転送先を選択してルーティングテーブル25に記録する。
さらに、経路情報処理部24は、アドホックネットワーク5中の中継装置50までの経路を、中継装置テーブル26に記録する。図5(a)に、中継装置テーブル26の例を示す。図5(a)の例では、中継装置テーブル26は、各中継装置50について、MAC(Media Access Control)アドレス、評価値、優先度、通信可否情報を含む。ここで、評価値は、中継装置50までの経路のうちで比較的良好な経路の評価値である。優先度は、サーバ90宛のフレームの中継先としての選択されやすさの順序を示し、優先度の値が小さいほど、サーバ90への中継先として選択されやすいことを意味する。中継装置テーブル26の使用方法や生成方法の具体例については、後述する。
判定部27は、ノード装置10が、検針データを含むフレームの送信先となる中継装置50に隣接しているかを判定する。フレームの送信先の中継装置50に隣接していると判定されたノード装置10では、決定部28、格納処理部32、圧縮処理部33による処理が行われる。判定方法の詳細については後述する。
決定部28は、検針データを含むフレームの宛先となっている中継装置50がサーバ90にフレームを送信できなくなると、サーバ90宛の検針データを含むフレームのグローバル宛先とする中継装置50を決定する。例えば、中継装置50aからサーバ90へのフレームの送信ができない場合、決定部28は、アドホックネットワーク5に含まれている中継装置50a以外の中継装置50から、検針データを含むフレームのグローバル宛先とする中継装置50を決定する。中継装置50を経由してサーバ宛のデータを送信できないと判定される場合は、例えば、ノード装置10が中継装置50から通信の失敗を通知された場合や、ノード装置10が所定の期間以上、中継装置50からHelloフレームを受信できない場合などである。決定部28の動作についても後で詳しく説明する。
フレーム処理部29は、受信部21から入力されたフレームの転送処理を行う。さらに、フレーム処理部29は、データ取得部31、格納処理部32、または圧縮処理部33から入力されたデータを用いてデータフレームを生成する。
データ取得部31は、サーバ90に送信するためのデータをセンサやメーター(図示せず)などから取得し、フレーム処理部29に出力する。さらに、データ取得部31は、取得したデータを記憶部40に格納することもできる。
格納処理部32は、他のノード装置10から転送されてきた中継装置50宛のデータフレームに含まれているデータを記憶部40に格納する。格納処理部32は、データフレームから取得した検針データを、サーバ90に向けて送信する可能性がなくなったと判定するまで記憶部40に格納する。あるデータをサーバ90に向けて送信する可能性がないと判定される場合は、例えば、そのデータについてのサーバ90への送信の成功が通知された場合や、そのデータが更新された場合などである。さらに、格納処理部32は、検針データを含むフレームのグローバル宛先に設定する中継装置50が変更された場合、新たにグローバル宛先とする中継装置50に送信するデータをデータ41から選択し、圧縮処理部33に出力する。なお、格納処理部32は、検針データを含むフレームの送信先の中継装置50に隣接していると判定されたノード装置10中で動作する。
圧縮処理部33は、データフレーム中に含めるデータを圧縮してフレーム処理部29に出力する。なお、圧縮処理部33はオプションであり、ノード装置10は、圧縮処理部33を備えなくても良い。この場合、格納処理部32は、選択したデータをフレーム処理部29に出力する。記憶部40は、データ取得部31が取得したデータや格納処理部32が選択したデータを、データ41として格納する。また、データ41には、アプリケーション処理部30やアドホックエンジン20で使用されるデータが含まれても良い。
図6は、中継装置50の構成の例を示す。中継装置50は、送受信部51、アドホックエンジン60、アプリケーション処理部70を備える。アドホックエンジン60は、受信部61、送信部62、通知フレーム生成部63、Helloフレーム生成部23、経路情報処理部24、ルーティングテーブル25を有する。アプリケーション処理部70は、フレーム処理部71、データ集約部72、通知生成部73、記憶部80を有する。
送受信部51は、サーバ90と中継装置50との間でフレームを送受信するための処理を行う。送受信部51は、検針データを含むフレームをサーバ90に送信する。送受信部51は、サーバ90との通信の成功や失敗を検出すると、受信した通知を通知生成部73に出力する。
アドホックエンジン60はアドホックネットワーク5内での通信に使用される。Helloフレーム生成部23、経路情報処理部24、ルーティングテーブル25は、ノード装置10と同様である。受信部61は、隣接するノード装置10から受信したデータフレームをフレーム処理部71に出力する。
フレーム処理部71は、データフレーム中のデータをデータ81として記憶部80に保持できる。データ集約部72は、データ81として保持しているデータを集約することにより、サーバ90に送信するためのデータを含むフレームを生成し、送受信部51に出力する。通知生成部73は、中継装置50とサーバ90との間の通信の結果を隣接するノード装置10に通知するためのデータを生成する。通知生成部73は、生成したデータを通知フレーム生成部63に出力する。通知フレーム生成部63は、通知生成部73から取得したデータをペイロードに含む通知フレームを生成する。通知フレームには、通信成功通知と通信失敗通知が含まれる。通信成功通知は、アドホックヘッダと送信の成功を示すデータを含むフレームである。同様に、通信失敗通知は、アドホックヘッダと送信の失敗を示すデータを含むフレームである。通知フレーム生成部63は、生成したフレームを送信部62に出力する。送信部62は、入力されたフレームを宛先のノード装置10に向けて送信する。
図7は、ノード装置10および中継装置50のハードウェア構成の例を示す図である。ノード装置10と中継装置50は、プロセッサ100、バス101(101a〜101c)、タイマIC104、Dynamic Random access Memory(DRAM)106、フラッシュメモリ107、無線モジュール108を備える。中継装置50は、さらにPHYsical layer(PHY)チップ102を含む。また、ノード装置10も、オプションとして、PHYチップ102を含むことができる。バス101a〜101cは、プロセッサ100、PHYチップ102、タイマIC104、DRAM106、フラッシュメモリ107、無線モジュール108の間でデータの入出力が可能になるように接続する。
プロセッサ100は、MicroProcessing Unit(MPU)などの任意の処理回路である。プロセッサ100は、フラッシュメモリ107に格納されたファームウェアなどのプログラムを読み込んで処理を行う。このとき、プロセッサ100は、DRAM106をワーキングメモリとして使用できる。ノード装置10において、プロセッサ100は、Helloフレーム生成部23、経路情報処理部24、判定部27、決定部28、フレーム処理部29、データ取得部31、格納処理部32、圧縮処理部33として動作する。一方、中継装置50において、プロセッサ100は、Helloフレーム生成部23、経路情報処理部24、通知フレーム生成部63、フレーム処理部71、データ集約部72、通知生成部73として動作する。ノード装置10において、DRAM106は、記憶部40として動作し、さらに、ルーティングテーブル25と中継装置テーブル26を保持する。中継装置50において、DRAM106は、記憶部80として動作し、ルーティングテーブル25を保持する。ノード装置10において、無線モジュール108は、受信部21および送信部22として動作する。中継装置50では、無線モジュール108は、受信部61と送信部62として動作する。PHYチップ102は、中継装置50において、送受信部51として動作する。中継装置50は、PHYチップ102を介して回線による通信を行うことができる。
タイマIC104は、Helloフレーム生成部23がHelloフレームを生成する間隔の計測や、隣接するノード装置10または中継装置50からHelloフレームを受信した間隔を計測するときに用いられる。さらに、格納処理部32において通信結果通知を受信するまでの時間のカウントにも用いられる。つまり、タイマIC104は、Helloフレーム生成部23、経路情報処理部24、格納処理部32などの一部として動作する。
なお、ファームウェアなどのプログラムは、コンピュータ読み取り可能な記憶媒体に格納されて提供され、ノード装置10や中継装置50にインストールされてもよい。または、プログラムは、ネットワークからPHYチップ102や無線モジュール108を介してダウンロードされることによりノード装置10や中継装置50にインストールされてもよい。また、実施形態に応じて、DRAM106やフラッシュメモリ107以外の他の種類の記憶装置が利用されることがある。また、ノード装置10や中継装置50は、コンピュータによって実現されても良い。
<第1の実施形態>
以下、第1の実施形態に係る通信方法を中継装置50までの経路取得、中継装置50に隣接しているかの判定、データフレームの生成、検針データを含むフレームの転送処理に分けて説明する。以下の説明では、処理を行っているノード装置10や中継装置50を識別しやすくするために、参照番号の末尾に動作を行っているノード装置10または中継装置50の番号に含まれるアルファベットと同じアルファベットを記載することがある。例えば、ノード装置10bに含まれているデータ取得部31のことを、「データ取得部31b」と記載することがある。
(A)中継装置50までの経路の取得
アドホックネットワーク5を形成する個々のノード装置10や中継装置50は、電源が投入されると、Helloフレームを生成し、隣接する装置にHelloフレームをブロードキャストする。
図8にHelloフレームの構成の例を示す。Helloフレームは、アドホックヘッダとペイロードを含む。ペイロードは、HelloメッセージヘッダとHelloヘッダを含む。図8の例では、アドホックヘッダは、ローカル宛先アドレス、ローカル送信元アドレス、グローバル宛先アドレス、グローバル送信元アドレス、タイプ、ゲートウェイ(GW)フラグを含む。Helloフレームでは、ローカル宛先アドレスとグローバル宛先アドレスは、いずれも全ての隣接ノードを表すブロードキャストアドレスである。また、Helloフレームのローカル送信元アドレスとグローバル送信元アドレスは、いずれも、Helloフレームを生成したノード装置10に割り当てられたアドレスである。
タイプはフレームの種類を一意に特定できる値である。Helloフレームでは、タイプ=0であるものとする。ゲートウェイフラグは、Helloフレームの送信元がアドホックネットワーク5のゲートウェイとして動作しているかを特定するために使用される。GWフラグ=1は、Helloフレームの送信元がゲートウェイとして動作していることを示し、GWフラグ=0は、Helloフレームの送信元がゲートウェイとして動作していないことを示すものとする。すなわち、中継装置50に関するGWフラグの値は1に設定され、ノード装置10に関するGWフラグの値は0に設定される。
Helloメッセージヘッダには、Helloヘッダ数が含まれる。Helloヘッダ数は、Helloフレームの送信元のノード装置10がルーティングテーブル25に記憶しているグローバル宛先の数と同数である。Helloヘッダには、グローバル宛先アドレス、ホップ数、ゲートウェイフラグ、経路品質重み、復路リンク重みが含まれる。ホップ数は、Helloフレームの送信元からHelloヘッダ中のグローバル宛先までのホップ数を記録する。Helloヘッダ中のゲートウェイフラグは、Helloヘッダ中のグローバル宛先に指定された装置がゲートウェイとして動作しているかを特定するために使用される。グローバル宛先が中継装置50であるHelloヘッダ中では、ゲートウェイフラグは1に設定されている。経路品質重みは、経路に含まれている全リンクの通信実績値の和であり、経路の通信品質の計算に用いられる。復路リンク重みフィールドは、Helloヘッダのグローバル宛先がHelloフレームの送信元の隣接ノードである場合に用いられる。復路リンク重みフィールドは、Helloヘッダのグローバル宛先のノードからHelloフレームの送信元が受信したHelloフレームの受信品質を表す。
以下、図2のアドホックネットワーク5において、ノード装置10aの処理を例としてルーティングテーブル25と中継装置テーブル26の生成方法について説明する。
(A1)ノード装置10bに電源が投入されると、Helloフレーム生成部23bは、グローバル送信元とローカル送信元をノード装置10bに設定したHelloフレームを生成する。このとき、ノード装置10bは、他のノード装置10や中継装置50への経路を保持していないので、HelloフレームにはHelloヘッダが含まれない。ノード装置10bは、Helloフレームを1ホップのブロードキャストで送信する。
(A2)ノード装置10aの受信部21aは、ノード装置10bから受信したフレームのタイプが0に設定されているので、受信したフレームを経路情報処理部24aに出力する。経路情報処理部24aは、Helloフレームの送信元をグローバル宛先とグローバル宛先に対応するローカル宛先の両方に登録することにより、Helloフレームの送信元への経路をルーティングテーブル25aに記録する。さらに、経路情報処理部24aは、評価値を計算する。評価値は、Helloフレームの送信元との間のリンクの状況と、経路品質重みに基づいて計算される値であり、経路の通信品質を表す。例えば、評価値は、ホップ数、電波強度、送信の成功回数などの通信の状況を表す値の1つ以上の関数である。例えば、評価値が小さいほど経路の通信状態が良好であることを示すように、評価値が計算される。この場合、ホップ数が小さいほど評価値は小さくなり、電波強度や送信成功回数が大きいほど評価値は小さくなる。ここでは、経路情報処理部24aは、図4(b)のNo.1−1に示す情報をルーティングテーブル25aに記録したものとする。なお、以下の記載では、文字列Addの後にそのノード装置10の符号を続けて記載することにより、ノード装置10に割り当てられたアドレスを示すものとする。例えば、ノード装置10bのアドレスはAdd10bである。
(A3)ノード装置10bの全ての隣接ノードでも、同様に、ルーティングテーブル25が更新される。以下の説明では、ノード装置10dはノード装置10bの隣接ノードであるとする。
(A4)次に、ノード装置10dがHelloフレームを送信したとする。ノード装置10dのHelloフレーム生成部23dは、ルーティングテーブル25dを用いて、ノード装置10dからノード装置10bに至る経路の情報を、Helloフレームに含める。従って、以下のような経路情報を含むHelloフレームがノード装置10dからブロードキャストされる。
LSおよびGS : Add10d
LDおよびGD : ブロードキャストアドレス
タイプ : 0
GWフラグ : 0
Helloヘッダ数 : 1
Helloヘッダ中のGD : Add10b
ホップ数 : 1
Helloヘッダ中のGWフラグ: 0
経路品質重み : d1
復路リンク重み : d2
(A4)ノード装置10aの受信部21aは、ノード装置10dから受信したHelloフレームを、経路情報処理部24aに出力する。経路情報処理部24aは、手順(A2)と同様にアドホックヘッダの情報を処理することにより、図4(b)のNo.2−1に示す情報をルーティングテーブル25aに記録する。
さらに、経路情報処理部24aは、Helloヘッダ中の情報をルーティングテーブル25aに登録する。このとき、経路情報処理部24aは、Helloフレームのローカル送信元アドレスを、Helloヘッダ中のグローバル宛先アドレスに対応付けられたローカル宛先アドレス(LD)とする。ノード装置10dから受信したHelloフレーム中のHelloヘッダを用いて、経路情報処理部24aは、図4(b)のNo.1−2に示す情報をルーティングテーブル25aに記録する。
(A5)ノード装置10dに隣接する各ノードは、ノード装置10dから送信されたHelloフレームを手順(A4)と同様に処理することにより、ルーティングテーブル25を更新する。
(A6)中継装置50aは、以下のようなHelloフレームを生成して隣接するノード装置10や中継装置50に送信したとする。以下の記載では、中継装置50a〜50cに割り当てられたアドレスは、GW1(中継装置50a)、GW2(中継装置50b)、GW3(中継装置50c)であるものとする。
LSおよびGS : GW1
LDおよびGD : ブロードキャストアドレス
タイプ : 0
GWフラグ : 1
Helloヘッダ数 : 0
(A7)ノード装置10aの受信部21aは、中継装置50aから受信したHelloフレームを経路情報処理部24aに出力する。経路情報処理部24aは、中継装置50aから受信したHelloフレームを用いて、図4(b)のNo.3−1に示す情報をルーティングテーブル25aに記録する。
(A8)経路情報処理部24aは、ルーティングテーブル25aに中継装置50宛の経路を記録すると、中継装置テーブル26aを生成する。ここでは、経路情報処理部24aは、図4(b)に示すルーティングテーブル25aに基づいて、図5(b)に示す中継装置テーブル26aを生成する。
(A9)同様に、個々のノード装置10や中継装置50がHelloフレームを用いて経路情報を交換する。このため、アドホックネットワーク5中の個々のノードはアドホックネットワーク5中の他のノード装置10や中継装置50への経路情報を含むルーティングテーブル25を生成できる。また、ルーティングテーブル25から中継装置テーブル26が生成、更新される。なお、複数の中継装置50に至る経路がルーティングテーブル25に含まれている場合、経路情報処理部24aは、評価値を比較することにより、通信に最も有利な中継装置50を、検針データを含むフレームの送信先の中継装置50とする。その結果、ノード装置10aは、図4(a)に示すルーティングテーブル25aと図5(a)に示す中継装置テーブル26aを生成したものとする。
(B)中継装置50に隣接しているかの判定
判定部27は、中継装置テーブル26を参照することにより、通信可能な中継装置50の中で優先度が最も高い中継装置50を、検針データを含むフレームの送信先として特定する。ここで、優先度が高い中継装置50ほど、評価値が小さくなっており、また、優先度の欄の値も小さいものとする。判定部27は、ルーティングテーブル25を参照することにより、検針データを含むフレームの送信先とする中継装置50に至る経路の情報を取得する。検針データを含むフレームの送信先とする中継装置50がグローバル宛先とローカル宛先の両方として記録されている場合、判定部27は、ノード装置10が検針データを含むフレームの送信先の中継装置50に隣接していると判定する。判定部27は、ノード装置10が検針データを含むフレームの送信先の中継装置50に隣接していることを、決定部28、フレーム処理部29、データ取得部31、格納処理部32、圧縮処理部33に通知する。
例えば、ノード装置10aでは、判定部27aが図5(a)に示す中継装置テーブル26aに基づいて、検針データを含むフレームの送信先である中継装置50に割り当てられているアドレスはGW1であることを特定する。なお、GW1は、中継装置50aに割り当てられている。
次に、判定部27aは、図4(a)に示すルーティングテーブル25aを参照して、検針データを含むフレームの送信先の中継装置50までの経路を取得する。グローバル宛先のアドレスがGW1であるエントリは、No.3−1〜3−3である。No.3−1のエントリではローカル宛先アドレスもGW1であるため、判定部27aは、ノード装置10aは、検針データを含むフレームの送信先の中継装置50に隣接していると判定する。
ノード装置10e、10i、10kでもノード装置10aと同様の処理が行われる。その結果、ノード装置10eの判定部27eは、ノード装置10eからサーバ90に送信するフレームの転送先である中継装置50bに隣接していることを特定する。ノード装置10i、10kでは、サーバ90宛のフレームの転送先が中継装置50cであることと、ノード装置10i、10kが中継装置50cに隣接していることが特定される。
(C)データフレームの生成
各ノード装置10のデータ取得部31は、メーターから検針データを取得する。なお、検針データの取得は、予め決められた周期ごとに行われても良く、また、サーバ90からの要求に応答して行われても良い。データ取得部31は、検針データをフレーム処理部29に出力する。
フレーム処理部29は、データ取得部31から入力された検針データを含めたデータフレームを生成する。データフレームのフォーマットの例を図9(a)に示す。アドホックヘッダはいずれの種類のフレームでも同じ情報要素を含む。ただし、サーバ90向けのデータを含むデータフレームでは、タイプ=1に設定されるものとする。
フレーム処理部29は、ルーティングテーブル25と中継装置テーブル26を用いてアドホックヘッダを生成する。フレーム処理部29は、中継装置テーブル26を参照することにより、通信可能な中継装置50の中から優先度が最も高い中継装置50を特定し、特定した中継装置50のアドレスをグローバル宛先アドレスとする。さらに、フレーム処理部29は、特定した中継装置50にフレームを送信するときの転送先のアドレスをルーティングテーブル25から取得し、ローカル宛先アドレスとする。また、フレーム処理部29は、グローバル送信元アドレスとローカル送信元アドレスを、検針データを取得したノード装置10に割り当てられたアドレスとする。フレーム処理部29は、生成したアドホックヘッダを、検針データに付加することにより、データフレームを生成する。なお、図9(a)はデータフレームの例であり、例えば、ペイロードには、サーバ90宛のデータ以外に署名情報などの他の情報要素が含まれていても良い。
(D)検針データを含むフレームの転送処理
図10は、データフレームの転送処理の例を示すシーケンス図である。また、図11は、再送データフレームを用いて検針データが送信される経路の例を示す。以下、図10と図11を参照しながら、ノード装置10a〜10cで生成されたデータフレームが転送される場合を例として説明する。
(D1)ノード装置10aのデータ取得部31aは、検針データを取得する。ノード装置10aは、データフレームの転送先の中継装置50aに隣接しているので、データ取得部31aは、検針データを格納処理部32aとフレーム処理部29aに出力する。フレーム処理部29aは、前述の方法により、データフレームを生成し、送信部22aに出力する。送信部22aは、中継装置50aにデータフレームを送信する。
(D2)格納処理部32aは、データ取得部31aから入力された検針データを記憶部40aに格納する。
(D3)中継装置50aは、受信部61aを用いて、ノード装置10aからデータフレームを受信する。受信部61aは、受信したフレームのタイプが1に設定されているので、データフレームを受信したと判定する。受信部61aは、データフレームのペイロードを、データフレームのローカル送信元アドレスに対応付けてフレーム処理部71aに出力する。フレーム処理部71aは、ペイロードに含まれている検針データを、ローカル送信元アドレスに対応付けて記憶部80に格納する。
(D4)ノード装置10bのデータ取得部31bは検針データを取得し、フレーム処理部29bに出力する。フレーム処理部29bは、データフレームを生成する。このときノード装置10bで生成されるデータフレームのグローバル宛先は中継装置50a、ローカル宛先はノード装置10a、グローバル送信元はノード装置10bである。生成されたデータフレームはノード装置10aに送信される。
(D5)ノード装置10aの受信部21aは、データフレームを受信すると、フレーム処理部29aに出力する。フレーム処理部29aは、ノード装置10aがデータフレームの送信先の中継装置50aに隣接していることを判定部27aから通知されている。そこで、ノード装置10bから受信したデータフレームに含まれているペイロードを、データフレームのグローバル送信元と対応付けて格納処理部32aに出力する。さらに、フレーム処理部29aは、ノード装置10bから受信したデータフレームのアドホックヘッダ中のローカル送信元をノード装置10a、ローカル宛先を中継装置50aに変更して送信部22aに出力する。送信部22aは、フレーム処理部29aから入力されたデータフレームを中継装置50aに転送する。
(D6)格納処理部32aは、フレーム処理部29aから入力されたペイロードから、サーバ90宛に送信される対象となっている検針データを抽出し、グローバル送信元(ノード装置10b)と対応付けて記憶部40aに格納する。この処理により、記憶部40は、ノード装置10aとノード装置10bで得られた検針データを保持する。
(D7)中継装置50aは、手順(D3)と同様の処理により、ノード装置10bで得られた検針データを記憶部80に格納する。
(D8)ノード装置10cにおいても、ノード装置10bと同様に、検針データを含むデータフレームが生成される。データフレームは、ノード装置10cからノード装置10bに送信される。
(D9)ノード装置10bは、ノード装置10cからデータフレームを受信する。受信部21bはノード装置10cから受信したデータフレームをフレーム処理部29bに出力する。判定部27bは、ルーティングテーブル25bと中継装置テーブル26bを用いて、ノード装置10bがいずれの中継装置50にも隣接していないと判定している。すなわち、判定部27bは、ノード装置10bが受信したデータフレーム中の検針データを保持しなくても良いと判定している。そこで、フレーム処理部29bは、入力されたデータフレームのアドホックヘッダを、ルーティングテーブル25bを用いて変更し、送信部22bを介して、ノード装置10aに転送する。
(D10)ノード装置10cで生成されたデータフレームを受信したノード装置10aでは、手順(D5)と同様の処理が行われる。このため、データフレームは中継装置50aに転送される。
(D11)格納処理部32aは、手順(D10)で受信したデータフレーム中のペイロードから検針データを抽出し、ノード装置10cに対応付けて記憶部40aに格納する。この処理により、記憶部40aは、ノード装置10a〜10cで得られた検針データを保持する。
(D12)中継装置50aは、手順(D11)でノード装置10aから送信されてきたデータフレームを、手順(D3)と同様に処理する。
検針データをサーバ90に送信する時刻になると、中継装置50aの送受信部51aは、サーバ90との間で通信を確立しようとする。さらに、データ集約部72bは、記憶部80に記憶している検針データを含むサーバ90宛のフレームを生成する。ここでは、送受信部51aは、中継装置50aとサーバ90の間で通信の確立に失敗したとする。送受信部51aは、所定のリトライ回数分、サーバ90との間での通信の確立を試みるがいずれも失敗したとする。
(D13)中継装置50aの通知生成部73aは、通信の失敗を通知するデータを通知フレーム生成部63aに出力する。通知フレーム生成部63aは、通信失敗通知を生成する。通信失敗通知のフォーマットの例を図9(b)に示す。通信失敗通知では、タイプ=3に設定されるものとする。通知フレーム生成部63aは、通信失敗通知のグローバル宛先を、1ホップのブロードキャストアドレスに設定する。さらに、通知フレーム生成部63aは、通信失敗通知のグローバル送信元とローカル送信元を中継装置50aに設定する。通知フレーム生成部63aは、生成した通信失敗通知を、送信部62aを介して、中継装置50aに隣接する全てのノード装置10に送信する。
(D14)ノード装置10aの受信部21aは、タイプ=3に設定されたフレームを受信すると格納処理部32aに出力する。格納処理部32aは、中継装置50aから通信失敗通知を受信したと判定し、中継装置テーブル26aを図5(a)の状態から図5(c)に示すように更新する。また、格納処理部32aは、データ41から検針データを抽出して圧縮処理部33aに出力する。圧縮処理部33aは、格納処理部32aから入力されたデータを圧縮する。圧縮処理部33aは、圧縮後のデータと圧縮方式などを示す情報をフレーム処理部29aに出力するとともに、再送データフレームの生成を要求する。再送データフレームのフォーマットの例を図9(c)に示す。再送データフレームではタイプ=5に設定されるものとする。
決定部28aは、中継装置テーブル26aが更新されたことをトリガとして、通信可能な中継装置50の中で通信経路の状況が良好な中継装置50を、検針データの送信先に決定する。ここでは、図5(c)により、決定部28aは、中継装置50bを検針データの送信先に決定したとする。決定部28aは、中継装置50bを検針データの送信先とすることをフレーム処理部29aに通知する。ここでは、図11に示す経路で再送データフレームが送信されるものとする。すると、フレーム処理部29aは、ルーティングテーブル25aを参照することにより、以下のようなアドホックヘッダを備えた再送データフレームを生成する。
グローバル送信元 :ノード装置10a
グローバル宛先 :中継装置50b
ローカル送信元 :ノード装置10a
ローカル宛先 :ノード装置10e
タイプ :5
GWフラグ :0
再送データフレームは、ノード装置10aからノード装置10eに送信される。
(D15)ノード装置10eの受信部21eは、タイプ=5に設定されたフレームを受信したと判定すると、受信フレームをフレーム処理部29eに出力する。フレーム処理部29eは、タイプ=5なので、再送データフレームであると判定し、ルーティングテーブル25eを用いて再送データフレームを中継装置50bに転送する。
このとき、ノード装置10eは、検針データを含むフレームのグローバル宛先である中継装置50bに隣接しているが、再送データフレームについては、ペイロード中のデータをノード装置10eに保持するための処理を行わない。再送データフレーム中のデータは、再送データフレームのグローバル送信元において保持されているためである。
(D16)中継装置50bの受信部61bは、タイプ=5に設定されたフレームを受信したと判定すると、受信フレームのペイロードを、グローバル送信元と対応付けて、フレーム処理部71bに出力する。フレーム処理部71bは、ペイロードに含まれている圧縮方式に関する情報を用いてデータを解凍し、データ集約部72bに出力する。
(D17)中継装置50bの送受信部51bは、ノード装置10aを介して取得した検針データを送信するために、サーバ90との間で通信を確立する。
(D18)中継装置50bとサーバ90との間の通信が確立すると、データ集約部72bは、フレーム処理部71bから入力された検針データを含むフレームを生成し、送受信部51bを介してサーバ90に送信する。
(D19)サーバ90への送信に成功すると、通知生成部73bは、送信に成功したことと、送信した検針データに対応付けられたアドレスを通知フレーム生成部63bに通知する。ここでは、通知生成部73bは、検針データの送信に成功したことと、ノード装置10aのアドレスを、通知フレーム生成部63bに通知する。通知フレーム生成部63bは、通知生成部73bから通知されたアドレスをグローバル宛先アドレスとした通信成功通知を生成する。通信成功通知のフォーマットの例を図9(d)に示す。通信成功通知ではタイプ=2に設定されるものとする。通信成功通知は、図11の(D19)に示す経路でノード装置10aに送信される。
(D20)ノード装置10aの受信部21aは、タイプ=2の受信フレームを格納処理部32aに出力する。格納処理部32aは、再送データフレームのグローバル宛先から通信成功通知を受信したことから、検針データの送信が成功したと判定する。そこで、格納処理部32aは、中継装置50bに送信した検針データについては、再度送信が要求される可能性がないと判定し、記憶部40aから削除する。言い換えると、格納処理部32aは、ノード装置10aで取得された検針データや受信したデータフレーム中の検針データを、サーバ90への送信が要求される可能性がなくなるまで、記憶部40に格納しているといえる。
さらに、ノード装置10a〜10cにおいて検針データの送信先が中継装置50bに変更された後に、ノード装置10aが、ノード装置10b、10cなどから中継装置50b宛のデータを受信したとする。図4に示すように、ノード装置10aは中継装置50bに隣接していないので、ノード装置10aはノード装置10bやノード装置10cから受信したデータフレーム中の検針データを保持せずに、データフレームの転送処理を行う。
なお、図10と図11を参照しながら説明した手順は一例であり、実装に応じて変更される場合があるものとする。例えば、手順(D1)と手順(D2)の順序を入れ替えることもできる。同様に、手順(D5)と手順(D6)の順序の変更、および、手順(D10)と手順(D11)の順序の変更も可能である。さらに、圧縮処理部33を備えていないノード装置10では、検針データを圧縮しないで再送データフレームを生成することもできる。検針データの圧縮が行われずに生成された再送データフレームのフォーマットの例を図9(e)に示す。また、中継装置50とサーバ90の間の通信に用いられるプロトコルはTransmission Control Protocol(TCP)に限られない。
図12は、ノード装置10で行われる処理の例を示すフローチャートである。なお、図12では、受信フレームはHelloフレーム以外のフレームであるものとする。
データ取得部31は、検針データを取得する周期を記憶しており、時刻情報を用いて、検針データを取得する時刻であるか判断する(ステップS1)。検針データを取得する時刻になると、データ取得部31は、メーターから検針データを取得し、フレーム処理部29に出力する(ステップS1でYes、ステップS2)。フレーム処理部29は、ルーティングテーブル25と中継装置テーブル26を用いてデータフレームを生成する(ステップS3)。次に、判定部27は、データフレームのグローバル宛先に指定されている中継装置50に、自ノードが隣接しているかを、ルーティングテーブル25と中継装置テーブル26を用いて判定する(ステップS6)。データフレームのグローバル宛先に指定されている中継装置50に、自ノードが隣接している場合、格納処理部32は、データフレームに含まれている検針データを記憶部40に格納する(ステップS6でYes、ステップS7)。送信部22は、データフレームのグローバル宛先に指定されている中継装置50にデータフレームを送信する(ステップS8)。格納処理部32は、通信結果通知の受信までにかかる時間のカウントを開始する(ステップS9)。一方、自ノードがデータフレームのグローバル宛先に指定されている中継装置50に隣接していない場合、送信部22は、グローバル宛先に向けて、データフレームを転送する(ステップS6でNo、ステップS11)。
検針データを取得する時刻ではなくても、フレーム処理部29は、フレームを受信すると、中継装置50宛のデータフレームを受信したかを判定する(ステップS1でNo、ステップS4でYes、ステップS5)。中継装置50宛のデータフレームを受信した場合、ノード装置10は、ステップS6〜S9の処理か、ステップS6、S11の処理を行う。一方、受信フレームが中継装置50宛のデータフレームではない場合、フレーム処理部29は、自ノード宛のフレームであるかを判定する(ステップS5でNo、ステップS10)。フレーム処理部29が自ノード宛のフレームを受信していないと判定した場合、送信部22は、受信フレームをグローバル宛先に向けて転送する(ステップS10でNo、ステップS11)。フレーム処理部29により自ノード宛のフレームだと判定されたフレームは、アプリケーション処理部30で処理される(ステップS10でYes、ステップS12)。なお、検針データを取得する時刻ではなく、フレームも受信していないと判定した場合、ノード装置10は待機する(ステップS1でNo、ステップS2でNo)。
図13は、ノード装置10で行われる処理の例を示すフローチャートである。図13は、ノード装置10が再送データフレームを送信するときに行う処理の例を示している。格納処理部32は、通信結果通知を受信したかを判定する(ステップS21)。通信結果通知を受信した場合、格納処理部32は、通信結果通知のグローバル送信元が、自ノードから送信したデータフレームまたは再送データフレームのグローバル宛先と一致するかを判定する(ステップS21でYes、ステップS23)。通信結果通知のグローバル送信元と、自ノードから送信したデータフレームまたは再送データフレームのグローバル宛先が一致する場合、自ノードから送信したデータフレームまたは再送データフレームに対する通信結果を受信している。そこで、格納処理部32は、記憶部40に検針データが格納されているかを判定する(ステップS23でYes、ステップS24)。検針データを格納していない場合、通信結果通知による検針データの削除や検針データの再送などの処理を行うことができないので、通信結果通知を破棄し、処理を終了する(ステップS24でNo、ステップS25)。また、通信結果通知のグローバル送信元と、自ノードから送信したデータフレームまたは再送データフレームのグローバル宛先が一致しない場合も、ノード装置10は、通信結果通知を破棄して処理を終了する(ステップS23でNo、ステップS25)。
ステップS24で検針データを格納していると判定した場合、格納処理部32は、受信した通信結果通知が通信失敗通知であるかを判定する(ステップS24でYes、ステップS26)。受信した通信結果通知が通信失敗通知ではない場合、通信の成功が通知されているので、格納処理部32は、記憶部40に格納している検針データを削除する(ステップS26でNo、ステップS27)。一方、通信失敗通知を受信した場合、格納処理部32とフレーム処理部29は、記憶部40に格納されている検針データを用いて再送データフレームを生成する(ステップS26でYes、ステップS28)。送信部22は、生成された再送データフレームを、グローバル宛先に向けて送信する(ステップS29)。
また、ステップS21で通信結果通知を受信していないと判定した場合、格納処理部32は、データフレームまたは再送データフレームを送信した時刻から経過した時間が、予め決められた通知待ち時間を越えているかを判定する(ステップS22)。経過時刻が通知待ち時間を超えている場合(通知待ちタイムアウト)、ステップS28以降の処理が行われる(ステップS22でYes)。一方、通知待ちタイムアウトが発生していない場合、ノード装置10は、待機する(ステップS22でNo)。
図14は、中継装置50で行われる処理の例を示すフローチャートである。なお、図14には、Helloフレーム以外のフレームを中継装置50が受信したときの動作の例が示されている。
中継装置50は、フレームを受信するまで待機する(ステップS41)。中継装置50でフレームを受信すると、フレーム処理部71は、データフレームを受信したかを判定する(ステップS41でYes、ステップS42)。データフレームを受信した場合、フレーム処理部71はデータフレームから検針データを抽出して記憶部80に格納する(ステップS43)。フレーム処理部71は、検針データをサーバ90に送信できる時刻になるまで、ステップS41〜S44に示すデータフレームの受信処理を繰り返す(ステップS44)。ここで、サーバに検針データを送信できる時刻は、予め、中継装置50に通知されているものとする。
検針データをサーバ90に送信できる時刻以降に受信したデータフレームから検針データを取得すると、データ集約部72は記憶部80に記憶されているデータを集約してサーバ90宛のフレームを生成する(ステップS44でYes)。さらに、データ集約部72は、送受信部51を介してサーバ90にフレームを送信する(ステップS48)。通知生成部73は、サーバ90から送信される制御メッセージをモニタすることにより、サーバ90へのフレームの送信に成功したかを判定する(ステップS49)。サーバ90へのフレームの送信に成功したと判定すると、通知生成部73は送信の成功を通知フレーム生成部63に通知し、通信成功通知を生成させる。ここで、通信成功フレームのグローバル宛先は、データフレームを中継装置50に転送したノード装置10である。通知フレーム生成部63は、送信部62を介して、通信成功通知を送信する(ステップS50)。一方、サーバ90へのフレームの送信に失敗すると、中継装置50は、送信回数が予め決められたリトライ回数に達するまで、サーバ90へのフレームの再送信を試みる(ステップS49でNo、ステップS51でYes)。リトライ回数に達するまでサーバ90への送信を行ってもフレームをサーバ90に送信できなかった場合、通知生成部73は、通信の失敗を通知フレーム生成部63に通知する(ステップS51でNo)。通知フレーム生成部63は、通信失敗通知を生成して、データフレームを中継装置50に転送したノード装置10に送信する(ステップS52)。
一方、ステップS42で受信フレームがデータフレームではないと判定されると、フレーム処理部71は、再送データフレームを受信したかを判定する(ステップS42でNo、ステップS45)。再送データフレームを受信したと判定すると、フレーム処理部71は、再送データフレーム中のデータが圧縮されているかを判定する(ステップS45でYes、ステップS46)。再送データフレーム中のデータが圧縮されている場合、フレーム処理部71は、データを解凍する(ステップS46でYes、ステップS47)。その後、データ集約部72は、解凍されたデータを用いてサーバ90宛のフレームを生成し、サーバ90に送信する(ステップS48)。一方、データが圧縮されていない場合は、データ集約部72は、再送データフレームに含まれている検針データを用いてサーバ90宛のフレームを生成し、送受信部51を介して送信する(ステップS46でNo、ステップS48)。サーバ90にフレームを送信した後の処理は、ステップS49からS52を参照しながら説明したとおりである。なお、再送データフレームを用いて中継装置50に通知された検針データをサーバ90に送信した場合、通知フレーム生成部63は、通信成功通知や通信失敗通知のグローバル宛先を、再送データフレームのグローバル送信元に設定する。
さらに、受信フレームがデータフレームでも再送データフレームでもない場合、受信フレームは、アプリケーション処理部70によって適宜処理される(ステップS45でNo、ステップS53)。
このように、第1の実施形態では、データフレームのグローバル宛先に設定されている中継装置50に隣接しているノード装置10は、データフレームに含まれている検針データを、サーバ90への検針データの送信成功が確認できるまで保持する。また、第1の実施形態では、中継装置50に隣接したノード装置10は、自ノードで得られた検針データも、他のノード装置10から受信した検針データと合わせて保持する。このため、データフレームのグローバル宛先に設定されている中継装置50がサーバ90にフレームを送信できなかったとしても、検針データは、送信に失敗した中継装置50に隣接するノード装置10に保持されており、無駄にならない。
また、サーバ90との通信に失敗した中継装置50とは異なる中継装置50を介して検針データを送信するときは、検針データを保持しているノード装置10が、新たに中継先とする中継装置50に検針データを含む再送データフレームを送ればよい。このため、中継先の中継装置50が変更されても、個々のノード装置10が検針データの取得と送信を再度行わなくて良く、ノード装置10の負担は、第1の実施形態にかかる方法を使用しない場合に比べて軽減される。また、アドホックネットワーク5全体のトラフィックも、再送が行われるときのトラフィックが減少することに伴い、減少する。このため、アドホックネットワークでの通信も効率化できる。
さらに、図13を参照しながら説明したように、検針データを送信してから所定の期間中に通信成功通知と通信失敗通知のいずれも受信しない場合も、検針データを保持しているノード装置10が再送データフレームの送信を行う。このため、中継装置50とサーバ90の間の回線で障害が発生した場合だけでなく、中継装置50で障害が発生した場合であっても、第1の実施形態により、検針データをサーバ90に送信することができる。
<第2の実施形態>
第2の実施形態では、再送データフレームに含まれるデータの量を一定以下に抑えることにより、特定の中継装置50に負荷を集中させないようにするための通信方法の例を説明する。第2の実施形態でも、ノード装置10は、第1の実施形態と同様の方法により、中継装置50までの経路取得、中継装置50に隣接しているかの判定、データフレームの生成を行うものとする。また、データフレームの転送処理も、図10を参照しながら説明した手順(D1)〜(D12)と同様に行われる。中継装置50からの通信失敗通知の送信も、手順(D13)と同様に行われる。
図15は、第2の実施形態での再送データフレームの送信経路の例を示す図である。図16は、再送データフレームの送信処理の例を示すシーケンス図である。以下、図15と図16を参照しながら、ノード装置10aが記憶している検針データを、中継装置50b宛の再送データフレームと中継装置50c宛の再送データフレームに分けた場合について説明する。
(E1)手順(D13)において、ノード装置10aは、中継装置50aから通信失敗通知を受信する。ノード装置10aの受信部21aは、タイプ=3に設定されたフレームを受信すると格納処理部32aに出力する。格納処理部32aは、中継装置50aから通信失敗通知を受信したと判定し、中継装置テーブル26a中の中継装置50aについての通信可否情報を「不可」に更新する。
次に、格納処理部32aは、記憶部40aに格納されている検針データの量を求め、得られたデータ量を、予め記憶している閾値と比較する。ここで、閾値は、データ数やデータの容量などを単位として決定される値であるとする。ここでは、記憶部40aに格納されている検針データの量は閾値より多いものとする。すると、格納処理部32aは、記憶部40aに格納されている検針データを閾値以下の量の分割データに分割する。例えば、閾値がデータ数を単位として決定されており、50個であるとする。一方、記憶部40aには、80個のデータが格納されていたとすると、格納処理部32aは、記憶部40aに格納されている80個の検針データを、50個のデータを含む第1の分割データと30個のデータを含む第2の分割データに分割する。図17(a)に分割データの例を示す。格納処理部32は、個々の検針データについて、いずれの分割データに含まれているかを記憶するものとする。
(E2)格納処理部32aは、第1および第2の分割データを圧縮処理部33aに出力する。圧縮処理部33aは、格納処理部32aから入力されたデータを、分割データごとに圧縮する。圧縮処理部33aは、圧縮後のデータと圧縮方式などを示す情報を対応付けて、分割データごとにフレーム処理部29aに出力する。以下、第1の分割データを圧縮して得られたデータを第1の圧縮データと記載する。同様に、第2の分割データを圧縮して得られたデータを第2の圧縮データと記載する。
(E3)格納処理部32aは、生成した分割データの数を決定部28aに通知する。決定部28aは、中継装置テーブル26aを参照することにより、通信可能な中継装置50の中から通信経路の状況が良好な中継装置50を優先的に、再送データフレームの送信先として、圧縮データの数だけ選択する。ここでは、決定部28aは、中継装置50bと中継装置50cを、再送データフレームの送信先として決定したとする。
(E4)フレーム処理部29aは、決定部28aに、第1の圧縮データを含む再送データフレームの送信先を要求する。すると、決定部28aは、決定した送信先のうちで優先度の高いものを、フレーム処理部29aに通知する。ここでは、決定部28aは、中継装置50bを送信先として通知したものとする。フレーム処理部29aは、ルーティングテーブル25aを参照することにより、中継装置50bをグローバル宛先とするアドホックヘッダを、以下のように決定する。なお、ここでは、ノード装置10aは、中継装置50bに隣接しているとする。
グローバル送信元 :ノード装置10a
グローバル宛先 :中継装置50b
ローカル送信元 :ノード装置10a
ローカル宛先 :中継装置50b
タイプ :5
GWフラグ :0
フレーム処理部29aは、生成したアドホックヘッダを、第1の圧縮データを含むペイロードに付加することにより、第1の再送データフレームを生成する。さらに、フレーム処理部29aは、第1の圧縮データを含む再送データフレームのグローバル宛先を中継装置50bに設定したことを、格納処理部32aに通知する。すると、格納処理部32aは、図17(b)に示す情報を記憶する。
(E5)フレーム処理部29aは、第1の再送データフレームを送信部22aに出力する。送信部22aは、第1の再送データフレームを中継装置50bに送信する。
手順(E6)〜(E8)の処理は、図10を参照しながら説明した手順(D16)〜(D18)と同様である。
(E9)フレーム処理部29aは、決定部28aに、第2の圧縮データを含む再送データフレームの送信先を要求する。すると、決定部28aは、決定した送信先のうちで、まだフレーム処理部29aに通知していないものを通知する。ここでは、決定部28aは、中継装置50cを送信先として通知する。フレーム処理部29aは、ルーティングテーブル25aを参照することにより、中継装置50cをグローバル宛先とするアドホックヘッダを、以下のように決定する。
グローバル送信元 :ノード装置10a
グローバル宛先 :中継装置50c
ローカル送信元 :ノード装置10f
ローカル宛先 :中継装置50c
タイプ :5
GWフラグ :0
フレーム処理部29aは、生成したアドホックヘッダを、第2の圧縮データを含むペイロードに付加することにより、第2の再送データフレームを生成する。さらに、フレーム処理部29aは、第2の圧縮データを含む再送データフレームのグローバル宛先を中継装置50cに設定したことを、格納処理部32aに通知する。すると、格納処理部32aは、図17(c)に示す情報を記憶する。
(E10)フレーム処理部29aは、第2の再送データフレームを送信部22aに出力する。送信部22aは、第2の再送データフレームをノード装置10fに送信する。
(E11)ノード装置10fの受信部21fは、第2の再送データフレームをフレーム処理部29fに出力する。フレーム処理部29fは、ルーティングテーブル25fを参照して、第2の再送データフレームの転送先をノード装置10iに決定する。送信部22fは、第2の再送データフレームをノード装置10iに送信する。
(E12)ノード装置10iの受信部21iは、第2の再送データフレームをフレーム処理部29iに出力する。フレーム処理部29iは、ルーティングテーブル25iを参照して、第2の再送データフレームの転送先を中継装置50cに決定する。送信部22iは、第2の再送データフレームを中継装置50cに送信する。
手順(E13)〜(E15)の処理も、図10を参照しながら説明した手順(D16)〜(D18)と同様である。
図16には図示していないが、中継装置50bがサーバ90へ第1の再送データフレームを送信できた場合、中継装置50bは、前述の手順(D19)で説明したように、ノード装置10aに通信成功通知を送信する。中継装置50bから通信成功通知を受信したノード装置10aは、図17(c)のテーブルを用いて、検針データD1〜Dmを記憶部40aから削除する。同様に、中継装置50cがサーバ90へ第2の再送データフレームを送信できた場合、中継装置50cは、ノード装置10aに通信成功通知を送信する。中継装置50cから通信成功通知を受信したノード装置10aは、図17(c)のテーブルを用いて、検針データDm+1〜Dnを記憶部40aから削除する。
図18は、ノード装置で行われる処理の例を示すフローチャートである。ステップS61〜S67は、図13を参照しながら説明したステップS21〜S27と同様である。
通信失敗通知を受信した場合、格納処理部32は記憶部40に格納されている検針データの量が閾値を超えているかを判定する(ステップS66でYes、ステップS68)。格納された検針データの量が閾値を超えている場合、格納処理部32は、記憶部40に格納された検針データを、閾値以下のデータ量の複数の分割データに分割する。格納処理部32は、複数の分割データをフレーム処理部29に出力し、フレーム処理部29は、分割データごとに再送データフレームを生成する。このとき、フレーム処理部29は、決定部28から通知された中継装置50に応じたアドホックヘッダを用いて再送データフレームを生成する(ステップS68でYes、ステップS69)。一方、格納された検針データの量が閾値を超えていない場合、格納処理部32とフレーム処理部29は、記憶部40に格納されている検針データを用いて再送データフレームを生成する(ステップS68でYes、ステップS70)。送信部22は、生成された再送データフレームを、グローバル宛先に向けて送信する(ステップS71)。
このように、格納されている検針データの量が閾値を超えると、ノード装置10は複数の再送データフレームを用いて、検針データを複数の中継装置50に分けて送信する。このため、第2の実施形態では、第1の実施形態に比べ、再送データフレームを受信する中継装置50にかかる負担を軽減することができる。さらに、第1の実施形態と同様に、データフレームのグローバル宛先に設定された中継装置50とサーバ90の間で通信ができなくても、すでに収集された検針データをサーバ90に送信することができる。
<その他>
なお、実施形態は上記に限られるものではなく、様々に変形可能である。以下にその例をいくつか述べる。
検針データの収集が周期的に行われる場合、中継装置50に隣接しているノード装置10は、格納している検針データを削除するタイミングを、検針データの収集の周期に合わせて設定することができる。例えば、毎時0分と30分に検針データの収集が行われる場合、ノード装置10は、通信成功通知を受信しても、新たな検針データを受信する時刻まで、送信に成功した検針データを保持しておくことができる。このように変形すると、例えば、中継装置50とサーバ90の間の通信が成功した後にサーバ90で異常が発生した場合に、サーバ90へのデータの再送信が容易に行われる。サーバ90から検針データの再取得を要求された中継装置50は、隣接するノード装置10に、検針データの再送信を要求する制御メッセージを送信する。制御メッセージを受信したノード装置10は、記憶部40に記憶している検針データを、再送データフレームを用いて、中継装置50に送信する。
図4(a)、図5(a)などに示すルーティングテーブル25や中継装置テーブル26は例であり、ルーティングテーブル25や中継装置テーブル26に含まれる情報要素は、実装に応じて変更される場合がある。同様に、図8に示すアドホックヘッダやHelloヘッダも例であり、実装に応じて、アドホックヘッダやHelloヘッダに含まれる情報は変更されることがあるものとする。
通信成功通知は、中継装置50がデータフレームを用いて受信した検針データをサーバ90に送信できた場合にも生成される。このとき、通知フレーム生成部63は、記憶部80に記憶されている検針データを中継装置50に通知したノード装置10を、通信成功通知のグローバル宛先とする。なお、検針データを通知してきた隣接ノード装置10の情報は、中継装置50が検針データを取得するときに、例えば、第1の実施形態の手順(D3)などに示した方法で、記憶部80に記録されている。
以上の記載では、対象データが検針データである場合を例として説明したが、対象データは、検針データに限られないものとする。