(57)【要約】  実施形態にかかるノード装置は、時刻計測部、受信部、記憶部、タイマー、時刻補正部を備える。時刻計測部は時刻を計測する。受信部は、時刻の補正に使用する時刻情報を含むフレームである時刻情報フレームを受信する。記憶部は、時刻情報フレームの送信元ノード装置が時刻情報を取得する時刻から時刻情報フレームを送信する時刻までの時間である送信処理時間を固定値として記憶している。タイマーは、時刻情報フレームを受信する時刻から、時刻情報を時刻情報フレームから取得する時刻までの時間である受信処理時間を計測する。時刻補正部は、時刻情報に、固定値と受信処理時間を加えた値を、時刻計測部に設定することにより時刻計測部で計測される時刻を補正する。
2013099026.tif 000002
【特許請求の範囲】
【請求項１】
時刻を計測する時刻計測部と、
前記時刻の補正に使用する時刻情報を含むフレームである時刻情報フレームを受信する受信部と、
前記時刻情報フレームの送信元ノード装置が前記時刻情報を取得する時刻から前記時刻情報フレームを送信する時刻までの時間である送信処理時間を固定値として記憶している記憶部と、
前記時刻情報フレームを受信する時刻から、前記時刻情報を前記時刻情報フレームから取得する時刻までの時間である受信処理時間を計測するタイマーと、
前記時刻情報に、前記固定値と前記受信処理時間を加えた値を、前記時刻計測部に設定することにより前記時刻計測部で計測される時刻を補正する時刻補正部
を備えることを特徴とするノード装置。
【請求項２】
前記受信部で受信された時刻情報フレームに含まれている時刻情報を用いて前記時刻が補正された後に、前記時刻計測部で計測された時刻を表す他の時刻情報を取得する時刻取得部と、
前記時刻取得部が取得した他の時刻情報を含む時刻情報フレームを、前記時刻取得部が時刻情報を取得した時刻から前記固定値で表される時間が経過した時刻に送信されるように生成するフレーム生成部と、
前記他の時刻情報を含む時刻情報フレームを送信する送信部
をさらに備えることを特徴とする請求項１に記載のノード装置。
【請求項３】
物理量を測定するセンサーと、
前記送信部と前記受信部とは異なる送信部と受信部を有する無線処理部と、
前記時刻計測部、前記タイマー、前記時刻補正部、前記時刻取得部、および、前記フレーム生成部を構成する第１の処理回路と異なる第２の処理回路をさらに備え、
前記第２の処理回路は、前記センサーで測定された物理量を処理し、
前記無線処理部は、前記第２の処理回路で処理されたデータを送受信する
ことを特徴とする請求項２に記載のノード装置。
【請求項４】
前記時刻が補正されてから経過した時間である経過時間を計測し、前記経過時間がネットワーク中で許容される誤差の大きさの関数として決定された閾値を超えたことを検出すると、前記フレーム生成部に、前記他の時刻情報を含む時刻情報フレームの生成の停止を要求する時刻ずれ検出部
をさらに含むことを特徴とする請求項２もしくは３に記載のノード装置。
【請求項５】
時刻を補正する周期である補正周期ごとに、時刻情報を含む時刻情報フレームの生成を第１の処理回路に要求する第２の処理回路と、
前記第１の処理回路が前記時刻情報を取得する時刻から前記時刻情報フレームを送信する時刻までの時間として、前記時刻情報フレームの宛先ノード装置が予め記憶している固定値を記憶する記憶部と、
前記時刻情報フレームを前記宛先ノード装置に送信する送信部
を備え、
前記第１の処理回路は、
前記時刻情報フレームの生成が要求されると、前記時刻情報フレームを送信するまで割り込み処理を禁止し、
前記時刻情報フレームを生成し、
前記時刻情報を取得した時刻から前記固定値で表される時間が経過した時刻に、前記時刻情報フレームを前記送信部に送信させる
ことを特徴とするノード装置。
【請求項６】
複数のノード装置が含まれるネットワーク中のノード装置における時刻同期方法であって、
時刻を計測し、
前記時刻の補正に使用する時刻情報を含むフレームである時刻情報フレームを送信元のノード装置から受信し、
前記送信元のノード装置が前記時刻情報を取得する時刻から前記時刻情報フレームを送信する時刻までの時間である送信処理時間を、固定値として記憶し、
前記時刻情報フレームを受信する時刻から、前記時刻情報を前記時刻情報フレームから取得する時刻までの時間である受信処理時間を計測し、
前記時刻情報に、前記固定値と前記受信処理時間を加えた値を、前記時刻計測部に設定することにより、前記複数のノード装置の時刻を同期させる
ことを特徴とする時刻同期方法。
【請求項７】
受信した時刻情報フレームに含まれている時刻情報を用いて前記時刻が同期された後に、計測している時刻を表す他の時刻情報を取得し、
前記他の時刻情報を含む時刻情報フレームを、前記他の時刻情報を取得した時刻から前記固定値で表される時間が経過した時刻に送信されるように生成し、
前記他の時刻情報を含む時刻情報フレームを送信する
ことを特徴とする請求項６に記載の時刻同期方法。
【請求項８】
前記複数のノード装置は、
物理量を測定するセンサーと、
前記送信元のノード装置から送信された時刻情報フレームを受信する受信部および前記他の時刻情報を含む時刻情報フレームを送信する送信部とは異なる送信部と受信部を有する無線処理部と、
前記時刻の計測、前記受信処理時間の計測、前記時刻の同期、前記他の時刻情報の取得、および、前記他の時刻情報を含む時刻情報フレームの生成を行う第１の処理回路と異なる第２の処理回路をさらに備えており、
前記時刻同期方法は、
前記第２の処理回路が、前記センサーで測定された物理量を処理し、
前記無線処理部が、前記第２の処理回路で処理されたデータを送受信する
ことを特徴とする請求項７に記載の時刻同期方法。
【請求項９】
前記時刻が補正されてから経過した時間である経過時間を計測し、前記経過時間がネットワーク中で許容される誤差の大きさの関数として決定された閾値を超えたことを検出すると、前記他の時刻情報を含む時刻情報フレームの生成を停止する
処理をさらに含むことを特徴とする請求項７もしくは８に記載の時刻同期方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、ノード装置と、複数のノード装置の間で行われる時刻の同期方法に関する。
【背景技術】
【０００２】
近年、ビルや橋梁などの建造物に複数のセンサーを設置し、得られた測定値をセンタサーバで収集して構造物で発生した変位を観測するシステム（構造物ヘルスモニタリング）が考案されている。この場合、各センサーは、得られた測定値をセンタサーバに送信することになる。そこで、このようなセンサーネットワークに、有線および無線のアドホックネットワークが適用されることがある。【０００３】
センサーネットワークで計測される物理量によっては、計測に時刻データが用いられることがある。例えば、構造物のたわみの大きさの計測や地震のゆれの計測などを行うために加速度センサーが用いられる場合、加速度の計算に時刻情報が使用される。同一のセンサーネットワークに含まれるセンサー間で許容される時刻の差は、サンプリング間隔と許容される誤差の大きさによって変動する。例えば、サンプリング間隔が５ｍｓで許容される誤差が５％である場合、センサー間の時刻の差を２５０μｓ以下に保つことが求められる。しかし、センサー間で時刻を同期させた後でも、センサーが動作している周波数の偏差などによって、センサー間で時刻の差が発生してしまう。このため、同じセンサーネットワークに含まれるセンサー間で、定期的に時刻同期が行われる。複数のセンサー間で時刻を同期させるための手法として、個々のセンサーが電波時計、ＧＰＳ（Global Positioning System）、ＮＴＰ（Network Time Protocol）などを用いて時刻調整をする方法がある。さらに、Media Access Control（ＭＡＣ）層での制御を伴う方法として、ＲＢＳ（Reference Broadcast Synchronization）、ＴＰＳＮ（Timing-sync Protocol for Sensor Networks）、ＦＴＳＰ（Flooding Time Synchronization Protocol）などが知られている。【０００４】
関連する技術として、第１の装置が時刻情報を含むトークンを第２の装置に送信し、第２の装置が、トークンを用いた時刻補正後、処理時間を加算した時刻情報を含むトークンを第３の装置に送信する方法が知られている。さらに、受信装置から時刻データ送信要求を受信すると、２進化によってゼロ挿入されないようなコードに変換した時刻データと送信遅延時間を含む固定長のフレームを受信装置に送信する送信装置も知られている。【０００５】
アドホックネットワークに関連する技術としては、送信対象フレームの識別情報に、送信先の隣接ノード装置、その送信対象フレームを最初に転送してきた転送元を対応付けて記憶するノード装置が提案されている。このノード装置は、フレームを受信すると、受信フレームの識別番号と送信対象フレームの識別番号を比較することにより、フレームの送信経路にループがあるかを確認する。
【先行技術文献】
【特許文献】
【０００６】
【特許文献１】特開平９−８３６０８号公報
【特許文献２】特開２００６−９３９６７号公報
【特許文献３】国際公開第２０１１／０１３１６５号
【発明の概要】
【発明が解決しようとする課題】
【０００７】
電波時計やＮＴＰを用いて個々のノード装置が時刻を補正することによりノード装置間の時刻を調整する場合、ノード装置間で発生する誤差の大きさは、物理量の計測に用いられるセンサーシステムで許容される誤差よりも大きい。従って、個々のノード装置が電波時計やＮＴＰによって時刻を調整しても、センサーシステムで求められる精度で時刻同期できない。個々のノード装置がＧＰＳを用いて時刻を同期させる場合、ノード装置間の同期の精度は高いが、各ノード装置の消費電力が大きくなるので、センサーネットワークに用いるノード装置には適さない。また、ＲＢＳ、ＴＰＳＮ、ＦＴＳＰなどの時刻同期方法では、独自の処理が行われるため、ハードウェアがカスタマイズされている場合がある。ハードウェアがカスタマイズされていると、ノード装置に含まれるチップの互換性がなくなるという問題がある。また、ＲＢＳ、ＴＰＳＮ、ＦＴＳＰなどの時刻同期方法では、時刻同期処理での使用電力が大きくなる、時刻を同期できるノード装置の数が少ないなどの問題もあるため、センサーネットワークで使用するノード装置への適用は困難である。【０００８】
時刻情報を含む固定長のフレームを送受信する方法は、送受信するフレームを固定長にすることが求められるため、センサーネットワークに適用しにくい場合がある。さらに、ネットワーク中の１つの装置がトークンを用いて時刻を調整する方法では、アドホックネットワークに含まれるノード装置の数が多い場合は適用できない。【０００９】
本発明は、ネットワークに含まれるノード装置の時刻同期を簡便に精度良く行うことを目的とする。
【課題を解決するための手段】
【００１０】
実施形態にかかるノード装置は、時刻計測部、受信部、記憶部、タイマー、時刻補正部を備える。時刻計測部は時刻を計測する。受信部は、前記時刻の補正に使用する時刻情報を含むフレームである時刻情報フレームを受信する。記憶部は、前記時刻情報フレームの送信元ノード装置が前記時刻情報を取得する時刻から前記時刻情報フレームを送信する時刻までの時間である送信処理時間を固定値として記憶している。タイマーは、前記時刻情報フレームを受信する時刻から、前記時刻情報を前記時刻情報フレームから取得する時刻までの時間である受信処理時間を計測する。時刻補正部は、前記時刻情報に、前記固定値と前記受信処理時間を加えた値を、前記時刻計測部に設定することにより前記時刻計測部で計測される時刻を補正する。
【発明の効果】
【００１１】
ネットワークに含まれるノード装置の時刻同期が簡便に、高精度で行われる。
【図面の簡単な説明】
【００１２】
【図１】実施形態に係る時刻の同期方法の例を示す図である。
【図２】実施形態に係るノード装置が用いられるネットワークの例を示す図である。
【図３】ノード装置の構成の例を示す図である。
【図４】ゲートウェイの構成の例を示す図である。
【図５】ノード装置で行われる時刻情報フレームの送受信に関するブロック図である。
【図６】ゲートウェイからの時刻情報フレームの送信に関するブロック図である。
【図７】時刻情報フレームのフォーマットの例を示す図である。
【図８】時刻情報フレームの送信の例を示す図である。
【図９】時刻同期の手順の例を説明する図である。
【図１０】ＣＰＵ７１の動作の例を説明するフローチャートである。
【図１１】ＣＰＵ８０の動作の例を説明するフローチャートである。
【図１２】時刻情報フレームを受信したノード装置の動作の例を説明するフローチャートである。
【図１３】時刻情報フレームを送信する際のノード装置の動作の例を説明するフローチャートである。
【図１４】ノード装置の構成の例を示す図である。
【発明を実施するための形態】
【００１３】
図１は、実施形態に係る時刻の同期方法の例を示す。送信側のノード装置は、時刻情報を含む時刻情報フレームを、受信側のノード装置に送信する。ここで、送信側のノード装置と受信側のノード装置は、予め、送信側のノード装置が時刻情報を取得してから、時刻情報フレームの送信までにかかる時間を固定値として記憶しているものとする。以下、ノード装置が時刻情報を取得してから、時刻情報を含むフレームを送信するまでにかかる時間のことを、「送信処理時間」と記載することがある。図１では、送信処理時間をβで表している。
【００１４】
まず、送信側のノード装置は、時刻同期を行うために、時刻情報が未設定の時刻情報フレームを生成する。さらに、送信側のノード装置は時刻情報を取得する。図１の例では、送信側のノード装置が時刻αを表す時刻情報を取得した場合を表している。送信側のノード装置は、取得した時刻情報を時刻情報フレーム中に設定し、時刻情報の設定が終わると時刻情報フレームを送信する。ここで、送信ノード装置は、予め記憶している送信処理時間（β）により表される時間で、時刻情報の取得から送信の開始までの処理を行うものとする。
【００１５】
一方、受信側のノード装置は、時刻情報フレームを受信すると、時刻情報フレームに含まれている時刻情報を抽出する。ここで、受信側のノード装置は、時刻情報フレームの受信の開始の際に、受信処理時間の計測を開始している。「受信処理時間」は、ノード装置が時刻情報フレームの受信を開始した時刻から、ノード装置が時刻の更新に使用できる時刻情報である更新時刻情報を取得した時刻までの時間とすることができる。また、受信側のノード装置が、時刻情報フレームの受信を開始した時刻から、時刻情報フレームに含まれている時刻情報（時刻α）に送信処理時間βを加えた値を求めた時刻までの時間を受信処理時間とすることもできる。受信処理時間を図１のγで示す。受信側のノード装置は、時刻情報フレームに含まれていた時刻情報に、送信処理時間と受信処理時間を加えた値を用いて時刻を調整する。すなわち、図１の例では、時刻α＋β＋γが時刻の補正値として用いられる。
【００１６】
時刻の補正が終了したノード装置は、他のノード装置に、時刻情報フレームを送信することにより、時刻情報を通知する。このときも、時刻情報フレームは、時刻情報が取得された時刻から送信処理時間が経過した時刻に送信される。時刻情報フレームを受信したノード装置も同様の処理を行うことにより、時刻を補正し、時刻情報フレームの送信元のノード装置との間で時刻を同期させる。なお、時刻同期の間隔は、求められる同期精度を満たす任意の間隔とされる。
【００１７】
このように、送信処理時間を固定値に設定し、予め送信側のノード装置と受信側のノード装置に記憶させておくことで、送信元のノード装置が時刻情報を取得してから時刻情報を送信するまでに経過した時間を、受信側のノード装置が補正することができる。さらに、受信側のノード装置は、時刻情報フレームの処理にかかる時間を計測した値を用いた補正も行う。従って、送信側のノード装置と受信側のノード装置を、高精度で時刻同期させることができる。
【００１８】
＜ネットワークの例と装置構成＞
図２は、実施形態に係るノード装置が用いられるネットワークの例を示す。図２の例では、ネットワークには、センタサーバ１、ネットワーク２、ＮＴＰサーバ３、ゲートウェイ７０、ノード装置１０ａ〜１０ｄが含まれる。ノード装置１０ａ〜１０ｄは、センサーを備えており、センサーから得られた物理量を、アドホックネットワークによってゲートウェイ７０に送信する。一方、ゲートウェイ７０は、アドホックネットワークから得られたデータを、ネットワーク２を介して、センタサーバ１に送信する。センタサーバ１は、個々のノード装置１０で測定されたデータを解析する。
【００１９】
ここで、ゲートウェイ７０とノード装置１０ａ〜１０ｄは、アドホックネットワークを形成しており、一定時間間隔ごとに時刻同期しているものとする。以下の説明では、図２の例に示すように、ゲートウェイ７０は、ＮＴＰサーバ３と通信することにより最新の時刻情報を取得するものとする。なお、時刻情報は、ある特定の時刻を一意に表すことができる任意の形式とすることができる。例えば、時刻情報は、２０１１年１２月７日１時２分３秒などの特定の時刻を表す情報（絶対時刻）であってもよく、また、特定のタイミングまでの時間を表すカウンタ値であっても良い。さらに、時刻情報は、年月日時分秒などの単位で表されていても、ｕｎｉｘ時間の形式で表されていても良いものとする。また、図２に示すゲートウェイ７０が時刻情報を取得する方法は一例であり、ゲートウェイ７０は、例えば、電波時計やＧＰＳから最新の時刻情報を取得することもできる。
【００２０】
図２の例では、アドホックネットワーク中の隣接ノード同士を双方向の矢印で結んでいる。以下の説明では、あるノード装置から送信されたフレームを受信できる範囲に位置するノード装置のことを、そのノード装置の「隣接ノード」と記載することがある。また、複数のノード装置が互いにフレームを送受信できる距離に位置することを「隣接する」と記載する。従って、図２の例では、ゲートウェイ７０とノード装置１０ａの間ではフレームの送受信が可能であるが、ゲートウェイ７０は、ノード装置１０ｂ〜１０ｄと直接フレームを送受信することができない。
【００２１】
図３は、ノード装置１０の構成の例を示す図である。ノード装置１０は、アンテナ１４（１４ａ、１４ｂ）、無線ＲＦ（Radio Frequency）回路４０、４４、Central Processing Unit（ＣＰＵ）５０、６０を備える。以下の例では、ノード装置１０は、時刻同期に関する処理を、ＣＰＵ５０、無線ＲＦ回路４０、アンテナ１４ａを用いて行うものとする。一方、センサー（図示せず）によって得られた測定値の処理やデータの送受信など、時刻同期以外の処理は、ＣＰＵ６０、無線ＲＦ回路４４、アンテナ１４ｂによって行われるものとする。なお、センサーは、ＣＰＵ６０に接続されているものとする。以下の説明では、時刻情報フレームはアンテナ１４ａを介して送受信され、時刻情報フレーム以外のフレームはアンテナ１４ｂから送受信されるものとする。なお、アンテナ１４ａとアンテナ１４ｂの間で送受信可能なフレームの種類が異なるようにする方法は、任意の方法を用いることができるものとする。例えば、アンテナ１４ａとアンテナ１４ｂの間で送受信する周波数を互いに異なるものとすることができ、また、アンテナ１４ａとアンテナ１４ｂで通信に用いられるチャネルを異なるチャネルとすることもできる。
【００２２】
アンテナ１４ａは受信した信号を無線ＲＦ回路４０に出力する。無線ＲＦ回路４０は、ＲＦインタフェース４１ａとベースバンド処理回路４２ａを備えている。ＲＦインタフェース４１ａは、アンテナ１４ａから受信した信号をベースバンド信号に変換する。ベースバンド処理回路４２ａは、ＲＦインタフェース４１ａから入力されたベースバンド信号を処理し、ＣＰＵ５０に出力する。また、時刻情報フレームの送信の際には、ベースバンド処理回路４２ａは、ＣＰＵ５０で生成された時刻情報フレームをベースバンド信号に変換してＲＦインタフェース４１ａに出力する。ＲＦインタフェース４１ａは、入力されたベースバンド信号を搬送波によって変換した信号をアンテナ１４ａに出力する。ＣＰＵ５０は、μＳカウンタ５１を有し、さらに、高精度クロック５２、read only memory（ＲＯＭ）５３、random access memory（ＲＡＭ）５４を用いて時刻情報フレームの解析、時刻同期、他のノード装置１０へ送信する時刻情報フレームの生成などの処理を行う。これらの処理については後述する。
【００２３】
アンテナ１４ｂは受信した信号を無線ＲＦ回路４４に出力する。無線ＲＦ回路４４は、ＲＦインタフェース４１ｂ、ベースバンド処理回路４２ｂ、ＭＡＣ処理部４３を備えている。ＲＦインタフェース４１ｂは、アンテナ１４ｂを介して受信した信号をベースバンド信号に変換する。また、ＲＦインタフェース４１は、ベースバンド処理回路４２ｂから入力された信号を、搬送波を用いて処理する。ベースバンド処理回路４２ｂは、得られたベースバンド信号を処理する。さらに、ベースバンド処理回路４２ｂは、ＲＦインタフェース４１ｂおよびＭＡＣ処理部４３との間でデータを入出力する。ＭＡＣ処理部４３は、Carrier Sense Media Access（ＣＳＭＡ）などの無線メディアアクセス制御を行う。ＣＰＵ６０は、ＲＯＭ６１、ＲＡＭ６２、高精度クロック６３、タイマーＩＣ６４を用いて、センサーでの測定結果などのデータの処理を行う。
【００２４】
図４は、ゲートウェイ７０の構成の例を示す図である。ゲートウェイ７０は、ノード装置１０と同様に、アンテナ１４（１４ａ、１４ｂ）、無線ＲＦ回路４０、４４、高精度クロック５２、６３、ＲＯＭ５３、６１、ＲＡＭ５４、６２、タイマーＩＣ６４を備えている。これらの動作は、ノード装置１０と同様である。ゲートウェイ７０は、さらに、ＣＰＵ７１、ＣＰＵ８０、有線ＭＡＣ処理回路６５、有線ＰＨＹ（physical layer）チップ６６を備える。ＣＰＵ７１は時刻情報フレームの送信のタイミングを計測して、ＣＰＵ８０に割り込み処理として時刻情報フレームの送信を指示する。また、ＣＰＵ７１は、ＮＴＰサーバ３から取得した時刻情報をＣＰＵ８０に出力する。ＣＰＵ８０は、時刻情報が取得されてから送信処理時間として予め記憶している時間で時刻情報フレームを送信する。ここで、ゲートウェイ７０は、有線ＭＡＣ処理回路６５および有線ＰＨＹチップ６６を介して、ネットワーク２に含まれている装置や、ＮＴＰサーバ３、センタサーバ１などと通信するものとする。ゲートウェイ７０は、ノード装置１０から送信された時刻情報フレームを受信するが、受信した時刻情報フレームは時刻の補正には用いずに破棄する。ゲートウェイ７０の動作については、後で詳しく説明する。
【００２５】
図５は、ノード装置１０で行われる時刻情報フレームの送受信に関するブロック図である。図５は、無線ＲＦ回路４０、ＣＰＵ５０、ＲＡＭ５４などにより実現される処理を機能ブロックとして表している。受信部１１、データ受信部１２、送信部１３は、無線ＲＦ回路４０により実現される。補正タイマー起動部２１、データ解析部２２、時刻補正部２４、時刻計測部３０、時刻ずれ検出部２５、時刻取得部２６、フレーム生成部２７は、ＣＰＵ５０により実現される。また、μＳカウンタ５１は、補正タイマー２３として動作する。ＲＡＭ５４は、記憶部２８として動作する。
【００２６】
受信部１１、データ受信部１２、補正タイマー起動部２１、データ解析部２２、補正タイマー２３、時刻補正部２４、記憶部２８、時刻計測部３０は、ノード装置１０が時刻情報フレームを受信したときに動作する。受信部１１は、フレームを受信すると、補正タイマー起動部２１に補正タイマー２３の起動を要求する。受信部１１は、さらに、受信したフレームをデータ受信部１２に出力する。ここで、受信部１１は、フレームを受信すると、受信したフレームが時刻情報フレームであるとみなしてこれらの処理を行う。なお、受信したフレームが時刻情報フレームではないとデータ解析部２２で判定された場合は、時刻同期は行われない。
【００２７】
データ受信部１２は、Cyclic Redundancy Check（ＣＲＣ）などにより、入力された時刻情報フレームにエラーがあるかを確認する。データ受信部１２は、エラーが検出されなかったフレームをデータ解析部２２に出力し、エラーが検出されたフレームは廃棄する。データ解析部２２は入力されたフレームが時刻情報フレームであるかを確認する。さらに、データ解析部２２は、時刻情報フレームを解析することにより、時刻情報を取得し、時刻補正部２４に出力する。データ解析部２２の動作は後で詳しく説明する。
【００２８】
一方、補正タイマー起動部２１は、受信部１１からの要求に応じて、補正タイマー２３を起動させる。補正タイマー２３は、時刻情報フレームを受信してから時刻情報が時刻補正部２４に出力されるまでの時間を計測する。記憶部２８は、予め、送信処理時間を記憶しているものとする。なお、以下の説明では、「送信処理時間」は、送信側のノード装置１０もしくはゲートウェイ７０で時刻情報フレームに設定される時刻情報が取得されてから、その時刻情報を含む時刻情報フレームが送信されるまでの時間であるものとする。時刻補正部２４は、データ解析部２２から時刻情報が入力されると、時刻情報、補正タイマー２３の計測結果、記憶部２８が記憶している送信処理時間を用いて、時刻計測部３０で計測されている時刻を補正する。以下、補正タイマー２３の計測結果を「受信処理時間」と記載することがある。
【００２９】
時刻計測部３０は、ＲＴＣ（Real Time Clock）時刻情報部３１と時刻カウンタ情報部３２を備える。ＲＴＣ時刻情報部３１は、絶対時刻を計時する。時刻カウンタ情報部３２は、時刻をカウンタ値として計時する。時刻補正部２４は、時刻情報、受信処理時間、送信処理時間の合計値を用いて、ＲＴＣ時刻情報部３１と時刻カウンタ情報部３２の値を補正する。なお、ＲＴＣ時刻情報部３１の補正を行う際の時刻情報は、絶対時刻であり、時刻カウンタ情報部３２の補正に用いられる時刻情報はカウンタ値であるものとする。
【００３０】
時刻ずれ検出部２５、時刻取得部２６、フレーム生成部２７は、ノード装置１０で時刻情報フレームを送信する際に動作する。時刻取得部２６は、時刻計測部３０から時刻情報を取得してフレーム生成部２７に出力することにより、時刻情報フレームの生成を要求する。時刻ずれ検出部２５は、時刻情報フレームの受信間隔が長すぎるなどの原因により、時刻計測部３０で計測している時刻と実際の時刻のずれが許容範囲を超えている恐れがあるかを検出する。時刻ずれ検出部２５は、時刻のずれが許容範囲を超えている恐れがあることを検出すると、時刻計測部３０で計測されている時刻情報を他のノード装置１０に通知しないことが望ましいため、フレーム生成部２７に時刻情報フレームの生成の停止を要求する。フレーム生成部２７は、時刻取得部２６から時刻情報が入力されると、時刻ずれ検出部２５から時刻情報フレームの生成の停止要求を受けていない場合は、時刻情報フレームを生成する。このとき、フレーム生成部２７は、時刻情報の取得から時刻情報フレームの送信までの時間が送信処理時間となるようにする。フレーム生成部２７は、時刻情報フレームを送信部１３に出力する。送信部１３は時刻情報フレームを、宛先のノード装置１０に送信する。なお、時刻情報フレームの宛先として、全ての隣接ノードが指定されるものとする。
【００３１】
一方、時刻ずれ検出部２５から時刻情報フレームの生成の停止を要求されている場合、フレーム生成部２７は、時刻取得部２６から入力された時刻情報を破棄し、時刻情報フレームを生成しない。
【００３２】
図６は、ゲートウェイ７０からの時刻情報フレームの送信に関するブロック図である。時刻取得部９２、フレーム生成部９４は、ＣＰＵ８０により実現される。ＲＡＭ５４は、記憶部９８として動作する。無線送信部９５は、ＲＦインタフェース４１ａにより実現される。時刻計測部９３は、ＣＰＵ７１により実現される。なお、時刻計測部９３は、ＲＴＣ時刻情報部９６と時刻カウンタ情報部９７を有するものとする。
【００３３】
時刻取得部９２は、ＣＰＵ７１から時刻情報を取得する。ここで、時刻情報が取得される前に、ＣＰＵ７１は、有線ＭＡＣ処理回路６５および有線ＰＨＹチップ６６を介して、ＮＴＰサーバ３から現在の時刻を表す時刻情報を取得しているものとする。ＲＴＣ時刻情報部９６は、ＮＴＰサーバ３から取得された時刻情報により調整される。また、時刻カウンタ情報部９７においても、ＮＴＰサーバ３から取得した時刻情報に合わせてカウンタ値が変更される。時刻取得部９２は、取得した時刻情報をフレーム生成部９４に出力する。
【００３４】
フレーム生成部９４は、時刻取得部９２から時刻情報が入力されると、時刻情報を含む時刻情報フレームを生成し、無線送信部９５に時刻情報フレームを出力する。無線送信部９５は、時刻情報フレームを全ての隣接するノード装置１０に送信する。このとき、フレーム生成部９４は、時刻取得部９２が時刻情報を取得した時刻から、時刻情報フレームが送信されるまでの時間が送信処理時間となるように処理を行う。送信処理時間は、記憶部９８に記憶されている。
【００３５】
＜実施形態＞
図７は、時刻情報フレームのフォーマットの例を示す。図７に示すように、時刻情報フレームは、ヘッダと時刻情報データを含む。ヘッダは、ローカル宛先（Local Destination、ＬＤ）フィールド、ローカル送信元（Local Source、ＬＳ）フィールド、グローバル宛先（Global Destination、ＧＤ）フィールド、グローバル送信元（Global Source、ＧＳ）フィールドを含む。さらに、フレームタイプフィールド、チャネル（ＣＨ）番号フィールド、フレームサイズフィールドもヘッダに含まれる。以下の説明で、「グローバル宛先」は、フレームの最終的な宛先のノード装置１０を示すものとする。一方、「ローカル宛先」は、フレームをグローバル宛先に送信するために行われる１ホップの転送の際に、宛先として指定されるノード装置１０を示す。「ローカル送信元」は、フレームが１ホップ転送される場合の転送元のノード装置１０を指す。「グローバル送信元」は、フレームを生成したノード装置１０もしくはゲートウェイ７０を示す。時刻情報フレームは、送信元のノード装置１０の隣接ノード装置にブロードキャストされるので、ＧＤとＬＤは、全ての隣接ノードを表すブロードキャストアドレスである。また、ＧＳとＬＳは時刻情報フレームを生成したノード装置１０、もしくは、ゲートウェイ７０のアドレスである。
【００３６】
フレームタイプフィールドは、ペイロードに含まれるデータの種類を示す情報を記録する。時刻情報フレームの場合、フレームタイプフィールドの値は時刻情報フレームを特定する値に設定される。データ解析部２２は、フレームタイプフィールドの値を用いて時刻情報フレームを識別する。チャネル番号フィールドには、時刻情報フレームの送受信に用いられるチャネルを識別する値が記録される。チャネル番号によって時刻情報フレームとその他のフレームが区別される場合、受信部１１は、チャネル番号フィールドの値に応じて、時刻情報フレームを受信したかを判断する。フレームサイズフィールドは、時刻情報フレームの大きさを記録する。
【００３７】
時刻情報データは、時刻情報とパディングを含む。なお、パディングはオプションである。時刻情報フィールドは、時刻フィールド、カウンタフィールド、シーケンス番号フィールド、ホップカウンタフィールドを備える。時刻フィールドは、時刻情報フレームを生成するノード装置１０中の時刻取得部２６が、時刻情報フレームに含めるためにＲＴＣ時刻情報部３１から取得した時刻を記録する。ゲートウェイ７０で生成された時刻情報フレームの場合、ゲートウェイ７０がＮＴＰサーバ３から取得した時刻が時刻フィールドに記録される。カウンタフィールドには、時刻取得部２６が時刻カウンタ情報部３２から取得したカウンタ値を記録する。ゲートウェイ７０で生成された時刻情報フレームの場合、ゲートウェイ７０がＮＴＰサーバ３から取得した時刻に対応付けられたカウント値がカウンタフィールドに記録される。シーケンス番号フィールドは、何回目の時刻同期のために送受信されているかを識別する情報が格納される。シーケンス番号フィールドの値は、ゲートウェイ７０のフレーム生成部９４で設定される。ノード装置１０は、シーケンス番号フィールドの値を変更せず、受信した時刻情報フレームに含まれている値を用いる。ホップカウンタフィールドは、ゲートウェイからのホップ数を格納する。シーケンス番号フィールドやホップカウンタフィールドの値を確認することにより、ノード装置１０は、ゲートウェイ７０から最短経路以外の経路で受信した時刻情報フレームを廃棄する。この場合、ノード装置１０は、時刻を補正しない。動作の具体例は後述する。なお、図７は時刻情報フレームのフォーマットの一例であり、例えば、時刻情報フレームにＣＲＣフィールドを追加するなどの変更を加えてもよい。
【００３８】
図８は、時刻情報フレームの送信の例を示す。図８に示すように、時刻情報フレームは、送信周期Ｔごとにゲートウェイ７０からゲートウェイ７０に隣接するノード装置１０に送信されている。時刻情報フレームを受信したノード装置１０は、時刻を補正した後で、隣接するノード装置１０に時刻情報フレームを送信する。このようにして、周期Ｔごとに、アドホックネットワークに含まれるゲートウェイ７０とノード装置１０の全体で時刻の同期が行われる。
【００３９】
図９は、時刻同期の手順の例を説明する図である。以下、図９を参照しながら、図２に示すネットワークで、ゲートウェイ７０から送信された第１の時刻情報フレームをノード装置１０ａが受信して時刻を補正し、ノード装置１０ａが第２の時刻情報フレームを送信する場合の例を説明する。ノード装置１０ｂは第２の時刻情報フレームを用いて時刻を補正した後、第３の時刻情報フレームを送信するものとする。なお、図９中の括弧中の数字は、以下の手順の番号を示すものとする。
【００４０】
（１）ゲートウェイ７０のＣＰＵ７１は、ＮＴＰサーバ３にアクセスしてＲＴＣ時刻情報部９６と時刻カウンタ情報部９７の値を補正する。
【００４１】
（２）ＣＰＵ７１は、時刻同期の周期Ｔを算出する。時刻同期の周期Ｔは、アドホックネットワークに含まれている全てのノード装置１０およびゲートウェイ７０の間で、時刻のずれを許容範囲以下に抑えることができる周期である。ノード装置１０間での時刻データの差は、ノード装置１０が動作している周波数の偏差や、ノード装置１０に搭載されているＣＰＵで処理されるタスクの影響によって発生してしまう。しかし、時刻の同期に関する処理は、ノード装置１０ではＣＰＵ５０によって行われ、ゲートウェイ７０ではＣＰＵ８０によって行われるので、タスクの影響による時刻のずれは無視できる。そこで、ＣＰＵ７１は、各ノード装置１０が動作する周波数の偏差によって発生する時刻のずれの大きさが許容範囲を超えないように、時刻同期の周期を決定する。例えば、発振周波数が２０ＭＨｚ±０．５ｐｐｍ（parts per million）のクロックを用いた場合、１秒間で０．０５μ秒の差が出てくる可能性がある。仮に、１秒間に０．０５μ秒の差が出るとすると、差が２５０μ秒となるには、
２５０（μＳ）／０．０５（μＳ／Ｓ）＝５０００
より、５０００秒かかる。従って、発振周波数が２０ＭＨｚ±０．５ｐｐｍである場合に誤差範囲を２５０μ秒以下にするためには、５０００秒に１回以上の頻度で時刻を同期すればよい。ここで、ノード装置１０やゲートウェイ７０では、時刻情報フレームの送信の際にメディアアドレス制御が行われないため、コリジョンが発生した場合でも時刻のずれが許容範囲を超えないように設定されることが望ましい。そこで、ＣＰＵ７１は、以下の式によって周期Ｔを求めることができる。
Ｔ＝Ｅ／（ｅ×Ｎ）
ここで、Ｔは時刻同期を行う周期、Ｅは時刻の誤差の許容範囲、ｅは１秒に発生する可能性がある誤差の大きさ、Ｎは時刻の誤差が許容範囲であると見込まれる時間以内に行う時刻同期の回数を表す。
【００４２】
（３）ＣＰＵ７１は、手順（２）で求めた周期ＴをタイマーＩＣ６４にセットする。ＣＰＵ７１は、タイマーＩＣ６４から周期Ｔが経過したことを通知されると、ＣＰＵ８０中の時刻取得部９２に時刻情報の取得を要求する。
【００４３】
ＣＰＵ７１からの要求を受けると、時刻同期が行われることを予測して、ＣＰＵ８０は、割り込み処理を行わないために、割り込みマスクを設定する。さらに、フレーム生成部９４において、ホップ数とシーケンス番号を格納しているが、時刻情報やアドレスなどの情報を含まない時刻情報フレームを生成しておく。ここで、ホップ数はゲートウェイ７０を基点とするために、１が設定される。シーケンス番号は、時刻情報フレームの生成順の通し番号とする。例えば、第１の時刻情報フレームは、ＣＰＵ８０が初期化された後に生成する２番目の時刻情報フレームである場合、シーケンス番号は２となる。
【００４４】
（４）時刻取得部９２は、ＲＴＣ時刻情報部９６と時刻カウンタ情報部９７から時刻情報を取得する。時刻取得部９２は、取得した時刻情報をフレーム生成部９４に出力する。フレーム生成部９４は、送信処理時間を記憶部９８から読み出し、時刻情報が取得されてから送信処理時間が経過した時刻に第１の時刻情報フレームが送信されるように、第１の時刻情報フレームを生成して、無線送信部９５に出力する。図９の例では、送信処理時間が１０７０３カウントであるものとする。フレーム生成部９４は、送信処理時間の間に、宛先アドレス（ＧＤ、ＬＤ）、送信元アドレス（ＧＳ、ＬＳ）を設定する処理、時刻情報を時刻情報データに設定する処理などを行う。
【００４５】
（５）無線送信部９５は、第１の時刻情報フレームを、隣接するノード装置１０に送信する。また、ＣＰＵ８０の割り込みマスクを解除して、割り込み処理を可能な状態に変更する。
【００４６】
（６）ノード装置１０ａの受信部１１は、第１の時刻情報フレームを受信する。
【００４７】
（７）受信部１１は、補正タイマー起動部２１に時刻情報フレームの受信を通知する。また、受信部１１は、第１の時刻情報フレームをデータ受信部１２に出力する。補正タイマー起動部２１は補正タイマー２３を起動し、補正タイマー２３は第１の時刻情報フレームの受信開始時刻からの経過時刻の計測を開始する。補正タイマー２３は、μＳカウンタ５１を用いて経過時刻をカウントする。なお、補正タイマー２３が起動される前に、既にノード装置１０ａが時刻情報フレームを受信していた場合、μＳカウンタ５１でカウントが開始されている。この場合、補正タイマー２３は、μＳカウンタ５１のカウンタ値をＲＡＭ５４に退避させる。図９の例では、既にノード装置１０ａが時刻情報フレームを受信しており、μＳカウンタ５１の値が０８９３０６５７２となっている。そこで、補正タイマー２３は、カウンタ値０８９３０６５７２をＲＡＭ５４に記録する。データの退避後、補正タイマー２３は、μＳカウンタ５１のカウンタ値を０に再設定して、受信処理時間の計測を開始する。
【００４８】
（８）データ受信部１２は、入力されたフレームにエラーがあるかを確認し、エラーが検出されなかったフレームをデータ解析部２２に出力する。ここでは、第１の時刻情報フレームがデータ解析部２２に出力されたものとする。
【００４９】
（９）データ解析部２２は、フレームタイプフィールドの値が時刻情報フレームを表す値であるかを確認する。フレームタイプフィールドの値によって入力されたフレームが時刻情報フレームであることを確認すると、データ解析部２２は、時刻情報フレームを用いて時刻同期を行ってもよいかを判定する。データ解析部２２は、これまでに処理した時刻情報フレームのシーケンス番号のうちの最大値を記憶しており、最大値よりもシーケンス番号が大きな時刻情報フレームについては、時刻同期に用いても良いと判断する。例えば、シーケンス番号の最大値が１である場合にシーケンス番号が２の時刻情報フレームが入力されると、データ解析部２２は、前回処理した時刻情報フレームよりも後に生成された時刻情報フレームを受信したと判定して、時刻同期に用いる。一方、シーケンス番号の最大値が１である場合にシーケンス番号が１の時刻情報フレームが入力されてきた場合、既に処理済の時刻情報フレームに基づくフレームを受信したと判断して廃棄する。データ解析部２２は、さらに、ホップ数を用いてフレームを廃棄するかを判定することもできる。この場合、データ解析部２２は予めホップ数の上限値を記憶しており、上限値を超えた時刻情報フレームを破棄する。
【００５０】
入力された時刻情報フレームが時刻同期に用いることができないフレームである場合、データ解析部２２は時刻情報を抽出せずに、時刻同期に用いることができないフレームを受信したことを時刻補正部２４に通知する。すると、時刻補正部２４は、ＲＡＭ５４に退避させたカウント値に、補正タイマー２３のカウント値を加えた値を時刻カウンタ情報部３２に入力する。すなわち、時刻補正部２４は、時刻補正を行わない。
【００５１】
入力された時刻情報フレームが時刻同期に用いることができるフレームである場合、データ解析部２２は、時刻情報を取得し、時刻補正部２４に出力する。図９の例では、時刻情報として、カウンタフィールドの値（００００１２３５）を取得している。
【００５２】
（１０）時刻補正部２４は、データ解析部２２から時刻情報が入力されると補正タイマー２３から、受信処理時間を取得する。図９の例では、第１の時刻情報フレームが受信された時刻から、時刻情報が時刻補正部２４に出力された時刻までの補正タイマー２３のカウント値（０１２００２２１８）が受信処理時間として取得される。また、送信処理時間は１０７０３カウントであることを、記憶部２８は記憶している。そこで、時刻補正部２４は、次式から、時刻カウンタ情報部３２に設定する値を求める。
α＋β＋γ＝
（００００１２３５）＋（０１２００２２１８）＋（１０７０３）
＝０１２０１４１５６
ここで、αは時刻情報、βは送信処理時間、γは受信処理時間である。時刻補正部２４は、時刻カウンタ情報部３２のカウンタ値を、得られた値に変更する。また、時刻補正部２４は、時刻カウンタ情報部３２の変更に合わせてＲＴＣ時刻情報部３１の値を変更することもできる。
【００５３】
（１１）ノード装置１０ａの時刻カウンタ情報部３２の値が設定されると、ノード装置１０ａは第２の時刻情報フレームの生成を開始する。フレーム生成部２７は、ホップ数とシーケンス番号を含むが時刻情報やアドレス情報が含まれていない時刻情報フレームを生成する。ここで、ホップ数はゲートウェイ７０を基点とするために、第１の時刻情報フレームのホップ数を１つインクリメントした値が設定される。シーケンス番号は、第１の時刻情報フレームのシーケンス番号が設定される。従って、ここでは、ノード装置１０ａのフレーム生成部２７により、ホップ数＝２、シーケンス番号＝２が設定される。時刻取得部２６は、ランダムに決定した待ち時間が経過した後、時刻カウンタ情報部３２のカウンタ値を取得する。時刻取得部２６は、さらに、ＲＴＣ時刻情報部３１の時刻情報フレームも取得する。ここでは、時刻取得部２６が取得したカウンタ値は、０１２０１５１５６であるものとする。
【００５４】
（１２）時刻取得部２６は、取得した時刻情報をフレーム生成部２７に出力する。フレーム生成部２７は、時刻取得部２６から入力された時刻情報やアドレス情報を設定することにより、第２の時刻情報フレームを完成させる。なお、フレーム生成部２７は、時刻情報が時刻取得部２６で取得された時刻から送信処理時間が経過した時刻に、第２の時刻情報フレームが送信されるように、処理を行う。
【００５５】
（１３）時刻ずれ検出部２５は、時刻補正部２４で時刻情報フレームを用いて補正が行われたかを監視している。さらに、時刻ずれ検出部２５は、時刻カウンタ情報部３２の値が最後に補正されたときから経過した時間をカウントしている。時刻ずれ検出部２５は、予め上限値を記憶しており、カウントされた値が上限値を超えると、フレーム生成部２７に時刻情報フレームの生成の停止を要求する。なお、図９の例では、時刻カウンタ情報部３２の値が手順（１０）で補正されているので、時刻情報フレームの生成は停止されないものとする。
【００５６】
（１４）ノード装置１０ａから第２の時刻情報フレームがブロードキャスト送信される。ノード装置１０ｂは第２の時刻情報フレームを用いて時刻を補正した後、第３の時刻情報フレームを送信するものとする。
【００５７】
図９の例では、時刻Ｔ１にノード装置１０ａの時刻カウンタ情報部３２のカウント値が０１２０１４１５６に補正されているのに対し、時刻Ｔ１でのゲートウェイ７０中の時刻カウンタ情報部９７のカウント値は０１２０１４１５５である。従って、ゲートウェイ７０からブロードキャストされた第１の時刻情報フレームにより、ノード装置１０ａが高精度にゲートウェイ７０と時刻同期されているといえる。また、ノード装置１０ａがブロードキャストした第２の時刻情報フレームがノード装置１０ｂでノード装置１０ａの時刻情報フレームの受信処理と同様に処理されるため、ノード装置１０ａとノード装置１０ｂの間でも、高精度で時刻同期される。同様に、アドホックネットワークに含まれるノード装置１０の間で時刻情報フレームを送受信し、送信処理時間、受信処理時間、時刻情報の３つを用いた時刻同期が行われる。従って、本実施形態では、受信側のノード装置１０で計測した受信処理時間と、固定値となっている送信処理時間が、時刻情報と共に時刻補正に用いられることにより、アドホックネットワークに含まれるノード装置１０間の時刻が高精度で同期される。
【００５８】
図１０は、ＣＰＵ７１の動作の例を説明するフローチャートである。ゲートウェイ７０が起動されると、ＣＰＵ７１が初期化される（ステップＳ１）。ＣＰＵ７１は、タイマーＩＣ６４から現在時刻を取得する（ステップＳ２）。例えば、タイマーＩＣ６４から得られた時刻が2011/10/28 19:00:10であるとする。次に、ＣＰＵ７１は、ＮＴＰを用いてＮＴＰサーバ３と同期し、取得した時刻を最新時刻とする（ステップＳ３）。例えば、取得された時刻が2011/10/28 19:01:10:123であれば、ＣＰＵ７１は、現在時刻を2011/10/28 19:00:10から2011/10/28 19:01:10:123に変更する。ＣＰＵ７１は、時刻同期精度Ａを計算する（ステップＳ４）。ここで、Ａ＝Ｅ／ｅであり、Ｅは時刻の誤差の許容範囲、ｅは１秒に発生する可能性がある誤差の大きさであるものとする。ＣＰＵ７１は、時刻同期精度Ａを、時刻の誤差が許容範囲であると見込まれる時間以内に行う時刻同期の回数で割ることにより、タイマー周期を求める（ステップＳ５）。ＣＰＵ７１は、時刻同期フレームを送信する周期として、タイマーに周期Ｔを設定する（ステップＳ６）。ＣＰＵ７１は、周期Ｔで発生するタイマー割り込みを待つ（ステップＳ６）。割り込みが発生すると、ＣＰＵ７１は、ＣＰＵ８０に時刻情報フレームの生成を要求する（ステップＳ７）。時刻情報フレームの生成を要求した後は、ステップＳ６〜Ｓ９の処理を繰り返す。
【００５９】
図１１は、ＣＰＵ８０の動作の例を説明するフローチャートである。なお、図１１は動作の一例であり、実装に応じて、ステップＳ２２とステップＳ２３の順序を変更するなどの変更が加えられる場合がある。
【００６０】
ＣＰＵ８０は、カウンタ値を初期化することにより、シーケンス番号（ｎ）＝１、マイクロカウンタのカウンタ値＝０に設定する（ステップＳ１１）。ＣＰＵ８０はＣＰＵ７１からの割り込み処理を待つ（ステップＳ１２）。ＣＰＵ８０は、割り込み処理の要求があると、ＣＰＵ７１から時刻情報フレームの生成を要求されたかを確認する（ステップＳ１３）。時刻情報フレームの生成以外の割り込み処理である場合、ＣＰＵ８０は、要求された割り込み処理を行った後、ステップＳ１２に戻る（ステップＳ１３でＮｏ、ステップＳ１４）。時刻情報フレームの生成が要求されると、ＣＰＵ８０は、他の割り込み処理を受け付けないように、割り込みマスク設定する（ステップＳ１３でＹｅｓ、ステップＳ１５）。ＣＰＵ８０は、補正カウンタにより、ＣＰＵ７１からの時刻情報フレームの生成が要求される間隔を計測している。補正カウンタのカウンタ値が時刻同期精度Ａより大きいと、ＣＰＵ８０は、誤動作と判断し、割り込みマスクを解除した上でステップＳ１２に戻る（ステップＳ１６でＮｏ、ステップＳ１７）。一方、補正カウンタのカウンタ値が時刻同期精度Ａ以下であると、ＣＰＵ８０は、時刻同期に使用する無線ＲＦ回路４０の初期化と設定を行う（ステップＳ１８）。ＣＰＵ８０は、時刻同期フレームフォーマットを作成する（ステップＳ１９）。フレーム生成部９４は、時刻同期フレームのホップカウンタフィールドにHopカウンタ値＝１、シーケンス番号ｎをセットする（ステップＳ２０）。時刻取得部９２は、ＣＰＵ７１がステップＳ３で取得した時刻を取得する（ステップＳ２１）。フレーム生成部９４は、時刻取得部９２が取得した時刻を時刻情報フレームの時刻フィールドに４バイトで年月日、時分秒をミリ秒単位までセットする（ステップＳ２２）。フレーム生成部９４は、時刻情報フレームのカウンタフィールドにμＳカウンタの値をセットする（ステップＳ２３）。フレーム生成部９４は、ゲートウェイ７０に割り当てられたアドレスをＧＳフィールドとＬＳフィールドにセットし、ＧＤフィールドとＬＤフィールドにブロードキャストアドレス（0xFFFFFFFFFFFF）をセットする。フレーム生成部９４は、さらに、フレームサイズなどをセットして時刻同期フレームを完成させる（ステップＳ２４）。フレーム生成部９４は、ステップＳ２４で生成したフレームを無線ＲＦ回路４０に出力し、割り込みマスクを解除する（ステップＳ２５、Ｓ２６）。さらに、フレーム生成部９４は、シーケンス番号ｎを１つインクリメントしてステップＳ１２に戻る（ステップＳ２７）。
【００６１】
図１２は、時刻情報フレームを受信したノード装置１０の動作の例を説明するフローチャートである。なお、図１２の例では、図９を参照しながら説明した場合と異なり、データ解析部２２でＣＲＣのチェックを行う場合について説明しているが、ＣＲＣのチェックなどはデータ受信部１２で行われても良い。また、ステップＳ４０、Ｓ４２の判断の順序は変更されることがある。さらに、実装の形態やノード装置１０の処理能力に応じて、ステップＳ４２が削除される場合もある。ステップＳ４３、Ｓ４５、Ｓ４６の判断の順序も実装に応じて変更される場合がある。
【００６２】
ノード装置１０の起動の際に、ＣＰＵ５０が初期化される（ステップＳ３１）。このとき、データ解析部２２は、受信した時刻情報フレームに含まれるシーケンス番号の最大値を０に設定し、ホップ数の履歴に関するデータも０に初期化する。また、データ解析部２２は、ホップ数の上限値や時刻同期精度Ａの設定、計算等を行う。以下の説明では、ホップ数の上限は、データ解析部２２が、初期化の際にＲＯＭ５３から読み出しているものとし、ホップ数＝２０とする。次に、ノード装置１０は、無線ＲＦ回路４０を初期化する（ステップＳ３２）。補正タイマー起動部２１とデータ解析部２２は、受信部１１でのフレームの受信をトリガとする割り込みを設定する（ステップＳ３３）。ノード装置１０は、無線ＲＦ回路４０でフレームを受信するまで待機する（ステップＳ３４）。受信部１１でフレームが受信されると、補正タイマー起動部２１は、補正タイマー２３を起動する。補正タイマー２３は、カウンタ値（μＳカウンタ５１のカウンタ値）を退避させ、リセットする（ステップＳ３５〜Ｓ３７）。補正タイマー２３は、リセット後にカウントを再開することにより受信処理時間の計測を開始する。データ解析部２２は、受信したフレームをメモリに展開し、解析を行う（ステップＳ３８、Ｓ３９）。データ解析部２２は、ＣＲＣをチェックし、異常が発見されるとフレームを破棄してステップＳ３３へ戻る（ステップＳ４０でＮｏ、ステップＳ４１）。ＣＲＣのチェック結果が正常である場合、データ解析部２２は、データ解析部２２は、フレームの宛先アドレスをチェックし、フレームが自ノード宛のフレーム、または、ブロードキャストフレームであるかを確認する（ステップＳ４２）。フレームが自ノード宛のフレームではなく、ブロードキャストフレームでもなければ、データ解析部２２はフレームを破棄してステップＳ３３に戻る（ステップＳ４２でＮｏ、Ｓ４１）。一方、フレームが自ノード宛のフレーム、または、ブロードキャストフレームのいずれかである場合、データ解析部２２は、フレームタイプフィールドの値をチェックする（ステップＳ４３）。フレームタイプフィールドの値から時刻情報フレームであることを確認すると、データ解析部２２は、ホップ数が上限値以下であるかを確認する（ステップＳ４３でＹｅｓ、ステップＳ４４）。ホップ数が上限値以下である場合、データ解析部２２は、シーケンス番号フィールドの値を読み出し、これまでに処理した時刻情報フレームのシーケンス番号の最大値と比較する（ステップＳ４５）。ここで、
（読み出したシーケンス番号）＞（処理済のフレームのシーケンス番号の最大値）
であれば、データ解析部２２は、解析中の時刻情報フレームを時刻補正に用いても良いと判断し、シーケンス番号とホップカウンタ値をＲＡＭ５４に格納する（ステップＳ４６でＹｅｓ、ステップＳ４７）。さらに、データ解析部２２は、時刻情報を時刻情報フレームから抽出して時刻補正部２４に出力する。時刻補正部２４は、補正タイマー２３の現在値を読み出すことにより、受信処理時間を求める（ステップＳ４８）。時刻補正部２４は、時刻情報フレームから得られた時刻情報に、受信処理時間と固定値として記憶している送信処理時間を加えた値を補正値とする。時刻情報がカウンタ値である場合、送信処理時間に相当するカウンタ数、補正タイマー２３のカウント値、時刻情報フレームのカウンタフィールドの値の合計値を計算する（ステップＳ４９）。時刻補正部２４は、時刻カウンタ情報部３２に得られたカウンタ値を設定することにより時刻情報フレームを設定する（ステップＳ５０）。また、時刻補正部２４は、時刻カウンタ情報部３２の変更量に合わせて、ＲＴＣ時刻情報部３１も補正する。一方、ステップＳ４３、Ｓ４４、Ｓ４６のいずれかでＮｏと判定された場合、ステップＳ３６で退避したカウンタ値に補正タイマー２３の現在の値を加算した値をμＳカウンタ５１に設定する（ステップＳ５１、Ｓ５０）。
【００６３】
図１３は、時刻情報フレームを送信する際のノード装置１０の動作の例を説明するフローチャートである。なお、ステップＳ６４はオプションとすることができる。時刻情報フレームの生成の開始に際して、時刻取得部２６は、他の処理による不測の遅延を避けるため、ＣＰＵ５０の割り込みマスクを設定する（ステップＳ６１）。フレーム生成部２７は、各フィールドの情報が含まれていない時刻情報フレームを作成する（ステップＳ６２）。フレーム生成部２７は、ＲＡＭ５４に格納されているホップ数を１つインクリメントした値をホップカウンタフィールドの値とし、ＲＡＭ５４に格納されているシーケンス番号をシーケンス番号フィールドに設定する（ステップＳ６３）。なお、ステップＳ６３で使用しているホップ数とシーケンス番号の値は、図１２のステップＳ４７で格納された値である。ノード装置１０は、他のノード装置１０と同時に時刻情報フレームを受信した場合に、同じタイミングで時刻情報フレームを送信してしまうことを避けるため、時刻の取得をランダム時間待つ。例えば、時刻取得部２６は、０〜１０００の間でランダム値を発生させ、得られたランダム値に対応する時間の間、待機する（ステップＳ６４）。
【００６４】
待機時間が経過すると、時刻取得部２６は、ＲＴＣ時刻情報部３１から現在時刻を年月日時分秒ミリ秒まで読み出し、さらに、時刻カウンタ情報部３２のカウンタ値も読み出す（ステップＳ６５〜Ｓ６７）。時刻取得部２６は、得られた時刻情報をフレーム生成部２７に出力し、フレーム生成部２７は、入力された時刻情報を、時刻情報フレームの時刻フィールドとカウンタフィールドに記録する（ステップＳ６８）。フレーム生成部２７は、アドレス情報、フレームサイズなどの値を設定して、時刻情報フレームを完成させる（ステップＳ６９）。時刻ずれ検出部２５は、ＲＴＣ時刻情報部３１および時刻カウンタ情報部３２が最後に補正された時刻から経過した時間を計測しており、経過時間が時刻同期精度Ａを超えると、フレーム生成部２７に対して時刻情報フレームの生成の停止を要求する。フレーム生成部２７は、生成したフレームを送信部１３に出力する前に、時刻ずれ検出部２５から時刻情報フレームの生成の停止が要求されているかを確認する（ステップＳ７０）。時刻情報フレームの生成の停止が要求されていない場合、フレーム生成部２７は、送信部１３を介して時刻情報フレームを送信する（ステップＳ７０でＹｅｓ、ステップＳ７１）。フレーム生成部２７は、ＣＰＵ５０への割り込みマスクを解除する（ステップＳ７２）。一方、ステップＳ７０で時刻情報フレームの生成の停止が要求されていることが確認されると、フレーム生成部２７は、時刻情報フレームを廃棄して、ＣＰＵ５０への割り込みマスクを解除する（ステップＳ７０でＮｏ、ステップＳ７２）。なお、ステップＳ６５〜Ｓ７１の処理は、予め決められている送信処理時間で行われる。
【００６５】
時刻同期の誤差要因として、（ａ）伝搬遅延によるゆらぎ、（ｂ）受信信号の歪みによって生じる誤差、（ｃ）計算処理によって生じる誤差、（ｄ）無線のメディアアクセス制御による遅延のゆらぎが挙げられる。ノード装置１０とゲートウェイ７０では、時刻情報フレームの生成を行うＣＰＵ５０、８０を、他の処理を行うＣＰＵ６０、７１と別にし、さらに、時刻情報フレームの送信処理の間は、ＣＰＵ５０、８０での割り込み処理をマスクしている。そのため、時刻情報が取得されてから時刻情報フレームが送信されるまでの処理での計算処理によって生じる誤差を解消し、総マシンサイクルを固定値（送信処理時間）に設定することができる。さらに、図１にも示すように、時刻情報フレームを受信したノード装置１０は、フレームの受信開始から、時刻情報フレーム中の時刻情報を取得するまでの時間を、受信処理時間として計測している。ノード装置１０は時刻情報に送信処理時間と受信処理時間を加えた値を用いて、時刻を補正するため、時刻情報フレームの送信元と受信先のノード装置１０の間では、計算処理による誤差は発生しない。
【００６６】
さらに、ゲートウェイ７０とノード装置１０は、いずれも、ＣＳＭＡなどの無線メディアアクセス制御を行わない。従って、複数の時刻情報フレームが同時に送信された場合にコリジョンを避けるための待ち時間など、ＣＰＵ５０やＣＰＵ８０で把握することができない待ち時間は発生しない。このため、ノード装置１０とゲートウェイ７０を用いたネットワークでは、無線のメディアアクセス制御による遅延のゆらぎも解消されている。
【００６７】
ノード装置１０とゲートウェイ７０を用いたネットワークでも、伝搬遅延によるゆらぎと受信信号の歪みによって生じる誤差については、予測ができない。しかし、伝搬遅延によるゆらぎや受信信号の歪みによって生じる誤差は、他の要因によって発生する時刻の誤差の大きさに比べて非常に小さく、無視することができる。このため、ノード装置１０とゲートウェイ７０を用いたネットワークでは、高い精度で時刻同期をすることができる。
【００６８】
また、図３、図４などに示したように、ノード装置１０とゲートウェイ７０のいずれも、汎用の部品を組み立てて製造することができる。このため、ノード装置１０やゲートウェイ７０は、カスタマイズされたハードウェアを用いている装置に比べて、他の装置との間の互換性が高い。さらに、汎用部品を使用できるため、製造コストを低く抑えることができ、ハードウェアのカスタマイズを行わない分の時間だけ早く製造することができる。
【００６９】
さらに、ノード装置１０とゲートウェイ７０を用いたネットワークで行われる時刻同期の方法は、ＲＢＳなどの計算方法と異なり、アドホックネットワークに含まれるノード装置１０の数が演算等に影響しない。このため、ノード装置１０とゲートウェイ７０は、大規模なアドホックネットワークの形成に用いることも可能である。また、時刻同期のために時刻情報フレーム以外のフレームを送受信しないため、ノード装置１０とゲートウェイ７０のいずれでも、ＧＰＳやＴＰＳＮにより時刻同期をする装置に比べて、時刻同期のための消費電力を抑えることができる。
【００７０】
＜その他＞
なお、実施形態は上記に限られるものではなく、様々に変形可能である。以下にその例をいくつか述べる。
【００７１】
図１４に、ノード装置１０のハードウェア構成の変形例を示す。図１４の例では、ノード装置１０は、アンテナ１４を１つ備えており、時刻情報フレームとその他のデータのいずれも同じアンテナ１４から送信される。この場合、時刻情報フレームの生成から時刻情報フレームの送信が終了するまでの間、ＣＰＵ５０は割り込みを禁止するため、時刻情報フレーム以外のフレームは送信されない。従って、図３に示すノード装置１０が用いられるシステムに比べて、ノード装置１０からのセンタサーバ１へのデータの送信が遅れる可能性がある。しかし、ノード装置１０が複数のアンテナ１４や無線ＲＦ回路４４を備えなくても良いため、ノード装置１０を小型化でき、ノード装置１０の製造コストを下げることができる。
【００７２】
図７に示した時刻情報フレームのフレームフォーマットは一例であり、実装に応じて、時刻情報フレームに含まれる情報要素は変更される場合がある。例えば、時刻フィールドとカウンタフィールドの両方が時刻情報データに含まれている場合を例として実施形態を説明したが、時刻情報フレームは、時刻フィールドとカウンタフィールドのいずれか一方を備えるように変形されても良い。この場合、絶対時間とカウンタ値のいずれか一方を用いて時刻の補正値が計算される。
【００７３】
図３、図４は、ノード装置１０およびゲートウェイ７０のハードウェア構成の例であり、実装に応じて変更される場合がある。例えば、ＣＰＵ５０、ＣＰＵ６０、ＣＰＵ７１、ＣＰＵ８０のいずれか１つ以上に任意の数のフラッシュメモリが接続されていても良い。
【００７４】
ノード装置１０のＲＴＣ時刻情報部３１、時刻カウンタ情報部３２はＣＰＵ５０によって実現される場合を例として、以上の説明を行ったが、ＲＴＣ時刻情報部３１と時刻カウンタ情報部３２はＣＰＵ６０に含まれていても良い。この場合、時刻取得部２６は、時刻を取得する際に、ＣＰＵ６０にアクセスすることにより、ＲＴＣ時刻情報部３１、時刻カウンタ情報部３２から時刻情報を取得する。同様に、ＲＴＣ時刻情報部９６と時刻カウンタ情報部９７も、ＣＰＵ８０に含まれても良く、また、ＣＰＵ７１に含まれても良い。
【符号の説明】
【００７５】
１  センタサーバ
２  ネットワーク
３  ＮＴＰサーバ
１０  ノード装置
１１  受信部
１２  データ受信部
１３  送信部
１４  アンテナ
２１  補正タイマー起動部
２２  データ解析部
２３  補正タイマー
２４  時刻補正部
２５  時刻ずれ検出部
２６、９２  時刻取得部
２７、９４  フレーム生成部
２８、９８  記憶部
３０、９３  時刻計測部
３１、９６  ＲＴＣ時刻情報部
３２、９７  時刻カウンタ情報部
４０、４４  無線ＲＦ回路
４１  ＲＦインタフェース
４２  ベースバンド処理回路
４３  ＭＡＣ処理部
５０、６０、７１、８０  ＣＰＵ
５１  μＳカウンタ
５２、６３  高精度クロック
５３、６１  ＲＯＭ
５４、６２  ＲＡＭ
６４  タイマＩＣ
６５  有線ＭＡＣ処理回路
６６  有線ＰＨＹチップ
９５  無線送信部
【図１】
2013099026.tif 000003
【図２】
2013099026.tif 000004
【図３】
2013099026.tif 000005
【図４】
2013099026.tif 000006
【図５】
2013099026.tif 000007
【図６】
2013099026.tif 000008
【図７】
2013099026.tif 000009
【図８】
2013099026.tif 000010
【図９】
2013099026.tif 000011
【図１０】
2013099026.tif 000012
【図１１】
2013099026.tif 000013
【図１２】
2013099026.tif 000014
【図１３】
2013099026.tif 000015
【図１４】
2013099026.tif 000016
【手続補正書】
【提出日】平成26年7月2日(2014.7.2)
【手続補正１】
【補正対象書類名】図面
【補正対象項目名】図７
【補正方法】変更
【補正の内容】
【図７】
2013099026.tif 000017
【手続補正２】
【補正対象書類名】図面
【補正対象項目名】図１０
【補正方法】変更
【補正の内容】
【図１０】
2013099026.tif 000018
【手続補正３】
【補正対象書類名】図面
【補正対象項目名】図１３
【補正方法】変更
【補正の内容】
【図１３】
2013099026.tif 000019
【国際調査報告】
2013099026.tif 000020
2013099026.tif 000021