(57)【要約】【課題】パケットの揺らぎなどによる影響を軽減し、時刻同期の精度を向上させること。【解決手段】双方向通信を行うマスターノードとスレーブノードとを備え、スレーブノードにおける時刻をマスターノードにおける時刻に同期させる時刻同期システムであって、マスターノードは、スレーブノードと制御メッセージの送受信を行う通信部を備え、スレーブノードは、マスターノードと制御メッセージの送受信を行う通信部と、通信部が制御メッセージを送受信した際に取得される時刻情報を用いて平均遅延時間を算出する演算部と、演算部によって算出された平均遅延時間が閾値未満である場合に自装置の時刻を補正し、演算部によって算出された平均遅延時間が閾値以上である場合に自装置の時刻を補正しない時刻補正部と、を備える時刻同期システム。【選択図】図２
2014165581.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を算出する。
【数１】
2014165581.tif 000003
【００２２】
また、スレーブノード２０は、Delay送信時刻Ts(1)、Delay受信時刻Tm(1)に基づいて、以下の式２によってスレーブ時刻とマスター時刻との差分SM_Diffを求める。
【数２】
2014165581.tif 000004
【００２３】
式１のMS_Delayはマスターノード１０からスレーブノード２０への伝送遅延を表し、式２のSM_Delayはスレーブノード２０からマスターノード１０への伝送遅延を表し、式１及び式２のOffsetはマスターノード１０に対するスレーブノード２０の時刻オフセット（進み）を表す。なお、伝送遅延MS_Delay及びSM_Delayは、マスターノード１０とスレーブノード２０との間の伝播遅延と、マスターノード１０とスレーブノード２０との間のネットワーク上の中継ノードで生じるキューイング遅延などから構成される。
【００２４】
以上のように、マスターノード１０に対するスレーブノード２０の時刻のずれであるOffsetに関して、式１及び式２の二つの式が得られる。しかし、この二つの式には、Offsetの他にMS_Delay及びSM_Delayという未知のパラメータが含まれている。したがって、三つの未知のパラメータに対し二つの式しか存在しないため、Offsetを算出することができない。そのため、ＩＥＥＥ１５８８では、マスターノード１０からスレーブノード２０への伝送遅延MS_Delayと、スレーブノード２０からマスターノード１０への伝送遅延SM_Delayとが等しく、いずれの値もDelayであると仮定して、上記の式１及び式２を以下の式３及び式４に変形する。
【００２５】
【数３】
2014165581.tif 000005
【数４】
2014165581.tif 000006
式３及び式４の連立方程式を解くことによって、以下の式５が導出される。
【数５】
2014165581.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)）を演算部２５及び時刻補正部２９に出力する。
【００３８】
演算部２５は、制御部２４から出力された各時刻情報を用いて平均遅延時間を算出する。平均遅延時間は、マスターノード１０からスレーブノード２０への伝送遅延MS_Diffと、スレーブノード２０からマスターノード１０への伝送遅延SM_Diffとの平均時間である。具体的には、演算部２５は、以下の式６に基づいて平均遅延時間ｔ＿ｄを算出する。
【数６】
2014165581.tif 000008
【００３９】
平均遅延時間記憶部２６は、磁気ハードディスク装置や半導体記憶装置などの記憶装置を用いて構成される。平均遅延時間記憶部２６は、平均遅延時間ＤＢ（Data Base：データベース）を記憶している。平均遅延時間ＤＢには、演算部２５によって算出された平均遅延時間の値が複数格納されている。平均遅延時間記憶部２６は、演算部２５が平均遅延時間を算出する度に、算出された平均遅延時間の値を平均遅延時間ＤＢに追加して記憶する。
【００４０】
閾値選択部２７は、平均遅延時間ＤＢに格納されている複数の平均遅延時間に基づいて閾値を選択する。例えば、閾値選択部２７は、平均遅延時間ＤＢに格納されている複数の平均遅延時間の統計を取ることによって閾値を選択しても良い。より具体的には、閾値選択部２７は、複数の平均遅延時間の中から最小の平均遅延時間の値を閾値に選択しても良いし、複数の平均遅延時間の平均値を閾値に選択しても良いし、その他の統計値を閾値に選択しても良い。また、閾値は、閾値選択部２７によって出荷時に予め記憶されていても良いし、ユーザによって任意に決定されても良い。
【００４１】
判定部２８は、演算部２５が算出した平均遅延時間と、閾値選択部２７が選択した閾値とに基づいて時計部２２のスレーブ時刻の補正を行うか否かを判定する。演算部２５が算出した平均遅延時間が閾値以上である場合、判定部２８は時計部２２のスレーブ時刻の補正を行わないと判定する。一方、演算部２５が算出した平均遅延時間が閾値未満である場合、判定部２８は時計部２２のスレーブ時刻の補正を行うと判定する。この場合、判定部２８は、時刻補正部２９にスレーブ時刻を補正するように指示する。
【００４２】
時刻補正部２９は、判定部２８の判定結果に基づいて時計部２２のスレーブ時刻を補正する。具体的には、時刻補正部２９は、以下のようにしてスレーブ時刻を補正する。時刻補正部２９は、制御部２４から出力された各時刻情報を用いて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の値だけ減算した時刻となるように補正する（ステップＳ２１０）。演算部２５は、ステップＳ２０６で算出した平均遅延時間を平均遅延時間ＤＢに追加して記録する（ステップＳ２０９）。その後、図４の処理が終了する。
【００５３】
以上のように構成されたスレーブノード２０によれば、平均遅延時間ＤＢに格納されている全ての平均遅延時間を用いて選択された閾値に基づいて、スレーブ時刻の補正を行うか否かが判定される。算出された平均遅延時間が閾値以上である場合、スレーブノード２０はパケットの揺らぎなどによる影響が大きいと判定し、スレーブ時刻の補正を行わない。一方、算出された平均遅延時間が閾値未満である場合、スレーブノード２０はパケットの揺らぎなどによる影響が小さいと判定し、スレーブ時刻の補正を行う。したがって、スレーブノード２０は、パケットの揺らぎなどによる影響が大きい場合にはスレーブ時刻の補正を行わず、パケットの揺らぎなどによる影響が小さい場合にのみスレーブノード２０のスレーブ時刻を補正することができる。そのため、パケットの揺らぎなどによる影響を軽減し、時刻同期の精度を向上させることが可能となる。
【００５４】
＜変形例＞
一台のマスターノード１０に対してスレーブノード２０が複数台接続されて構成されても良い。
また、本実施例では、マスターノード１０とスレーブノード２０との間で送受信されるメッセージとしてＰＴＰメッセージを示したが、これに限定される必要はない。例えば、ＮＴＰ（Network Time Protocol）メッセージやＳＮＴＰ（Simple Network Time Protocol）メッセージなどのメッセージが用いられても良いし、その他のメッセージが用いられても良い。
【００５５】
以上、この発明の実施形態について図面を参照して詳述してきたが、具体的な構成はこの実施形態に限られるものではなく、この発明の要旨を逸脱しない範囲の設計等も含まれる。
【符号の説明】
【００５６】
１０…マスターノード，  ２０…スレーブノード，  １１…マスタークロック生成部，  １２…時計部，  １３…パケット生成部，  １４…通信部，  ２１…スレーブクロック生成部，  ２２…時計部，  ２３…通信部，  ２４…制御部，  ２５…演算部，  ２６…平均遅延時間記憶部（記憶部），  ２７…閾値選択部，  ２８…判定部，  ２９…時刻補正部
【図１】
2014165581.tif 000009
【図２】
2014165581.tif 000010
【図３】
2014165581.tif 000011
【図４】
2014165581.tif 000012