(57)【要約】【課題】パケットの揺らぎなどによる影響を軽減し、時刻同期の精度を向上すること。【解決手段】マスターノードは、スレーブノードと制御メッセージの送受信を行う通信部を備え、スレーブノードは、マスターノードと制御メッセージの送受信を行う通信部と、通信部が制御メッセージを送受信した際に取得される時刻情報を用いて平均遅延時間およびオフセットを算出する演算部と、演算部によって算出された平均遅延時間およびオフセットを対応付けて複数記憶する記憶部と、記憶部に記憶されている複数の平均遅延時間の中から最小の平均遅延時間を選択し、選択した平均遅延時間に対応するオフセットを選択する選択部と、選択部が選択したオフセットに基づいて自装置の時刻を補正する時刻補正部と、を備える時刻同期システム。【選択図】図２
2014165582.tif 000002
【特許請求の範囲】
【請求項１】
双方向通信を行うマスターノードとスレーブノードとを備え、前記スレーブノードにおける時刻を前記マスターノードにおける時刻に同期させる時刻同期システムであって、
前記マスターノードは、
前記スレーブノードと制御メッセージの送受信を行う通信部を備え、
前記スレーブノードは、
前記マスターノードと制御メッセージの送受信を行う通信部と、
前記通信部が前記制御メッセージを送受信した際に取得される時刻情報を用いて平均遅延時間およびオフセットを算出する演算部と、
前記演算部によって算出された前記平均遅延時間および前記オフセットを対応付けて複数記憶する記憶部と、
前記記憶部に記憶されている複数の平均遅延時間の中から最小の平均遅延時間を選択し、選択した前記平均遅延時間に対応するオフセットを選択する選択部と、
前記選択部が選択した前記オフセットに基づいて自装置の時刻を補正する時刻補正部と、
を備える時刻同期システム。
【請求項２】
前記選択部は、前記記憶部に平均遅延時間およびオフセットの各値が、所定の回数記憶された後に前記オフセットを選択し、
前記時刻補正部は、前記選択部が選択した前記オフセットに基づいて自装置の時刻を補正する請求項１に記載の時刻同期システム。
【請求項３】
双方向通信を行うマスターノードとスレーブノードとを備え、前記スレーブノードにおける時刻を前記マスターノードにおける時刻に同期させる時刻同期システムが行う時刻同期方法であって、
前記マスターノードが、
前記スレーブノードと制御メッセージの送受信を行う通信ステップと、
前記スレーブノードが、
前記マスターノードと制御メッセージの送受信を行う通信ステップと、
前記通信ステップによって前記制御メッセージを送受信した際に取得される時刻情報を用いて平均遅延時間およびオフセットを算出する演算ステップと、
前記演算ステップによって算出された前記平均遅延時間および前記オフセットを対応付けて記憶部に記憶する記録ステップと、
前記記憶部に記憶されている複数の平均遅延時間の中から最小の平均遅延時間を選択し、選択した前記平均遅延時間に対応するオフセットを選択する選択ステップと、
前記選択ステップによって選択された前記オフセットに基づいて自装置の時刻を補正する時刻補正ステップと、
を有する時刻同期方法。
【請求項４】
前記スレーブノードは、前記選択ステップにおいて、前記記憶部に平均遅延時間およびオフセットの各値が、所定の回数記憶された後に前記オフセットを選択し、
前記スレーブノードは、前記時刻補正ステップにおいて、前記オフセットに基づいて自装置の時刻を補正する請求項３に記載の時刻同期方法。
【請求項５】
マスターノードに対して時刻同期を行うスレーブノードであって、
前記マスターノードと制御メッセージの送受信を行う通信部と、
前記通信部が前記制御メッセージを送受信した際に取得される時刻情報を用いて平均遅延時間およびオフセットを算出する演算部と、
前記演算部によって算出された前記平均遅延時間および前記オフセットを対応付けて複数記憶する記憶部と、
前記記憶部に記憶されている複数の平均遅延時間の中から最小の平均遅延時間を選択し、選択した前記平均遅延時間に対応するオフセットを選択する選択部と、
前記選択部が選択した前記オフセットに基づいて自装置の時刻を補正する時刻補正部と、
を備えるスレーブノード。
【請求項６】
前記選択部は、前記記憶部に平均遅延時間およびオフセットの各値が、所定の回数記憶された後に前記オフセットを選択し、
前記時刻補正部は、前記オフセットに基づいて自装置の時刻を補正する請求項５に記載のスレーブノード。
【請求項７】
双方向通信を行うマスターノードとスレーブノードとを備え、前記スレーブノードにおける時刻を前記マスターノードにおける時刻に同期させる時刻同期システムとして、前記マスターノードに相当する第一のコンピュータ及び前記スレーブノードに相当する第二のコンピュータを動作させるためのコンピュータプログラムであって、
前記第一のコンピュータに対し、
前記スレーブノードと制御メッセージの送受信を行う通信ステップを実行させ、
前記第二のコンピュータに対し、
前記マスターノードと制御メッセージの送受信を行う通信ステップと、
前記通信ステップによって前記制御メッセージを送受信した際に取得される時刻情報を用いて平均遅延時間およびオフセットを算出する演算ステップと、
前記演算ステップによって算出された前記平均遅延時間および前記オフセットを対応付けて記憶部に記録する記録ステップと、
前記記憶部に記憶されている複数の平均遅延時間の中から最小の平均遅延時間を選択し、選択した前記平均遅延時間に対応するオフセットを選択する選択ステップと、
前記選択ステップによって選択された前記オフセットに基づいて自装置の時刻を補正する時刻補正ステップと、
を実行させるためのコンピュータプログラム。
【請求項８】
前記選択ステップにおいて、前記記憶部に平均遅延時間およびオフセットの各値が、所定の回数記憶された後に前記オフセットを選択し、
前記時刻補正ステップにおいて、前記オフセットに基づいて自装置の時刻を補正する請求項７に記載のコンピュータプログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、時刻同期の技術に関する。
【背景技術】
【０００２】
従来、ネットワーク接続された複数の機器の時刻をマイクロ秒以下の精度で同期させる技術として、ＩＥＥＥ１５８８で定義されたＰＴＰ（Precision Time Protocol）が知られている（例えば、非特許文献１参照）。ＰＴＰでは、マスターノードとスレーブノードとの間で時刻情報を含むメッセージが定期的に交換される。スレーブノードは、マスターノード及びスレーブノードにおけるメッセージが送受信された時刻情報から、マスターノードに対するスレーブノードの時刻のずれ（Offset）を計算する。そして、スレーブノードは、計算したOffsetに基づいてスレーブノードの時刻を補正して、スレーブノードの時刻をマスターノードの時刻に同期させる。
【先行技術文献】
【非特許文献】
【０００３】
【非特許文献１】“IEEE Standard for a Precision Clock Synchronization Protocol for Networked Measurement and Control Systems，” IEEE Standard 1588-2008.
【発明の概要】
【発明が解決しようとする課題】
【０００４】
しかしながら、上述したＰＴＰによる時刻同期は、ネットワーク環境によっては適切に機能しないことがある。例えば、ＰＴＰによる時刻同期は、Offsetを求めるために、マスターノードからスレーブノードへの伝送遅延と、スレーブノードからマスターノードへの伝送遅延とが等しいと仮定している。それに対して、一般的なネットワークでは、パケットの揺らぎなどの影響により、マスターノードからスレーブノードへの伝送遅延と、スレーブノードからマスターノードへの伝送遅延とが異なる値となる可能性が高い。このような場合、スレーブノードの時刻を補正する際に求められるOffset（オフセット）の値には誤差が含まれる。
【０００５】
さらに、パケットの揺らぎなどの影響が大きい場合、求められるOffsetの値に含まれる誤差も大きくなってしまう。したがって、スレーブノードは、パケットの揺らぎなどの影響によって誤差の大きいOffsetの値でスレーブノードの時刻を補正してしまうおそれがあった。このような問題が発生すると、マスターノードとスレーブノードとの間で行われる時刻同期の精度が低下してしまう。このような問題は、ＰＴＰに限らず、時刻同期を行う全ての通信プロトコルに共通する問題である。
【０００６】
上記事情に鑑み、本発明は、パケットの揺らぎなどによる影響を軽減し、時刻同期の精度を向上する技術の提供を目的としている。
【課題を解決するための手段】
【０００７】
本発明の一態様は、双方向通信を行うマスターノードとスレーブノードとを備え、前記スレーブノードにおける時刻を前記マスターノードにおける時刻に同期させる時刻同期システムであって、前記マスターノードは、前記スレーブノードと制御メッセージの送受信を行う通信部を備え、前記スレーブノードは、前記マスターノードと制御メッセージの送受信を行う通信部と、前記通信部が前記制御メッセージを送受信した際に取得される時刻情報を用いて平均遅延時間およびオフセットを算出する演算部と、前記演算部によって算出された前記平均遅延時間および前記オフセットを対応付けて複数記憶する記憶部と、前記記憶部に記憶されている複数の平均遅延時間の中から最小の平均遅延時間を選択し、選択した前記平均遅延時間に対応するオフセットを選択する選択部と、前記選択部が選択した前記オフセットに基づいて自装置の時刻を補正する時刻補正部と、を備える時刻同期システムである。
【０００８】
本発明の一態様は、上記の時刻同期システムであって、前記選択部は、前記記憶部に平均遅延時間およびオフセットの各値が、所定の回数記憶された後に前記オフセットを選択し、前記時刻補正部は、前記選択部が選択した前記オフセットに基づいて自装置の時刻を補正する。
【０００９】
本発明の一態様は、双方向通信を行うマスターノードとスレーブノードとを備え、前記スレーブノードにおける時刻を前記マスターノードにおける時刻に同期させる時刻同期システムが行う時刻同期方法であって、前記マスターノードが、前記スレーブノードと制御メッセージの送受信を行う通信ステップと、前記スレーブノードが、前記マスターノードと制御メッセージの送受信を行う通信ステップと、前記通信ステップによって前記制御メッセージを送受信した際に取得される時刻情報を用いて平均遅延時間およびオフセットを算出する演算ステップと、前記演算ステップによって算出された前記平均遅延時間および前記オフセットを対応付けて記憶部に記憶する記録ステップと、前記記憶部に記憶されている複数の平均遅延時間の中から最小の平均遅延時間を選択し、選択した前記平均遅延時間に対応するオフセットを選択する選択ステップと、前記選択ステップによって選択された前記オフセットに基づいて自装置の時刻を補正する時刻補正ステップと、を有する時刻同期方法である。
【００１０】
本発明の一態様は、上記の時刻同期方法であって、前記スレーブノードは、前記選択ステップにおいて、前記記憶部に平均遅延時間およびオフセットの各値が、所定の回数記憶された後に前記オフセットを選択し、前記スレーブノードは、前記時刻補正ステップにおいて、前記オフセットに基づいて自装置の時刻を補正する。
【００１１】
本発明の一態様は、マスターノードに対して時刻同期を行うスレーブノードであって、前記マスターノードと制御メッセージの送受信を行う通信部と、前記通信部が前記制御メッセージを送受信した際に取得される時刻情報を用いて平均遅延時間およびオフセットを算出する演算部と、前記演算部によって算出された前記平均遅延時間および前記オフセットを対応付けて複数記憶する記憶部と、前記記憶部に記憶されている複数の平均遅延時間の中から最小の平均遅延時間を選択し、選択した前記平均遅延時間に対応するオフセットを選択する選択部と、前記選択部が選択した前記オフセットに基づいて自装置の時刻を補正する時刻補正部と、を備えるスレーブノードである。
【００１２】
本発明の一態様は、上記のスレーブノードであって、前記選択部は、前記記憶部に平均遅延時間およびオフセットの各値が、所定の回数記憶された後に前記オフセットを選択し、前記時刻補正部は、前記オフセットに基づいて自装置の時刻を補正する。
【００１３】
本発明の一態様は、双方向通信を行うマスターノードとスレーブノードとを備え、前記スレーブノードにおける時刻を前記マスターノードにおける時刻に同期させる時刻同期システムとして、前記マスターノードに相当する第一のコンピュータ及び前記スレーブノードに相当する第二のコンピュータを動作させるためのコンピュータプログラムであって、前記第一のコンピュータに対し、前記スレーブノードと制御メッセージの送受信を行う通信ステップを実行させ、前記第二のコンピュータに対し、前記マスターノードと制御メッセージの送受信を行う通信ステップと、前記通信ステップによって前記制御メッセージを送受信した際に取得される時刻情報を用いて平均遅延時間およびオフセットを算出する演算ステップと、前記演算ステップによって算出された前記平均遅延時間および前記オフセットを対応付けて記憶部に記憶する記録ステップと、前記記憶部に記憶されている複数の平均遅延時間の中から最小の平均遅延時間を選択し、選択した前記平均遅延時間に対応するオフセットを選択する選択ステップと、前記選択ステップによって選択された前記オフセットに基づいて自装置の時刻を補正する時刻補正ステップと、を実行させるためのコンピュータプログラムである。
【００１４】
本発明の一態様は、上記のコンピュータプログラムであって、前記選択ステップにおいて、前記記憶部に平均遅延時間およびオフセットの各値が、所定の回数記憶された後に前記オフセットを選択し、前記時刻補正ステップにおいて前記オフセットに基づいて自装置の時刻を補正する。
【発明の効果】
【００１５】
本発明により、パケットの揺らぎなどによる影響を軽減し、時刻同期の精度を向上させることが可能となる。
【図面の簡単な説明】
【００１６】
【図１】ＩＥＥＥ１５８８の時刻同期アルゴリズムによる通信シーケンスの動作を表すシーケンス図である。
【図２】マスターノード１０及びスレーブノード２０の機能構成を表す概略ブロック図である。
【図３】時間情報ＤＢの構成例を示す図である。
【図４】本実施形態におけるスレーブノード２０による時刻同期処理の流れを示すフローチャートである。
【発明を実施するための形態】
【００１７】
以下、本発明の一実施形態を、図面を参照しながら説明する。
まず、図１を用いてＩＥＥＥ１５８８の時刻同期アルゴリズムについて説明する。図１は、ＩＥＥＥ１５８８の時刻同期アルゴリズムによる通信シーケンスの動作を表すシーケンス図である。図１では、マスターノード１０とスレーブノード２０とが双方向通信を行っており、スレーブノード２０が定期的にマスターノード１０の時刻にスレーブノード２０の時刻を同期させる。
【００１８】
マスターノード１０は、スレーブノード２０に対して、定期的にSyncメッセージを送信する（ステップＳ１００）。マスターノード１０は、Syncメッセージの送信時刻（以下、「Sync送信時刻」という。）Tm(0)を記録する（ステップＳ１０１）。次に、マスターノード１０は、スレーブノード２０に対して、Follow_upメッセージを送信する（ステップＳ１０２）。この際、マスターノード１０は、Follow_upメッセージの中に、Sync送信時刻Tm(0)を格納する。
【００１９】
スレーブノード２０は、Syncメッセージを受信すると、この受信処理をトリガとしてSyncメッセージの受信時刻（以下、「Sync受信時刻」という。）Ts(0)を記録する（ステップＳ１０３）。次に、スレーブノード２０はFollow_upメッセージを受信し、Follow_upメッセージ中に格納されるSync送信時刻Tm(0)を抽出し記録する。次に、スレーブノード２０は、マスターノード１０に対して、Delay_Requestメッセージを送信する（ステップＳ１０４）。そして、スレーブノード２０は、Delay_Requestメッセージの送信時刻（以下、「Delay送信時刻」という。）Ts(1)を記録する（ステップＳ１０５）。
【００２０】
マスターノード１０は、Delay_Requestメッセージを受信すると、この受信処理をトリガとしてDelay_Requestメッセージの受信時刻（以下、「Delay受信時刻」という。）Tm(1)を記録する（ステップＳ１０６）。次に、マスターノード１０は、スレーブノード２０に対してDelay_Responseメッセージを送信する（ステップＳ１０７）。この際、マスターノード１０は、Delay_Responseメッセージの中に、Delay受信時刻Tm(1)を格納する。
【００２１】
スレーブノード２０は、Delay_Responseメッセージを受信すると、Delay_Responseメッセージ中に格納されるDelay受信時刻Tm(1)を抽出し記録する。
スレーブノード２０は、Sync送信時刻Tm(0)、Sync受信時刻Ts(0)に基づいて、以下の式１によってマスターノード１０における時刻（以下、「マスター時刻」という。）とスレーブノード２０における時刻（以下、「スレーブ時刻」という。）との差分MS_Diffを算出する。
【数１】
2014165582.tif 000003
【００２２】
また、スレーブノード２０は、Delay送信時刻Ts(1)、Delay受信時刻Tm(1)に基づいて、以下の式２によってスレーブ時刻とマスター時刻との差分SM_Diffを求める。
【数２】
2014165582.tif 000004
【００２３】
式１のMS_Delayはマスターノード１０からスレーブノード２０への伝送遅延を表し、式２のSM_Delayはスレーブノード２０からマスターノード１０への伝送遅延を表し、式１及び式２のOffsetはマスターノード１０に対するスレーブノード２０の時刻オフセット（進み）を表す。なお、伝送遅延MS_Delay及びSM_Delayは、マスターノード１０とスレーブノード２０との間の伝播遅延と、マスターノード１０とスレーブノード２０との間のネットワーク上の中継ノードで生じるキューイング遅延などから構成される。
【００２４】
以上のように、マスターノード１０に対するスレーブノード２０の時刻のずれであるOffsetに関して、式１及び式２の二つの式が得られる。しかし、この二つの式には、Offsetの他にMS_Delay及びSM_Delayという未知のパラメータが含まれている。したがって、三つの未知のパラメータに対し二つの式しか存在しないため、Offsetを算出することができない。そのため、ＩＥＥＥ１５８８では、マスターノード１０からスレーブノード２０への伝送遅延MS_Delayと、スレーブノード２０からマスターノード１０への伝送遅延SM_Delayとが等しく、いずれの値もDelayであると仮定して、上記の式１及び式２を以下の式３及び式４に変形する。
【００２５】
【数３】
2014165582.tif 000005
【数４】
2014165582.tif 000006
式３及び式４の連立方程式を解くことによって、以下の式５が導出される。
【数５】
2014165582.tif 000007
【００２６】
スレーブノード２０は、導出された式５に基づいてOffsetを算出する。スレーブノード２０は、算出したOffsetに基づいてスレーブ時刻を補正することによって、スレーブ時刻をマスター時刻に同期させる。以上が、ＩＥＥＥ１５８８に規定される時刻同期アルゴリズムである。
【００２７】
図２は、マスターノード１０及びスレーブノード２０の機能構成を表す概略ブロック図である。まず、マスターノード１０の機能構成を説明する。
マスターノード１０は、バスで接続されたＣＰＵ（Central Processing Unit）やメモリや補助記憶装置などを備え、時刻同期用プログラムを実行する。時刻同期用プログラムの実行によって、マスターノード１０は、マスタークロック生成部１１、時計部１２、パケット生成部１３、通信部１４を備える装置として機能する。なお、マスターノード１０の各機能の全て又は一部は、ＡＳＩＣ（Application Specific Integrated Circuit）やＰＬＤ（Programmable Logic Device）やＦＰＧＡ（Field Programmable Gate Array）等のハードウェアを用いて実現されても良い。また、時刻同期用プログラムは、コンピュータ読み取り可能な記録媒体に記録されても良い。コンピュータ読み取り可能な記録媒体とは、例えばフレキシブルディスク、光磁気ディスク、ＲＯＭ、ＣＤ−ＲＯＭ等の可搬媒体、コンピュータシステムに内蔵されるハードディスク等の記憶装置である。また、時刻同期用プログラムは、電気通信回線を介して送受信されても良い。
【００２８】
マスタークロック生成部１１は、例えば、ＶＣＸＯ（Voltage controlled xtal oscillators）等の電圧可変型の水晶発振器等を用いて構成される。また、マスタークロック生成部１１は、マスタークロックを生成する。具体的には、マスタークロック生成部１１は、マスターノード１０における１秒の時間幅を決定する。なお、マスタークロック生成部１１は、マスターノード１０の外部に存在しても良い。
【００２９】
時計部１２は、マスタークロック生成部１１が生成したマスタークロックに従い、マスター時刻を決定する。具体的には、時計部１２は、マスターノード１０において何時何分何秒であるかを決める。時計部１２は、マスター時刻の時刻情報をパケット生成部１３に出力する。
【００３０】
パケット生成部１３は、ＰＴＰメッセージを生成する。ＰＴＰメッセージとは、具体的には、Syncメッセージ、Follow_upメッセージ、Delay_Responseメッセージである。Syncメッセージは、時刻同期化の動作を開始するために送信されるメッセージである。Follow_upメッセージは、Syncメッセージが送信された後に、Sync送信時刻Tm(0)の時刻情報を通知するために送信されるメッセージである。Delay_Responseメッセージは、マスターノード１０がスレーブノード２０から送信されるＰＴＰメッセージに応答するために送信されるメッセージである。
【００３１】
パケット生成部１３は、定期的に通信部１４を介してSyncメッセージをスレーブノード２０に送信し、同時に時計部１２を参照してSync送信時刻Tm(0)を記録する。また、パケット生成部１３は、Syncメッセージ送信後に、Sync送信時刻Tm(0)を格納したFollow_upメッセージを生成する。パケット生成部１３は、通信部１４を介してスレーブノード２０にFollow_upメッセージを送信する。
【００３２】
また、パケット生成部１３は、通信部１４によって受信されるDelay_Requestメッセージの受信時刻（Delay受信時刻）Tm(1)を時計部１２を参照して記録する。その後、パケット生成部は記録した受信時刻Tm(1)を格納したDelay_Responseメッセージを生成し、通信部１４を介してスレーブノード２０にDelay_Responseメッセージを送信する。
通信部１４は、スレーブノード２０との間で通信を行う。例えば、通信部１４は、スレーブノード２０からDelay_Requestメッセージを受信し、パケット生成部１３に転送する。また、通信部１４は、Syncメッセージ、Follow_upメッセージ、Delay_Responseメッセージをスレーブノード２０に送信する。
【００３３】
次に、スレーブノード２０の機能構成を説明する。
スレーブノード２０は、バスで接続されたＣＰＵやメモリや補助記憶装置などを備え、時刻同期用プログラムを実行する。時刻同期用プログラムの実行によって、スレーブノード２０は、スレーブクロック生成部２１、時計部２２、通信部２３、制御部２４、演算部２５、時間情報記憶部２６、判定部２７、選択部２８、時刻補正部２９を備える装置として機能する。なお、スレーブノード２０の各機能の全て又は一部は、ＡＳＩＣやＰＬＤやＦＰＧＡ等のハードウェアを用いて実現されても良い。また、時刻同期用プログラムは、コンピュータ読み取り可能な記録媒体に記録されても良い。コンピュータ読み取り可能な記録媒体とは、例えばフレキシブルディスク、光磁気ディスク、ＲＯＭ、ＣＤ−ＲＯＭ等の可搬媒体、コンピュータシステムに内蔵されるハードディスク等の記憶装置である。また、時刻同期用プログラムは、電気通信回線を介して送受信されても良い。
【００３４】
スレーブクロック生成部２１は、例えば、ＶＣＸＯ等の電圧可変型の水晶発振器等を用いて構成される。スレーブクロック生成部２１は、スレーブクロックを生成する。具体的には、スレーブクロック生成部２１は、スレーブノード２０における１秒の時間幅を決定する。なお、スレーブクロック生成部２１は、スレーブノード２０の外部に存在しても良い。
【００３５】
時計部２２は、スレーブクロック生成部２１が生成したスレーブクロックに従い、スレーブ時刻を決定する。具体的には、時計部２２は、スレーブノード２０において何時何分何秒であるかを決める。時計部２２は、スレーブ時刻の時刻情報を制御部２４に出力する。
【００３６】
通信部２３は、マスターノード１０との間で通信を行う。例えば、通信部２３は、マスターノード１０からSyncメッセージ、Follow_upメッセージ、Delay_Responseメッセージを受信し、制御部２４に転送する。また、通信部２３は、Delay_Requestメッセージをマスターノード１０に送信する。
制御部２４は、スレーブノード２０の各機能部を制御する。また、制御部２４は、Delay_Requestメッセージを生成し、通信部２３を介してマスターノード１０にDelay_Requestメッセージを送信する。この際、制御部２４は、時計部２２を参照してDelay送信時刻Ts(1)を記録する。Delay_Requestメッセージは、通信部２３がマスターノード１０から送信されるFollow_upメッセージを受信した後に、マスターノード１０にDelay_Responseメッセージを要求するために送信されるメッセージである。
【００３７】
また、制御部２４は、通信部２３からSyncメッセージが転送された際に時計部２２を参照してSync受信時刻Ts(0)を記録する。また、制御部２４は、Follow_upメッセージ中に格納されているSync送信時刻Tm(0)を抽出し記録する。また、制御部２４は、Delay_Responseメッセージ中に格納されているDelay受信時刻Tm(1)を抽出し記録する。その後、制御部２４は、各時刻情報（Sync送信時刻Tm(0)、Sync受信時刻Ts(0)、Delay送信時刻Ts(1)、Delay受信時刻Tm(1)）を演算部２５に出力する。
【００３８】
演算部２５は、制御部２４から出力された各時刻情報を用いて平均遅延時間およびOffsetを算出する。平均遅延時間は、マスターノード１０からスレーブノード２０への伝送遅延MS_Diffと、スレーブノード２０からマスターノード１０への伝送遅延SM_Diffとの平均時間である。具体的には、演算部２５は、以下の式６に基づいて平均遅延時間ｔ＿ｄを算出する。
【数６】
2014165582.tif 000008
【００３９】
時間情報記憶部２６は、磁気ハードディスク装置や半導体記憶装置などの記憶装置を用いて構成される。時間情報記憶部２６は、時間情報ＤＢ（Data Base：データベース）を記憶している。時間情報ＤＢには、演算部２５が算出した平均遅延時間およびOffsetの各値が複数格納されている。時間情報記憶部２６は、演算部２５が平均遅延時間およびOffsetを算出する度に、平均遅延時間およびOffsetの各値を対応付けて時間情報ＤＢに追加して記憶する。
【００４０】
判定部２７は、所定の回数、平均遅延時間およびOffsetの各値が時間情報ＤＢに格納されたか否かを判定する。所定の回数とは、例えば、判定部２７が予め記憶している回数であっても良いし、ユーザによって任意に決定された回数であっても良い。平均遅延時間およびOffsetの各値が時間情報ＤＢに所定の回数格納された場合、判定部２７は時計部２２のスレーブ時刻を補正するように選択部２８に指示する。一方、平均遅延時間およびOffsetの各値が時間情報ＤＢに所定の回数格納されていない場合、判定部２７は、時計部２２のスレーブ時刻を補正することを選択部２８に指示しない。
【００４１】
選択部２８は、判定部２７の指示に応じて時間情報ＤＢに格納されている複数の平均遅延時間の中から１つの平均遅延時間を選択する。選択部２８は、例えば、複数の平均遅延時間の中から最小の平均遅延時間を選択する。そして、選択部２８は、選択した平均遅延時間に対応付けて格納されているOffsetの値を取得する。その後、選択部２８は、取得したOffsetの値を時刻補正部２９に出力する。
時刻補正部２９は、選択部２８から出力されたOffsetの値を用いて時計部２２のスレーブ時刻を補正する。時刻補正部２９のこの処理によって、スレーブノード２０の時計部２２のスレーブ時刻は、マスターノード１０の時計部１２のマスター時刻に同期する。
【００４２】
図３は、時間情報ＤＢの構成例を示す図である。
時間情報ＤＢは、レコード３０を複数有する。レコード３０は、番号、平均遅延時間、Offsetの各値を有する。番号の値は、レコード３０によって表される平均遅延時間およびOffsetの各値が格納された順番を表す。平均遅延時間の値は、演算部２５によって算出された平均遅延時間の項目を表す。Offsetの値は、演算部２５によって算出されたOffsetの項目を表す。
【００４３】
図３に示す例では、時間情報ＤＢには番号“１”から番号“Ｎ”までＮ個の平均遅延時間（“ｔ＿ｄ１”〜“ｔ＿ｄＮ”）およびOffset（“ｔ＿ｏ１”〜“ｔ＿ｏＮ”）が格納されている。例えば、図３において、時間情報ＤＢの最上段の行は、番号の値が“１”、平均遅延時間の値が“ｔ＿ｄ１”、Offsetの値が“ｔ＿ｏ１”である。即ち、平均時間情報ＤＢに１番目に格納された平均遅延時間の値が“ｔ＿ｄ１”であり、Offsetの値が“ｔ＿ｏ１”であることが表されている。
【００４４】
次に、図３を用いて選択部２８の処理について詳細に説明する。
選択部２８は、判定部２７が所定の回数（例えば、Ｎ回）、平均遅延時間およびOffsetの各値が時間情報ＤＢに格納されたと判定すると、以下の処理を行う。
選択部２８は、時間情報ＤＢに格納されている番号“１”から番号“Ｎ”までに対応する各レコード３０の中から最小の平均遅延時間のレコード３０を選択する。例えば、図３において、円４０で示されている“ｔ＿ｄＫ”の値が時間情報ＤＢに格納されている複数の平均遅延時間の中で最小の平均遅延時間である場合、選択部２８は“ｔ＿ｄＫ”の値が格納されているレコード３０を選択する。そして、選択部２８は、選択したレコード３０の平均遅延時間に対応付けて格納されているOffsetの値“ｔ＿ｏＫ”を取得する。その後、選択部２８は、取得したOffsetの値“ｔ＿ｏＫ”を時刻補正部２９に出力する。
以上で、選択部２８の詳細な説明を終了する。
【００４５】
図４は、本実施形態におけるスレーブノード２０による時刻同期処理の流れを示すフローチャートである。
スレーブノード２０の通信部２３は、マスターノード１０から送信されるSyncメッセージを受信する（ステップＳ２０１）。具体的には、通信部２３は、マスターノード１０からSyncメッセージを受信し、受信したSyncメッセージを制御部２４に転送する。制御部２４は、Syncメッセージが転送されると、時計部２２を参照してSync受信時刻Ts(0)を記録する。
【００４６】
次に、通信部２３は、マスターノード１０から送信されるFollow_upメッセージを受信する（ステップＳ２０２）。具体的には、通信部２３は、マスターノード１０からFollow_upメッセージを受信し、受信したFollow_upメッセージを制御部２４に転送する。制御部２４は、Follow_upメッセージ中に格納されているSync送信時刻Tm(0)を抽出し記録する。
【００４７】
制御部２４は、Delay_Requestメッセージを生成し、通信部２３を介してマスターノード１０にDelay_Requestメッセージを送信する（ステップＳ２０３）。この際、制御部２４は、時計部２２を参照してDelay送信時刻Ts(1)を記録する（ステップＳ２０４）。その後、通信部２３は、マスターノード１０から送信されるDelay_Responseメッセージを受信する（ステップＳ２０５）。
【００４８】
具体的には、通信部２３は、マスターノード１０からDelay_Responseメッセージ受信し、受信したDelay_Responseメッセージを制御部２４に転送する。制御部２４は、Delay_Responseメッセージ中に格納されているDelay受信時刻Tm(1)を抽出し記録する。制御部２４は、記録している各時刻情報（Sync送信時刻Tm(0)、Sync受信時刻Ts(0)、Delay送信時刻Ts(1)、Delay受信時刻Tm(1)）を演算部２５に出力する。
【００４９】
演算部２５は、制御部２４から出力された各時刻情報を用いて平均遅延時間を算出する（ステップＳ２０６）。次に、演算部２５は、制御部２４から出力された各時刻情報を用いてOffsetを算出する（ステップＳ２０７）。演算部２５は、算出した平均遅延時間およびOffsetの各値を対応付けて時間情報記憶部２６に記録する（ステップＳ２０８）。
【００５０】
判定部２７は、平均遅延時間およびOffsetの各値が時間情報ＤＢに所定の回数格納されたか否かを判定する（ステップＳ２０９）。平均遅延時間およびOffsetの各値が時間情報ＤＢに所定の回数格納された場合（ステップＳ２０９−ＹＥＳ）、選択部２８は時間情報記憶部２６に記憶されている時間情報ＤＢを読み出す。選択部２８は、読み出した時間情報ＤＢから平均遅延時間の値が最小のレコード３０を選択する（ステップＳ２１０）。選択部２８は、選択したレコード３０に格納されているOffsetの値を取得する。その後、選択部２８は、取得したOffsetの値を時刻補正部２９に出力する。
【００５１】
時刻補正部２９は、選択部２８が出力したOffsetの値を用いて時計部２２のスレーブ時刻を補正する。具体的には、以下のように時計部２２のスレーブ時刻を補正する。補正前の時計部２２のスレーブ時刻は、マスターノード１０の時計部１２のマスター時刻にOffsetの値が加わった時刻である。そのため、時刻補正部２９は、補正前の時計部２２のスレーブ時刻を、Offsetの値だけ減算した時刻となるように補正する（ステップＳ２１１）。その後、図４の処理が終了する。
また、所定の回数、平均遅延時間およびOffsetの各値が時間情報ＤＢに格納されていない場合（ステップＳ２０９−ＮＯ）、スレーブノード２０はステップＳ２０１以降の処理を繰り返し実行する。
【００５２】
以上のように構成されたスレーブノード２０によれば、時間情報ＤＢに格納されている複数の平均遅延時間の中から最小の平均遅延時間が選択される。そのため、選択された平均遅延時間は、時間情報ＤＢに格納されている複数の平均遅延時間の中でパケットの揺らぎなどによる影響が最も小さい。したがって、選択された平均遅延時間に対応付けて格納されているOffsetの値もパケットの揺らぎなどによる影響が小さい。このようにパケットの揺らぎなどによる影響が小さいOffsetの値でスレーブノード２０のスレーブ時刻を補正することによって、パケットの揺らぎなどによる影響を軽減し、時刻同期の精度を向上することが可能となる。
【００５３】
＜変形例＞
一台のマスターノード１０に対してスレーブノード２０が複数台で接続して構成されても良い。
また、本実施例では、マスターノード１０とスレーブノード２０との間で送受信されるメッセージとしてＰＴＰメッセージを示したが、これに限定される必要はない。例えば、ＮＴＰ（Network Time Protocol）メッセージやＳＮＴＰ（Simple Network Time Protocol）メッセージなどのメッセージが用いられても良いし、その他のメッセージが用いられても良い。
【００５４】
以上、この発明の実施形態について図面を参照して詳述してきたが、具体的な構成はこの実施形態に限られるものではなく、この発明の要旨を逸脱しない範囲の設計等も含まれる。
【符号の説明】
【００５５】
１０…マスターノード，  ２０…スレーブノード，  １１…マスタークロック生成部，  １２…時計部，  １３…パケット生成部，  １４…通信部，  ２１…スレーブクロック生成部，  ２２…時計部，  ２３…通信部，  ２４…制御部，  ２５…演算部，  ２６…時間情報記憶部（記憶部），  ２７…判定部，  ２８…選択部，  ２９…時刻補正部
【図１】
2014165582.tif 000009
【図２】
2014165582.tif 000010
【図３】
2014165582.tif 000011
【図４】
2014165582.tif 000012