時刻同期システム、マスタノード、スレーブノード、中継装置、時刻同期方法及び時刻同期用プログラム
【課題】導入に要するコストを抑え、高精度の時刻同期を実現すること。
【解決手段】時刻同期システムであって、マスタノード又は中継装置は、スレーブノードからマスタノードへ送信される制御メッセージが通信経路において受けたキューイング遅延を表す第一遅延量を計測する第一遅延計測部と、第一遅延計測部によって計測された第一遅延量をスレーブノードに通知する通知部と、を備え、スレーブノード又は中継装置は、マスタノードからスレーブノードへ送信される制御メッセージが通信経路において受けたキューイング遅延を表す第二遅延量を計測する第二遅延計測部を備え、スレーブノードは、通知された第一遅延量と、第二遅延計測部によって計測された第二遅延量と、を用いて、スレーブノードにおける時刻とマスタノードにおける時刻との差分を計算し、スレーブノードの時刻をマスタノードの時刻に同期させる時刻同期制御部を備える。
【解決手段】時刻同期システムであって、マスタノード又は中継装置は、スレーブノードからマスタノードへ送信される制御メッセージが通信経路において受けたキューイング遅延を表す第一遅延量を計測する第一遅延計測部と、第一遅延計測部によって計測された第一遅延量をスレーブノードに通知する通知部と、を備え、スレーブノード又は中継装置は、マスタノードからスレーブノードへ送信される制御メッセージが通信経路において受けたキューイング遅延を表す第二遅延量を計測する第二遅延計測部を備え、スレーブノードは、通知された第一遅延量と、第二遅延計測部によって計測された第二遅延量と、を用いて、スレーブノードにおける時刻とマスタノードにおける時刻との差分を計算し、スレーブノードの時刻をマスタノードの時刻に同期させる時刻同期制御部を備える。
【発明の詳細な説明】
【技術分野】
【0001】
本発明は、通信を行うノード間で時刻の同期を行うための技術に関する。
【背景技術】
【0002】
従来、モバイルバックホールやファクトリオートメーション、家庭内AV用LAN(Local Area Network)などで高精度の時刻同期が求められている。このような背景の元で、時刻同期を行うための技術の標準化が進められている。例えば、パケットネットワークにおいて、マイクロ秒未満の精度で時刻同期を行なうための技術としてIEEE1588がある(非特許文献1参照)。
【0003】
IEEE1588に規定されている技術では、マスタ/スレーブノード間でのメッセージ交換によってタイムスタンプ情報が交換される。スレーブノードは、マスタ及びスレーブノードにおけるメッセージ送受信時刻から、マスタノードに対するスレーブノードの時刻のずれ(Offset)を計算する。そして、スレーブノードは、このOffsetに基づいてスレーブノードの時刻を補正し、スレーブノードの時刻をマスタノードに同期させる。
【0004】
IEEE1588では、Offsetを求めるために、マスタノードからスレーブノードへの伝送遅延(MS_Delay)と、スレーブノードからマスタノードへの伝送遅延(SM_Delay)は等しいと仮定する。しかしながら、パケットネットワークではルータ、スイッチ等の中継ノードにおけるキューイング遅延等により、MS_DelayとSM_Delayとは異なる値となる可能性が高い。そのため、MS_DelayとSM_Delayとが等しいという仮定により、Offsetに誤差が生じてしまい、時刻同期精度が劣化してしまっていた。
【0005】
このような問題を解決するために、IEEE1588 version 2において、Transparent Clock (TC)機能が規定されている。なお、以降の説明では、このTC機能を利用したIEEE1588をIEEE1588v2 w/TCと記す。
【先行技術文献】
【非特許文献】
【0006】
【非特許文献1】IEEE P1588 TM/D1, “Draft Standard for a Precision Clock Synchronization Protocol for Networked Measurement and Control Systems”, June, 2007.
【発明の概要】
【発明が解決しようとする課題】
【0007】
しかしながら、IEEE1588v2 w/TCでは、高精度を実現するためにはより多くの中継ノード(究極的には全中継ノード)がTC機能を有する必要がある。一方、既にネットワークに配置されている既存ノードはTC機能を持たないものが大部分を占める。そのため、IEEE1588v2 w/TCを実現するためには、中継ノードの置き換えや機能追加が必要となる。したがって、IEEE1588v2 w/TCの実現は、コストや手間などの観点から非常に困難であるという問題がある。
上記事情に鑑み、本発明は、導入に要するコストを抑え、高精度の時刻同期を実現する技術を提供することを目的とする。
【課題を解決するための手段】
【0008】
本発明の一態様は、互いに通信するマスタノード及びスレーブノードと、前記マスタノード及びスレーブノード間の通信を中継する中継装置とを備え、スレーブノードにおける時刻をマスタノードにおける時刻に同期させる時刻同期システムであって、前記マスタノードは、前記スレーブノードに対し制御メッセージを送信する送信部と、前記スレーブノードから制御メッセージを受信する受信部と、を備え、前記マスタノード又は前記中継装置は、前記スレーブノードから前記マスタノードへ送信される制御メッセージが通信経路において受けたキューイング遅延を表す第一遅延量を計測する第一遅延計測部と、前記第一遅延計測部によって計測された前記第一遅延量を前記スレーブノードに通知する通知部と、を備え、前記スレーブノード又は前記中継装置は、前記マスタノードから前記スレーブノードへ送信される制御メッセージが通信経路において受けたキューイング遅延を表す第二遅延量を計測する第二遅延計測部、を備え、前記スレーブノードは、前記マスタノードに対し制御メッセージを送信する送信部と、前記マスタノードから前記制御メッセージを受信する受信部と、前記マスタノードから通知された前記第一遅延量と、前記第二遅延計測部によって計測された前記第二遅延量とを用いて、前記スレーブノードにおける時刻と前記マスタノードにおける時刻との差分を計算し、前記スレーブノードにおける時刻を前記マスタノードにおける時刻に同期させる時刻同期制御部と、を備えることを特徴とする。
【0009】
本発明の一態様は、マスタノードと通信し、前記マスタノードに対し制御メッセージを送信する送信部と、前記マスタノードから制御メッセージを受信する受信部と、前記マスタノードから送信される前記制御メッセージが通信経路において受けたキューイング遅延を表す第二遅延量を計測する第二遅延計測部と、前記マスタノードから通知される前記第一遅延量と、前記第二遅延計測部によって計測された前記第二遅延量とを用いて、時刻を前記マスタノードにおける時刻に同期させる時刻同期制御部と、を備えるスレーブノードを有する時刻同期システムに具備されるマスタノードであって、前記スレーブノードに対し制御メッセージを送信する送信部と、前記スレーブノードから制御メッセージを受信する受信部と、前記スレーブノードから前記マスタノードへ送信される制御メッセージが通信経路において受けたキューイング遅延を表す第一遅延量を計測する第一遅延計測部と、前記第一遅延計測部によって計測された前記第一遅延量を前記スレーブノードに通知する通知部と、を備えること特徴とする。
【0010】
本発明の一態様は、スレーブノードと通信し、前記スレーブノードに対し制御メッセージを送信する送信部と、前記スレーブノードから制御メッセージを受信する受信部と、前記スレーブノードから送信される制御メッセージが通信経路において受けたキューイング遅延を表す第一遅延量を計測する第一遅延計測部と、前記第一遅延計測部によって計測された前記第一遅延量を通知する通知部と、を備えるマスタノードを有する時刻同期システムに具備されるスレーブノードであって、前記マスタノードに対し制御メッセージを送信する送信部と、前記マスタノードから前記制御メッセージを受信する受信部と、前記マスタノードから前記スレーブノードへ送信される制御メッセージが通信経路において受けたキューイング遅延を表す第二遅延量を計測する第二遅延計測部と、前記マスタノードから通知された前記第一遅延量と、自装置の前記第二遅延計測部によって計測された前記第二遅延量とを用いて、前記スレーブノードにおける時刻と前記マスタノードにおける時刻との差分を計算し、前記スレーブノードにおける時刻を前記マスタノードにおける時刻に同期させる時刻同期制御部と、を備えることを特徴とする。
【0011】
本発明の一態様は、マスタノードと、時刻を前記マスタノードの時刻に同期させるスレーブノードと、の間の通信を中継する中継装置であって、前記スレーブノードから前記マスタノードへ送信される制御メッセージが通信経路において受けたキューイング遅延を表す第一遅延量を計測する第一遅延計測部と、前記マスタノードから前記スレーブノードへ送信される制御メッセージが通信経路において受けたキューイング遅延を表す第二遅延量を計測し、前記第一遅延量と、計測された前記第二遅延量とを用いて、前記スレーブノードにおける時刻と前記マスタノードにおける時刻との差分を計算し、前記スレーブノードにおける時刻を前記マスタノードにおける時刻に同期させる前記スレーブノードに対し、前記第一遅延計測部によって計測された前記第一遅延量を通知する通知部と、を備える。
【0012】
本発明の一態様は、マスタノードと、時刻を前記マスタノードの時刻に同期させるスレーブノードと、の間の通信を中継する中継装置であって、前記マスタノードから前記スレーブノードへ送信される制御メッセージが通信経路において受けたキューイング遅延を表す第二遅延量を計測する第二遅延計測部と、前記スレーブノードから前記マスタノードへ送信される制御メッセージが通信経路において受けたキューイング遅延を表す第一遅延量と、前記第二遅延量とを用いて、前記スレーブノードにおける時刻と前記マスタノードにおける時刻との差分を計算し、前記スレーブノードにおける時刻を前記マスタノードにおける時刻に同期させる前記スレーブノードに対し、前記第二遅延計測部によって計測された前記第二遅延量を通知する通知部と、を備える。
【0013】
本発明の一態様は、互いに通信するマスタノード及びスレーブノードと、前記マスタノード及びスレーブノード間の通信を中継する中継装置とを備え、スレーブノードにおける時刻をマスタノードにおける時刻に同期させる時刻同期システムが行う時刻同期方法であって、前記マスタノードが、前記スレーブノードに対し制御メッセージを送信する送信ステップと、前記マスタノードが、前記スレーブノードから制御メッセージを受信する受信ステップと、前記マスタノード又は前記中継装置が、前記スレーブノードから前記マスタノードへ送信される制御メッセージが通信経路において受けたキューイング遅延を表す第一遅延量を計測する第一遅延計測ステップと、前記マスタノード又は前記中継装置が、前記第一遅延計測ステップによって計測された前記第一遅延量を前記スレーブノードに通知する通知ステップと、前記スレーブノードが、前記マスタノードに対し制御メッセージを送信する送信ステップと、前記スレーブノードが、前記マスタノードから前記制御メッセージを受信する受信ステップと、前記スレーブノード又は前記中継装置が、前記マスタノードから前記スレーブノードへ送信される制御メッセージが通信経路において受けたキューイング遅延を表す第二遅延量を計測する第二遅延計測ステップと、前記スレーブノードが、前記マスタノードから通知された前記第一遅延量と、前記第二遅延計測ステップによって計測された前記第二遅延量とを用いて、前記スレーブノードにおける時刻と前記マスタノードにおける時刻との差分を計算し、前記スレーブノードにおける時刻を前記マスタノードにおける時刻に同期させる時刻同期制御ステップと、を備えることを特徴とする。
【0014】
本発明の一態様は、互いに通信するマスタノード及びスレーブノードと、前記マスタノード及びスレーブノード間の通信を中継する中継装置とを備え、スレーブノードにおける時刻をマスタノードにおける時刻に同期させる時刻同期システムとして、前記マスタノードに相当する第一のコンピュータ、前記スレーブノードに相当する第二のコンピュータ、及び前記中継装置に相当する第三のコンピュータを動作させるための時刻同期用プログラムであって、前記第一のコンピュータに対し、前記スレーブノードに対し制御メッセージを送信する送信ステップと、前記スレーブノードから制御メッセージを受信する受信ステップと、を実行させ、前記第一のコンピュータ又は前記第三のコンピュータに対し、前記スレーブノードから前記マスタノードへ送信される制御メッセージが通信経路において受けたキューイング遅延を表す第一遅延量を計測する第一遅延計測ステップと、前記第一遅延計測ステップによって計測された前記第一遅延量を前記スレーブノードに通知する通知ステップと、を実行させ、前記第二のコンピュータ又は前記第三のコンピュータに対し、前記マスタノードから前記スレーブノードへ送信される制御メッセージが通信経路において受けたキューイング遅延を表す第二遅延量を計測する第二遅延計測ステップ、を実行させ、前記第二のコンピュータに対し、前記マスタノードに対し制御メッセージを送信する送信ステップと、前記マスタノードから前記制御メッセージを受信する受信ステップと、前記マスタノードから通知された前記第一遅延量と、前記第二遅延計測ステップによって計測された前記第二遅延量とを用いて、前記スレーブノードにおける時刻と前記マスタノードにおける時刻との差分を計算し、前記スレーブノードにおける時刻を前記マスタノードにおける時刻に同期させる時刻同期制御ステップと、を実行させることを特徴とする。
【発明の効果】
【0015】
本発明により、導入に要するコストを抑え、高精度の時刻同期を実現することが可能となる。
【図面の簡単な説明】
【0016】
【図1】IEEE1588の時刻同期アルゴリズムによる通信シーケンスを表すシーケンス図である。
【図2】IEEE1588及びIEEE1588v2 w/TCの時刻同期アルゴリズムの概略を表す概略図である。
【図3】第1実施形態における通信システムのシステム構成図である。
【図4】マスタノードの機能構成を表す機能ブロック図である。
【図5】遅延計測部の詳細な機能構成を表す機能ブロック図である。
【図6】パケットカウンタの動作の概略を表す概略図である。
【図7】スレーブノードの機能構成を表す機能ブロック図である。
【図8】遅延計測部の詳細な機能構成を表す機能ブロック図である。
【図9】時刻同期制御部の詳細な機能構成を表す機能ブロック図である。
【図10】マスタノードによるマスタ第1処理の流れを表すフローチャートである。
【図11】スレーブノードによるスレーブ第1処理の流れを表すフローチャートである。
【図12】マスタノードによるマスタ第2処理の流れを表すフローチャートである。
【図13】スレーブノードによるスレーブ第2処理の流れを表すフローチャートである。
【図14】通信システムによる時刻同期処理の具体例を表すシーケンス図である。
【図15】通信システムによる時刻同期処理の具体例を表すシーケンス図である。
【図16】通信システムにおいて計測される遅延量の確率分布を表す図である。
【図17】パケットバッファを用いて構成された場合の、遅延計測部の処理の概略を表す図である。
【図18】第2実施形態におけるマスタノードの機能構成を表す機能ブロック図である。
【図19】第2実施形態におけるスレーブノードの機能構成を表す機能ブロック図である。
【図20】第2実施形態における時刻同期制御部の機能構成を表す機能ブロック図である。
【図21】第2実施形態におけるマスタ第2処理の流れを表すフローチャートである。
【図22】第2実施形態におけるスレーブ第2処理の流れを表すフローチャートである。
【図23】第2実施形態における通信システムによる時刻同期処理の具体例を表すシーケンス図である。
【図24】第3実施形態における通信システムのシステム構成図である。
【図25】第3実施形態におけるマスタノードの機能構成を表す機能ブロック図である。
【図26】第3実施形態におけるスレーブノードの機能構成を表す機能ブロック図である。
【図27】時刻同期制御部の詳細な機能構成を表す機能ブロック図である。
【図28】第3実施形態におけるエミュレーションノードの機能構成を表す機能ブロック図である。
【図29】第3実施形態におけるスレーブ第1処理の流れを表すフローチャートである。
【図30】第3実施形態におけるマスタ第2処理の流れを表すフローチャートである。
【図31】第3実施形態におけるスレーブ第2処理の流れを表すフローチャートである。
【図32】第3実施形態におけるエミュレーションノードによる処理の流れを表すフローチャートである。
【図33】第3実施形態における通信システムによる時刻同期処理の具体例を表すシーケンス図である。
【発明を実施するための形態】
【0017】
[IEEE1588]
まず、IEEE1588の時刻同期アルゴリズムについて説明する。図1は、IEEE1588の時刻同期アルゴリズムによる通信シーケンスを表すシーケンス図である。図1では、マスタノード100とスレーブノード200とが双方向通信を行っており、スレーブノード200が定期的にマスタノード100に時刻を同期させる。
【0018】
マスタノード100は、スレーブノード200に対して、定期的にSyncメッセージを送信する(ステップS100)。マスタノード100は、このSyncメッセージの送信時刻(以下、「Sync送信時刻」という。)Tm(0)を記録する(ステップS101)。次に、マスタノード100は、スレーブノード200に対して、Follow_upメッセージを送信する。このとき、マスタノード100は、Follow_upメッセージの中に、Sync送信時刻Tm(0)を格納する。
【0019】
スレーブノード200は、Syncメッセージを受信すると、この受信処理をトリガとしてSyncメッセージの受信時刻(以下、「Sync受信時刻」という。)Ts(0)を記録する(ステップS102)。次に、スレーブノード200はFollow_upメッセージを受信し、Follow_upメッセージ中に格納されるSync送信時刻Tm(0)を抽出し記録する。次に、スレーブノード200は、マスタノード100に対して、Delay_Requestメッセージを送信する(ステップS104)。そして、スレーブノード200は、このDelay_Requestメッセージの送信時刻(以下、「Delay送信時刻」という。)Ts(1)を記録する(ステップS105)。
【0020】
マスタノード100は、Delay_Requestメッセージを受信すると、この受信処理をトリガとしてDelay_Requestメッセージの受信時刻(以下、「Delay受信時刻」という。)Tm(1)を記録する(ステップS106)。次に、マスタノード100は、スレーブノード200に対してDelay_Responseメッセージを送信する(ステップS107)。このとき、マスタノード100は、Delay_Responseメッセージの中に、Delay受信時刻Tm(1)を格納する。
【0021】
スレーブノード200は、Delay_Responseメッセージを受信すると、Delay_Responseメッセージ中に格納されるDelay受信時刻Tm(1)を抽出し記録する。
スレーブノード200は、Sync送信時刻Tm(0)、Sync受信時刻Ts(0)に基づいて、以下の式1から、マスタノード100における時刻(以下、「マスタ時刻」という。)とスレーブノード200における時刻(以下、「スレーブ時刻」という。)との差分MS_Diffを算出する。
MS_Diff = Ts(0) - Tm(0) = MS_Delay + Offset ・・・式1
【0022】
また、スレーブノード200は、Delay送信時刻Ts(1)、Delay受信時刻Tm(1)に基づいて、以下の式2から、スレーブ時刻とマスタ時刻との差分を求める。
SM_Diff = Tm(1) - Ts(1) = SM_Delay - Offset ・・・式2
【0023】
ここで、MS_Delayはマスタノード100からスレーブノード200への伝送遅延を表し、SM_Delayはスレーブノード200からマスタノード100への伝送遅延を表し、Offsetはマスタノード100に対するスレーブノード200の時刻オフセット(進み)を表す。なお、伝送遅延MS_Delay及びSM_Delayは、マスタノード100とスレーブノード200との間の伝播遅延と、マスタノード100とスレーブノード200との間のネットワーク上の中継ノードで生じるキューイング遅延から構成される。
【0024】
以上のように、マスタノード100に対するスレーブノード200の時刻のずれであるOffsetに関して、式1及び式2の二つの式が得られる。しかし、この二つの式には、Offsetの他にMS_Delay及びSM_Delayという未知のパラメータが含まれている。したがって、三つの未知のパラメータに対し二つの式しか存在しないため、Offsetを算出することができない。そのため、IEEE1588では、マスタノード100からスレーブノード200への伝送遅延MS_Delayと、スレーブノード200からマスタノード100への伝送遅延SM_Delayとが等しく、いずれの値もDelayであると仮定して、上記の式1及び式2を以下の式3及び式4に変形する。
【0025】
MS_Diff = Delay + Offset ・・・式3
SM_Diff = Delay - Offset ・・・式4
式3及び式4の連立方程式を解くことによって、以下の式5が導出される。
Offset = (MS_Diff - SM_Diff) / 2 ・・・式5
【0026】
スレーブノード200は、式5に基づいてOffsetを算出し、Offsetに基づいてスレーブ時刻を補正することによって、スレーブ時刻をマスタ時刻に同期させる。以上が、IEEE1588に規定される時刻同期アルゴリズムである。
【0027】
[IEEE1588v2 w/TC]
次に、IEEE1588v2 w/TCの時刻同期アルゴリズムについて説明する。図2は、IEEE1588及びIEEE1588v2 w/TCの時刻同期アルゴリズムの概略を表す概略図である。図2Aは、IEEE1588の時刻同期アルゴリズムの概略を表す。図2Bは、IEEE1588v2 w/TC の時刻同期アルゴリズムの概略を表す。図2A及び図2BのD1〜D6は、それぞれ各中継ノードRe1〜Re3において発生する、矢印方向への伝送におけるキューイング遅延を表す。
【0028】
IEEE1588v2 w/TCでは、各中継ノードRe1〜Re3はTC機能を備える。TC機能とは、制御メッセージ(IEEE1588メッセージ)のパケットのノード内滞在時間を計測し、その時間を制御パケットの所定のフィールドに記載し、累積加算していく機能である。なお、IEEE1588メッセージとは、具体的にはSyncメッセージ及びDelay_Requestメッセージである。IEEE1588v2 w/TCでは、TC機能により、制御パケットが中継ノードRe1〜Re3を経由するごとに、中継ノードRe1〜Re3での滞在時間がメッセージ内に累積加算される。そのため、スレーブノード200は、マスタノード100からスレーブノード200へ向けた伝送における各中継ノードRe1〜Re3で生じたキューイング遅延の合計を正確に取得できる。同様に、マスタノード100は、スレーブノード200からマスタノード100へ向けた伝送における各中継ノードRe1〜Re3で生じたキューイング遅延の合計を正確に取得できる。
【0029】
マスタノード100からスレーブノード200へ向けた伝送におけるキューイング遅延の合計及び伝播遅延をそれぞれMS_Q、MS_Pとし、スレーブノード200からマスタノード100へ向けた伝送におけるキューイング遅延の合計及び伝播遅延をそれぞれSM_Q、SM_Pとすると、上述した式1及び式2は下記の式6及び式7に変形できる。
MS_Diff = MS_P + MS_Q + Offset ・・・式6
SM_Diff = SM_P + SM_Q - Offset ・・・式7
【0030】
ここで、マスタノード100からスレーブノード200へ向けた伝送とスレーブノード200からマスタノード100へ向けた伝送のメッセージ伝送経路が双方向で等しい場合は、MS_P = SM_P = Propagation_Delayとなる。この場合、式6及び式7は、下記の式8及び式9のように変形できる。
MS_Diff = Propagation_Delay + MS_Q + Offset ・・・式8
SM_Diff = Propagation_Delay + SM_Q - Offset ・・・式9
【0031】
そして、式8及び式9から、Offsetを算出するための式として下記の式10を得ることができる。
Offset = {(MS_Diff - SM_Diff) - (MS_Q - SM_Q)} / 2 ・・・式10
【0032】
図2Aに示すように、IEEE1588v2 w/TC ではないIEEE1588(以下、「Pure IEEE1588」ともいう。)では、各中継ノードRe1〜Re3で生じるキューイング遅延の合計は、双方向で等しいと仮定していた。すなわち、マスタノード100からスレーブノード200への伝送におけるキューイング遅延の合計(D1+D2+D3)と、スレーブノード200からマスタノード100への伝送におけるキューイング遅延の合計(D4+D5+D6)とは等しいと仮定していた。しかしながら、実際には等しくないため、その誤差が同期精度の劣化の要因となっていた。
【0033】
これに対して、IEEE1588v2 w/TCでは、各中継ノードRe1〜Re3に実装されたTC機能によって各中継ノードRe1〜Re3でのキューイング遅延の合計を計測している。そして、スレーブノード200は、マスタノード100からスレーブノード200への伝送におけるキューイング遅延の合計値(D1+D2+D3)を正確に取得する。また、マスタノード100は、スレーブノード200からマスタノード100への伝送におけるキューイング遅延の合計値(D4+D5+D6)を、正確に取得する。このような動作によって、IEEE1588v2 w/TCでは、高精度の時刻同期が可能となる。以上が、IEEE1588v2 w/TCに規定される時刻同期アルゴリズムである。
【0034】
[第1実施形態]
図3は、第1実施形態における通信システム1のシステム構成図である。通信システム1は、マスタノード300、スレーブノード400(400a〜400c)、パケットネットワークPNを備える。以下、マスタノード300及びスレーブノード400の構成の詳細についてそれぞれ説明する。
【0035】
〔マスタノード〕
図4は、マスタノード300の機能構成を表す機能ブロック図である。マスタノード300は、クロック生成部301、マスタクロック部302、パケット生成部303、パケット送信部304、パケット受信部305、遅延計測部306を備える。マスタノード300は、例えばバスで接続されたCPU(Central Processing Unit)、メモリ、補助記憶装置、通信インタフェース等を備え、時刻同期用プログラムを実行することによって上記各機能部を備える装置として構成されても良い。
【0036】
クロック生成部301は、マスタノード300の基準クロックを生成する。具体的には、クロック生成部301は、マスタノード300における1秒の時間幅を決める。なお、クロック生成部301は、マスタノード300の外部に存在しても良い。その場合、マスタノード300は、外部に設置されるクロック生成部301からのクロックを確実に同期して取得するように構成される。
【0037】
マスタクロック部302は、クロック生成部301で生成される基準クロックに従い、マスタノード300の時刻(マスタ時刻)を決定する。具体的には、マスタクロック部302は、マスタノード300において何時何分何秒であるかを決める。
【0038】
パケット生成部303は、IEEE1588のメッセージを生成し、パケット送信部304に送る。IEEE1588のメッセージとは、具体的には、Syncメッセージ、Follow_upメッセージ、Delay_Responseメッセージである。パケット生成部303は、定期的にパケット送信部304を介してSyncメッセージをスレーブノード400へ送信し、同時にマスタクロック部302を参照してSync送信時刻Tm(0)を記録する。また、パケット生成部303は、Syncメッセージ送信後に、Sync送信時刻Tm(0)を格納したFollow_upメッセージを生成し、パケット送信部304を介してスレーブノード400へ送信する。また、パケット生成部303は、パケット受信部305によって受信されるDelay_Requestメッセージの受信時刻(Delay受信時刻)Tm(1)と、遅延計測部306で計測するDelay_Requestメッセージの遅延量SM_Q(第一遅延量)を格納したDelay_Responseメッセージを生成し、パケット送信部304を介してスレーブノード400へ送信する。なお、遅延量SM_Qは、上述したようにDelay_Requestメッセージが各スレーブノード400a〜400cからマスタノード300まで転送される間に受けたキューイング遅延の遅延量を表す。
【0039】
また、Delay_Responseメッセージは、スレーブノード400a〜400cから送信されたDelay_Requestメッセージへの返信となる。そのため、パケット生成部303は、Delay_Responseメッセージに格納されるDelay受信時刻Tm(1)、遅延量SM_Qを、Delay_Requestメッセージの送信元のスレーブノード400a〜400c毎に管理する。
【0040】
パケット送信部304は、パケット生成部303から受けるSyncメッセージ、Follow_upメッセージ、Delay_Responseメッセージを、パケットネットワークPNを経由してスレーブノード400a〜400cに送信する。なお、パケット送信部304は、Syncメッセージ及びFollow_upメッセージを、スレーブノード400a〜400cに対してブロードキャストする。また、パケット送信部304は、Delay_Responseメッセージを、各Delay_Requestメッセージの送信元のスレーブノード400a〜400cに対してユニキャストする。
【0041】
パケット受信部305は、スレーブノード400a〜400cからパケットネットワークPNを経由して送られてくるDelay_Requestメッセージを受信する。そして、パケット受信部305は、受信されたDelay_Requestメッセージを、パケット生成部303及び遅延計測部306に転送する。
【0042】
遅延計測部306は、パケットカウンタを備える。遅延計測部306は、パケットカウンタのカウンタ値の増減状況をモニタすることによって、到着するDelay_Requestメッセージの遅延量SM_Qを算出する。そして、遅延計測部306は、算出された遅延量SM_Qをパケット生成部303に通知する。
【0043】
図5は、遅延計測部306の詳細な機能構成を表す機能ブロック図である。遅延計測部306は、パケットカウンタ501、カウンタ最大値モニタ部502、到着時カウンタ値モニタ部503、遅延算出部504を備える。カウンタ最大値モニタ部502及び到着時カウンタ値モニタ部503は、パケットカウンタ501のカウンタ値をモニタし、結果を遅延算出部504に通知する。遅延算出部504は、カウンタ最大値モニタ部502及び到着時カウンタ値モニタ部503から通知された情報を用いて遅延量SM_Qを算出する。そして、遅延算出部504は、算出された遅延量SM_Qをパケット生成部303に通知する。
【0044】
パケットカウンタ501は、パケット受信部305からDelay_Requestメッセージを受信する毎に、カウンタの値を所定の値分だけ増加させる。また、パケットカウンタ501は、クロック生成部301から出力される基準クロックの周波数に従い、カウンタの値を減少させる。パケットカウンタ501のカウンタ値が基準クロックの周波数に従って減少するのは、パケット受信部305によって受信されたDelay_Requestメッセージのパケットが、基準クロックの周波数に従って受信パケットのバッファから読み出されるためである。
【0045】
カウンタ最大値モニタ部502は、パケットカウンタ501のカウンタ値の最大値を検出する。具体的には、カウンタ最大値モニタ部502は、予め決められた所定の時間(例えば10秒)のモニタ期間内の最大値を検出する。以下、モニタ期間iにおけるカウンタの最大値を、カウンタ最大値P(i)と表す。カウンタ最大値モニタ部502は、モニタ期間iが終了すると、検出結果であるカウンタ最大値P(i)を遅延算出部504に通知する。
【0046】
到着時カウンタ値モニタ部503は、モニタ期間iにおけるn番目のDelay_Requestメッセージパケットが到着すると、到着時のカウンタ値C(i,n)を検出する。到着時カウンタ値モニタ部503は、Delay_Requestメッセージパケットの到着毎にカウンタ値C(i,n)を検出し、検出結果を遅延算出部504に通知する。
【0047】
遅延算出部504は、到着時カウンタ値モニタ部503からカウンタ値C(i,n)を受ける毎に、カウンタ値C(i,n)及びカウンタ最大値P(i)を用いて、以下の式11に基づき遅延量SM_Qを算出する。
SM_Q = P(i-1) - C(i,n) ・・・式11
遅延算出部504は、遅延量SM_Qを計算する毎に、パケット生成部303に遅延量SM_Qを通知する。
【0048】
図6は、パケットカウンタ501の動作の概略を表す概略図である。図6において、縦軸はカウンタ値を表し、下から上へ向けて高いカウンタ値を表す。横軸は時間を表し、左から右へ向けて進行する。縦に伸びる等間隔に並んだ複数の破線は、キューイング遅延が発生しない場合にDelay_Requestメッセージのパケットが受信されるタイミングを表す。上方向を指す矢印は、Delay_Requestメッセージのパケットが実際に受信されたタイミングを表す。パケットカウンタ501は、Delay_Requestメッセージのパケットを受信すると、カウンタ値を固定値分(図6のCV分)上昇させる。縦に伸びる破線と上方向の矢印とが時間軸で一致している場合、すなわちキューイング遅延が発生せずにDelay_Requestメッセージのパケットが受信されている場合は、カウンタ値は最大値Cmaxをとる。この場合、パケットカウンタ501は、受信されたビット数の総和と、基準クロックの周波数に従って定期的に読み出されるビット数の総和とが一致する。一方、キューイング遅延が発生している場合には、カウンタ値はCmaxよりも小さい値となる。このとき、最大値Cmaxとカウンタ値との差分が、発生しているキューイング遅延の遅延量と等価となる。
【0049】
〔スレーブノード〕
図7は、スレーブノード400の機能構成を表す機能ブロック図である。なお、スレーブノード400a〜400cは、いずれもスレーブノード400と同様の構成を備える。スレーブノード400は、パケット受信部401、PLL(Phase Locked Loop)部402、遅延計測部403、スレーブクロック部404、時刻同期制御部405、パケット送信部406を備える。スレーブノード400は、例えばバスで接続されたCPU、メモリ、補助記憶装置、通信インタフェース等を備え、時刻同期用プログラムを実行することによって上記各機能部を備える装置として構成されても良い。
【0050】
パケット受信部401は、マスタノード300からパケットネットワークPNを経由して送信されてきたSyncメッセージ、Follow_upメッセージ、Delay_Requestメッセージを受信し、時刻同期制御部405に転送する。パケット受信部401は、Syncメッセージに限り、PLL部402及び遅延計測部403にも転送する。
【0051】
PLL部402は、位相比較器407、LPF(Low Pass Filter)408、PI(Proportional Integral)制御器409、VCO(voltage controlled oscillator)410、カウンタ411を備える。ただし、PLL部402のこのような構成は一例に過ぎない。すなわち、PLL部402は、自身のクロックから生成するTS(Time Stamp)とマスタノード300から受信したTSとの差分を計算し、その差分を元に自身のクロックを調整することができる構成であれば、その他どのような構成であっても良い。
【0052】
位相比較器407は、パケット受信部401から受信したSyncメッセージパケットに格納される受信タイムスタンプと、カウンタ411で生成されるタイムスタンプとの差分信号を計算する。そして、位相比較器407は、その計算結果を表す差分信号をLPF408に出力する。
【0053】
LPF408は、位相比較器407によって出力された差分信号を平準化し、ジッタやノイズを抑圧し、PI制御器409に出力する。
PI制御器409は、平準化された差分信号が最終的にゼロとなるような制御信号を生成し、VCO410に出力する。
【0054】
VCO410は、PI制御器409から出力された制御信号によって決定される周波数のクロックを生成し、カウンタ411に出力する。また、VCO410は、生成された周波数のクロックに従い、遅延計測部403のパケットカウンタのカウンタ値を減少させる。
カウンタ411は、VCO410によって生成されたクロックを元にタイムスタンプを生成し、位相比較器407に転送する。
【0055】
以上説明したPLL部402の動作により、VCO410によって生成されるスレーブノード400のクロックが、マスタノード300のクロックに同期される。
遅延計測部403は、パケットカウンタを備える。遅延計測部403は、パケットカウンタのカウンタ値の増減状況をモニタすることによって、到着するSyncメッセージの遅延量MS_Q(第二遅延量)を算出する。そして、遅延計測部403は、算出された遅延量MS_Qを時刻同期制御部405に通知する。なお、遅延量MS_Qは、上述したようにSyncメッセージがマスタノード300からスレーブノード400まで転送される間に受けたキューイング遅延の遅延量を表す。
【0056】
図8は、遅延計測部403の詳細な機能構成を表す機能ブロック図である。遅延計測部403は、パケットカウンタ601、カウンタ最大値モニタ部602、到着時カウンタ値モニタ部603、遅延算出部604を備える。遅延計測部403が備える各構成は、それぞれマスタノード300の遅延計測部306が備える同名の各構成と同じである。ただし、パケットカウンタ601は、パケット受信部401からSyncメッセージを受信する毎に、カウンタの値を所定の値分だけ増加させる。また、パケットカウンタ601は、VCO410によって出力されるクロックの周波数に従い、カウンタの値を減少させる。また、遅延算出部604は、遅延量SM_Qに代えて同様の処理によって遅延量MS_Qを算出し、算出された遅延量MS_Qを時刻同期制御部405に通知する。
【0057】
図7に戻ってスレーブノード400の構成の説明を続ける。スレーブクロック部404は、VCO410によって生成されるクロックに従い、スレーブノード400a〜400cの時刻(スレーブ時刻)を決める。
【0058】
時刻同期制御部405は、Syncメッセージ及びDelay_Requestメッセージの送受信時刻情報(Sync送信時刻Tm(0)、Sync受信時刻Ts(0)、Delay送信時刻Ts(1)、Delay受信時刻Tm(1))、遅延量SM_Q、遅延量MS_Qを用いて、マスタノード300に対するスレーブノード400の時刻のずれであるOffsetを求める。そして、時刻同期制御部405は、スレーブクロック部404の時刻(スレーブ時刻)を補正する。また、時刻同期制御部405は、Delay_Requestメッセージを生成し、パケット送信部406に送る。
パケット送信部406は、時刻同期制御部405から受信するDelay_Requestメッセージを、パケットネットワークPNを介してマスタノード300に対して送信する。
【0059】
図9は、時刻同期制御部405の詳細な機能構成を表す機能ブロック図である。時刻同期制御部405は、パケット解析部701、パケット生成部702、オフセット計算部703、時刻調整部704を備える。
パケット解析部701は、パケット受信部401からSyncメッセージ、Follow_upメッセージ、Delay_Responseメッセージを受信する。パケット解析部701は、Syncメッセージを受信すると、スレーブクロック部404を参照し、Sync受信時刻Ts(0)を取得する。そして、パケット解析部701は、取得されたSync受信時刻Ts(0)をオフセット計算部703に通知する。
【0060】
また、パケット解析部701は、Follow_upメッセージを受信すると、Follow_upメッセージ内に格納されるSync送信時刻Tm(0)を抽出する。そして、パケット解析部701は、抽出されたSync送信時刻Tm(0)をオフセット計算部703に通知すると共に、パケット生成部702に対しDelay_Requestメッセージの生成トリガを送る。
【0061】
また、パケット解析部701は、Delay_Responseメッセージを受信すると、Delay_Responseメッセージ内に格納されるDelay受信時刻Tm(1)及び遅延量SM_Qを抽出し、オフセット計算部703に通知する。
【0062】
パケット生成部702は、Delay_Requestメッセージを生成する。具体的には、パケット生成部702は、パケット解析部701からDelay_Requestメッセージの生成トリガを受信すると、Delay_Requestメッセージを生成する。パケット生成部702は、生成されたDelay_Requestメッセージをパケット送信部406に転送すると共に、スレーブクロック部404を参照し、Delay送信時刻Ts(1)を取得する。そして、パケット生成部702は、取得されたDelay送信時刻Ts(1)をオフセット計算部703に通知する。
【0063】
オフセット計算部703は、Offsetを計算し、算出されたOffsetを時刻調整部704に通知する。具体的には、パケット解析部701及びパケット生成部702から受信する各時刻(Sync送信時刻Tm(0)、Sync受信時刻Ts(0)、Delay送信時刻Ts(1)、Delay受信時刻Tm(1))と、パケット解析部701から受信する遅延量SM_Qと、遅延計測部403から受信する遅延量MS_Qとを用いて、Offsetを計算する。
【0064】
時刻調整部704は、オフセット計算部703から通知されるOffsetを用いて、スレーブクロック部404のスレーブ時刻を調整する。時刻調整部704のこの処理によって、スレーブクロック部404のスレーブ時刻は、マスタノード300のマスタクロック部302のマスタ時刻に同期する。
【0065】
〔動作〕
次に、第1実施形態における通信システム1の各装置の処理の流れについて説明する。通信システム1では、時刻同期のための処理として、マスタノード300によるマスタ第1処理、スレーブノード400によるスレーブ第1処理、マスタノード300によるマスタ第2処理、スレーブノード400によるスレーブ第2処理が、それぞれこの順で実行される。図10及び図12は、それぞれマスタノード300によるマスタ第1処理及びマスタ第2処理の流れを表すフローチャートである。図11及び図13は、それぞれスレーブノード400によるスレーブ第1処理及びスレーブ第2処理の流れを表すフローチャートである。スレーブノード400a〜400cは、それぞれ個別に図11及び図13に表されるスレーブ第1処理及びスレーブ第2処理を実行する。
【0066】
まず、図10を参照してマスタノード300によるマスタ第1処理について説明する。まず、マスタノード300がSyncメッセージをスレーブノード400へ送信する(ステップS201)。具体的には、パケット生成部303がSyncメッセージを生成し、パケット送信部304がSyncメッセージをスレーブノード400(400a〜400c)へブロードキャスト送信する。次に、マスタノード300がSync送信時刻Tm(0)を記録する(ステップS202)。具体的には、パケット生成部303がマスタクロック部302を参照してSync送信時刻Tm(0)を取得し保持する。そして、マスタノード300がFollow_upメッセージをスレーブノード400へ送信する(ステップS203)。具体的には、パケット生成部303が、Sync送信時刻Tm(0)を格納したFollow_upメッセージを生成し、パケット送信部304がFollow_upメッセージをスレーブノード400(400a〜400c)にブロードキャスト送信する。マスタノード300は、マスタ第1処理を定期的に繰り返し実行する。
【0067】
次に、図11を参照してスレーブノード400によるスレーブ第1処理について説明する。まず、スレーブノード400はマスタノード300からSyncメッセージを受信する(ステップS301)。具体的には、パケット受信部401は、マスタノード300からSyncメッセージを受信し、受信したSyncメッセージをPLL部402、遅延計測部403、時刻同期制御部405に転送する。Syncメッセージ受信後の動作は、ステップS302〜S306の処理と、ステップS307及びステップS308の処理とが並行して実行される。
【0068】
まず、ステップS302〜S306の処理について説明する。まず、スレーブノード400がSync受信時刻Ts(0)を記録する(ステップS302)。具体的には、時刻同期制御部405のパケット解析部701が、Syncメッセージの受信に応じて、スレーブクロック部404を参照してSync受信時刻Ts(0)を取得し、オフセット計算部703に通知する。
【0069】
次に、スレーブノード400がマスタノード300からFollow_upメッセージを受信する(ステップS303)。具体的には、パケット受信部401がマスタノード300からFollow_upメッセージを受信し、受信されたFollow_upメッセージを時刻同期制御部405に転送する。次に、スレーブノード400がSync送信時刻Tm(0)を記録する(ステップS304)。具体的には、時刻同期制御部405のパケット解析部701が、Follow_upメッセージの受信に応じて、Follow_upメッセージのペイロード部に格納されたSync送信時刻Tm(0)を抽出して取得する。そして、パケット解析部701が、取得されたSync送信時刻Tm(0)をオフセット計算部703に通知する。
【0070】
次に、スレーブノード400がDelay_Requestメッセージをマスタノード300へ送信する(ステップS305)。具体的には、パケット解析部701がパケット生成部702に対し、Delay_Requestメッセージの生成トリガを送る。パケット生成部702が生成トリガに応じてDelay_Requestメッセージを生成し、パケット送信部406に転送する。そして、パケット送信部406がマスタノード300に対して、Delay_Requestメッセージを送信する。このとき、スレーブノード400がDelay送信時刻Ts(1)を記録する(ステップS306)。具体的には、パケット生成部702がスレーブクロック部404を参照して、Delay送信時刻Ts(1)を取得し、オフセット計算部703に転送する。
【0071】
次に、ステップS307及びS308の処理について説明する。まず、スレーブノード400が遅延量MS_Qを計測する(ステップS307)。具体的には、遅延計測部403のカウンタ最大値モニタ部502及び到着時カウンタ値モニタ部503がパケットカウンタ501のカウンタ値をモニタし、それぞれインターバル期間における最大カウンタ値及び各Syncメッセージ到着時のカウンタ値を取得する。そして、遅延計測部403の遅延算出部504が双方のカウンタ値に基づいて遅延量MS_Qを算出する。
【0072】
次に、スレーブノード400が、計測された遅延量MS_Qを記録する(ステップS308)。具体的には、遅延算出部504が、算出された遅延量MS_Qを時刻同期制御部405のオフセット計算部703に通知する。
【0073】
次に、図12を参照してマスタノード300によるマスタ第2処理について説明する。まず、マスタノード300がスレーブノード400からDelay_Requestメッセージを受信する(ステップS401)。具体的には、パケット受信部305がスレーブノード400からDelay_Requestメッセージを受信し、受信されたDelay_Requestメッセージをパケット生成部303及び遅延計測部306に転送する。
【0074】
次に、マスタノード300がDelay受信時刻Tm(1)を記録する(ステップS402)。具体的には、パケット生成部303が、Delay_Requestメッセージの受信に応じて、マスタクロック部302を参照してDelay_Requestメッセージ受信時の時刻Tm(1)を取得する。そして、パケット生成部303が、各Delay_Requestメッセージの送信元であるスレーブノード400a〜400cのノード情報に対応付けて、各Delay_RequestメッセージのDelay受信時刻Tm(1)を記録する。
【0075】
次に、マスタノード300が各Delay_Requestメッセージについて遅延量SM_Qを計測する(ステップS403)。具体的には、遅延計測部306のカウンタ最大値モニタ部502及び到着時カウンタ値モニタ部503が、パケットカウンタ501のカウンタ値をモニタし、それぞれインターバル期間における最大カウンタ値及び各Delay_Requestメッセージ到着時のカウンタ値を取得する。次に、遅延算出部504が双方のカウンタ値情報に基づいて、各Delay_Requestメッセージの遅延量SM_Qを算出する。そして、遅延計測部306が、算出された各遅延量SM_Qをパケット生成部303に通知する。パケット生成部303は、各Delay_Requestメッセージの送信元であるスレーブノード400a〜400cのノード情報に対応付けて、各Delay_Requestメッセージの遅延量SM_Qを記録する。
【0076】
次に、マスタノード300が、遅延量SM_Q及びDelay受信時刻Tm(1)が格納されたDelay_Responseメッセージを、各スレーブノード400a〜400cに対して送信する(ステップS404)。具体的には、パケット生成部303が、各スレーブノード400a〜400cに対応する遅延量SM_Q及び時刻情報Tm(1)を格納したDelay_Responseメッセージを生成し、パケット送信部304に転送する。そして、パケット送信部304がスレーブノード400a〜400cに対して、各Delay_Responseメッセージをユニキャスト送信する。
【0077】
次に、図13を参照してスレーブノード400によるスレーブ第2処理について説明する。まず、スレーブノード400がマスタノード300からDelay_Responseメッセージを受信する(ステップS501)。具体的には、パケット受信部401がマスタノード300からDelay_Responseメッセージを受信し、受信されたDelay_Responseメッセージを時刻同期制御部405に転送する。
【0078】
次に、スレーブノード400が、受信されたDelay_Responseメッセージから遅延量SM_Q及びDelay受信時刻Tm(1)を抽出し記録する(ステップS502)。具体的には、時刻同期制御部405のパケット解析部701が、Delay_Responseメッセージの受信に応じて、Delay_Responseメッセージのペイロード部に格納された遅延量SM_Q及びDelay受信時刻Tm(1)を抽出し取得する。そして、パケット解析部701が、取得された遅延量SM_Q及びDelay受信時刻Tm(1)をオフセット計算部703に通知する。
【0079】
次に、スレーブノード400が、時刻差MS_Diff及び時刻差SM_Diffの値を算出する(ステップS503)。具体的には、オフセット計算部703が以下の二つの式(式12及び式13)に基づいて、時刻差MS_Diff及び時刻差SM_Diffの値を算出し、保持する。
MS_Diff = Ts(0) - Tm(0) ・・・式12
SM_Diff = Tm(1) - Ts(1) ・・・式13
【0080】
次に、スレーブノード400がOffsetを算出する(ステップS504)。具体的には、オフセット計算部703が、時刻差MS_Diff及び時刻差SM_Diffと、遅延量MS_Q及び遅延量SM_Qとに基づいて、以下の式14によりOffsetを算出する。そして、オフセット計算部703が、算出されたOffsetの値を時刻調整部704に通知する。
Offset = {(MS_Diff - SM_Diff) - (MS_Q - SM_Q)} / 2 ・・・式14
【0081】
なお、式14は以下のようにして求められる。まず、時刻差MS_Diffと遅延量MS_Qとから以下のような式15が求められる。
MS_Diff = Propagation_Delay + MS_Q + Offset ・・・式15
また、時刻差SM_Diffと遅延量SM_Qとから以下のような式16が求められる。
SM_Diff = Propagation_Delay + SM_Q - Offset ・・・式16
式15及び式16から、上記の式14が求められる。なお、式15及び式16におけるpropagation_Delayは、マスタノード300とスレーブノード400との間の伝播遅延の遅延量を表す。
【0082】
図13に表される処理の説明に戻る。上記のステップS504の処理の後、スレーブノード400が、算出されたOffsetの値を用いてスレーブ時刻を調整する(ステップS505)。具体的には、時刻調整部704が、Offsetが正の値の場合にはスレーブ時刻をOffset分遅らせ、Offsetが負の値の場合にはスレーブ時刻をOffset分進める。このようなスレーブ時刻の調整により、スレーブ時刻はマスタノード300のマスタ時刻に同期する。
【0083】
図14及び図15は、通信システム1による時刻同期処理の具体例を表すシーケンス図である。まず、図14を用いて通信システム1による時刻同期処理の具体例について説明する。図14では、マスタノード300に対するスレーブノード400のOffsetが“3”、マスタノード300とスレーブノード400との間の伝播遅延の遅延量Propagation_Delayが“3”、マスタノード300からスレーブノード400へのキューイング遅延の遅延量MS_Qが“0”、スレーブノード400からマスタノード300へのキューイング遅延の遅延量SM_Qが“0”である。なお、図14及び図15では、説明の便宜のため、マスタ時刻及びスレーブ時刻を時/分/秒の表記ではなく、整数値で示す。
【0084】
マスタ第1処理においてSync送信時刻Tm(0)は、“4”である。スレーブ第1処理において、Sync受信時刻Ts(0)は“10”であり、Delay送信時刻Ts(1)は“15”である。マスタ第2処理において、Delay受信時刻Tm(1)は“15”である。マスタノード300からスレーブノード400へのキューイング遅延の遅延量MS_Qは、スレーブ第1処理において遅延計測部403によって“0”と計測される。また、スレーブノード400からマスタノード300へのキューイング遅延の遅延量SM_Qは、マスタ第2処理において遅延計測部306によって、“0”と計測される。スレーブノード400のオフセット計算部703は、スレーブ第2処理において、以上の各値に基づいて以下の通りOffsetの値を“3”と算出する。
【0085】
MS_Diff = Ts(0) - Tm(0) = 10 - 4 = 6
SM_Diff = Tm(1) - Ts(1) = 15 - 15 = 0
Offset = {(MS_Diff - SM_Diff) - (MS_Q - SM_Q)} / 2 = {(6 - 0) - (0 - 0)} / 2 = 3
【0086】
なお、図14は、Offsetが“3”となる条件下でのシーケンスであり、上記のように通信システム1の時刻同期処理によってOffsetを正確に算出することが可能となっている。
【0087】
次に、図15を用いて通信システム1による時刻同期処理の具体例について説明する。図15では、マスタノード300に対するスレーブノード400のOffsetが“4”、マスタノード300とスレーブノード400との間の伝播遅延の遅延量Propagation_Delayが“3”、マスタノード300からスレーブノード400へのキューイング遅延の遅延量MS_Qが“2”、スレーブノード400からマスタノード300へのキューイング遅延の遅延量SM_Qが“3”である。
【0088】
マスタ第1処理においてSync送信時刻Tm(0)は、“4”である。スレーブ第1処理において、Sync受信時刻Ts(0)は“13”であり、Delay送信時刻Ts(1)は“17”である。マスタ第2処理において、Delay受信時刻Tm(1)は“19”である。マスタノード300からスレーブノード400へのキューイング遅延の遅延量MS_Qは、スレーブ第1処理において遅延計測部403によって“2”と計測される。また、スレーブノード400からマスタノード300へのキューイング遅延の遅延量SM_Qは、マスタ第2処理において遅延計測部306によって、“3”と計測される。スレーブノード400のオフセット計算部703は、スレーブ第2処理において、以上の各値に基づいて以下の通りOffsetの値を“4”と算出する。
【0089】
MS_Diff = Ts(0) - Tm(0) = 13 - 4 = 9
SM_Diff = Tm(1) - Ts(1) = 19 - 17 = 2
Offset = {(MS_Diff - SM_Diff) - (MS_Q - SM_Q)} / 2 = {(9 - 2) - (2 - 3)} / 2 = 4
【0090】
なお、図15は、Offsetが“4”となる条件下でのシーケンスであり、キューイング遅延がゼロでない場合であっても、上記のように通信システム1の時刻同期処理によってOffsetを正確に算出することが可能となっている。
【0091】
図16は、通信システム1において計測される遅延量の確率分布を表す図である。図16における実験では、パケットネットワークPNの代わりにネットワークエミュレータを接続し、マスタノード300から定期的に送信されるSyncメッセージのパケットに対して遅延量を付加し、スレーブノード400の遅延計測部403において遅延量を測定した。図16では、ネットワークエミュレータによって付加した遅延量の分布と、スレーブノード400で計測された遅延量の分布を示している。図16の横軸が遅延量を表し、縦軸が確率を示す。一様分布及びポアソン分布のいずれの場合も、計測された遅延量の分布がネットワークエミュレータによって付加された遅延量の分布とほぼ一致している。したがって、遅延計測部403において、遅延量MS_Qが正しく計測できていることが明らかである。マスタノード300の遅延計測部306も、スレーブノード400の遅延計測部403と同様の動作を行なうため、SM_Qを正しく計測できていることが明らかである。そのため、通信システム1による時刻同期処理によって、Offsetの値を正確に算出し、マスタ時刻に対してスレーブ時刻を正確に同期できていることが明らかである。
【0092】
上記の通信システム1によれば、スレーブノード400の遅延計測部403が、マスタノード300からスレーブノード400へのキューイング遅延の遅延量MS_Qを正確に計測する。また、マスタノード300の遅延計測部306がスレーブノード400からマスタノード300へのキューイング遅延の遅延量SM_Qを正確に計測する。そして、マスタノード300から遅延量SM_Qをスレーブノード400に通知することによって、スレーブノード400が、マスタノード300とスレーブノード400との間の双方向のキューイング遅延の遅延量をそれぞれ個別に認識できる。これによって、Pure IEEE1588のように、双方向のキューイング遅延を等しいと仮定してOffsetを算出する場合に比べて、双方向のキューイング遅延の実際の差異によって生じる誤差を除外することができ、より精度の高い時刻同期を実現することが可能となる。
【0093】
また、通信システム1では、各々の方向のキューイング遅延の遅延量を、マスタノード300及びスレーブノード400のみによって計測することができる。そのため、パケットネットワークPNにおける中継ノードにおいてTC機能などの特別な機能を実装する必要がなく、既存の中継ノードで対応することが可能である。すなわち、中継ノードに対してTC機能を実装する必要があるIEEE1588v2 w/TCに比べて、中継ノードを置き換える必要が生じず、導入に要するコストを抑えることができ、導入が容易であるという効果がある。
【0094】
<変形例>
遅延計測部306は、パケットカウンタ501に代えてパケットバッファを用いて構成されても良い。パケットバッファは、パケット受信部401からDelay_Requestメッセージのパケットを受信すると、受信されたパケットをバッファに蓄積する。また、パケットバッファは、クロック生成部301で決定される周波数に従って、蓄積しているパケットを出力する。図17は、パケットバッファを用いて構成された場合の、遅延計測部306の処理の概略を表す図である。図17において、縦軸はバッファへの蓄積量を表し、下から上へ向けて高い蓄積量を表す。横軸は時間を表し、左から右へ向けて進行する。縦に伸びる等間隔に並んだ複数の破線は、キューイング遅延が発生しない場合にDelay_Requestメッセージのパケットが受信されるタイミングを表す。上方向を指す矢印は、Delay_Requestメッセージのパケットが実際に受信されたタイミングを表す。パケットバッファは、Delay_Requestメッセージのパケットが受信されると、受信されたビット数分だけ蓄積量が増加する。縦に伸びる破線と上方向の矢印とが時間軸で一致している場合、すなわちキューイング遅延が発生せずにDelay_Requestメッセージのパケットが受信されている場合は、読み出されたタイミング(蓄積量が減るタイミング)から新たに受信されるタイミング(蓄積量が増えるタイミング)との間の時間幅は最小Tminとなる。一方、キューイング遅延が発生している場合には、上記の時間幅はTminよりも大きい値となる。このとき、最小値Tminと時間幅との差分が、発生しているキューイング遅延の遅延量と等価となる。
【0095】
なお、上述した遅延計測部306のいずれの構成も、遅延を計測するための構成の一例にすぎず、キューイング遅延の遅延量SM_Qを計測できる構成であればその他の構成が採用されても良い。また、遅延計測部403についても同様である。
【0096】
[第2実施形態]
通信システム1の第1実施形態では、マスタノード300が遅延量SM_Qを計測しDelay_Responseメッセージに格納してスレーブノード400へ送信する。しかしながら、IEEE1588の標準では、Delay_Responseメッセージ内にDelay受信時刻Tm(1)を格納するためのフィールドはあるものの、遅延量SM_Qを格納するためのフィールドはない。そのため、第1実施形態では、Delay_Responseメッセージの標準フォーマットを変更する必要が生じる。そこで、通信システム1の第2実施形態は、Delay_Responseメッセージの標準フォーマットを変更することなく、時刻同期処理を実現することを可能とする。以下、通信システム1の第2実施形態について、第1実施形態と異なる点を中心に説明する。
【0097】
〔マスタノード〕
図18は、第2実施形態におけるマスタノード300の機能構成を表す機能ブロック図である。第2実施形態におけるマスタノード300は、パケット生成部303に代えてパケット生成部303aを備える点で第1実施形態におけるマスタノード300と異なり、その他の構成は同じである。
【0098】
パケット生成部303aは、Delay_Responseメッセージに関する処理がパケット生成部303と異なり、他の構成は同じである。パケット生成部303aは、Delay受信時刻Tm(1)を、遅延量SM_Qを用いて、補正Delay受信時刻Tm(2)(補正時刻)として補正する。具体的には、パケット生成部303aは、Delay受信時刻Tm(1)から遅延量SM_Qを減算した結果として補正Delay受信時刻Tm(2)を算出する。そして、パケット生成部303aは、補正Delay受信時刻Tm(2)をDelay_Responseメッセージに格納し、パケット送信部304へ送る。
【0099】
〔スレーブノード〕
図19は、第2実施形態におけるスレーブノード400の機能構成を表す機能ブロック図である。第2実施形態におけるスレーブノード400は、時刻同期制御部405に代えて時刻同期制御部405aを備える点で第1実施形態におけるスレーブノード400と異なり、その他の構成は同じである。
【0100】
時刻同期制御部405aは、Delay_Requestメッセージの受信時刻情報として補正Delay受信時刻Tm(2)を用いる点、遅延量SM_Qを用いない点で時刻同期制御部405と異なり、他の構成は同じである。
【0101】
図20は、第2実施形態における時刻同期制御部405aの機能構成を表す機能ブロック図である。第2実施形態における時刻同期制御部405aは、パケット解析部701及びオフセット計算部703に代えて、パケット解析部701a及びオフセット計算部703aを備える点で第1実施形態における時刻同期制御部405と異なり、他の構成は同じである。
【0102】
パケット解析部701aは、Delay_Responseメッセージに関する処理がパケット解析部701と異なり、他の構成は同じである。パケット解析部701aは、Delay_Responseメッセージから補正Delay受信時刻Tm(2)を抽出し、抽出された補正Delay受信時刻Tm(2)をオフセット計算部703aに通知する。
【0103】
オフセット計算部703aは、Delay受信時刻Tm(1)に代えて補正Delay受信時刻Tm(2)を用いてOffsetを計算する点でオフセット計算部703と異なる。オフセット計算部703aの処理の詳細については後述する。
【0104】
〔動作〕
次に、第2実施形態における通信システム1の各装置の処理の流れについて説明する。ただし、マスタ第1処理及びスレーブ第1処理は、それぞれ第1実施形態における処理(図10及び図11)と同じであるため説明を省略する。
【0105】
図21は、第2実施形態におけるマスタ第2処理の流れを表すフローチャートである。図21において、図12と同じ処理については同じ符号を付して表し説明を省略する。第2実施形態では、ステップS403の後、マスタノード300が補正Delay受信時刻Tm(2)を算出する(ステップS411)。具体的には、パケット生成部303aが遅延量SM_Q及びDelay受信時刻Tm(1)を用いて下記の式17により補正Delay受信時刻Tm(2)を算出する。
Tm(2) = Tm(1) - SM_Q ・・・式17
【0106】
このとき、パケット生成部303aは、スレーブノード400a〜400c毎の補正Delay受信時刻Tm(2)を算出する。そして、パケット生成部303aは、Delay_Requestメッセージの送信元であるスレーブノード400a〜400cのノード情報に対応付けて、補正Delay受信時刻Tm(2)を記録する。なお、補正Delay受信時刻Tm(2)は、キューイング遅延が付加されずにDelay_Requestメッセージが転送された場合の受信時刻を示す。
【0107】
次に、マスタノード300が、算出された補正Delay受信時刻Tm(2)を格納したDelay_Responseメッセージをスレーブノード400に送信する(ステップS412)。具体的には、パケット生成部303aは、スレーブノード400a〜400c毎に、補正Delay受信時刻Tm(2)を格納したDelay_Responseメッセージを生成し、パケット送信部304に送る。パケット送信部304は、各スレーブノード400a〜400cに対して、Delay_Responseメッセージをユニキャスト送信する。
【0108】
図22は、第2実施形態におけるスレーブ第2処理の流れを表すフローチャートである。図22において、図13と同じ処理については同じ符号を付して表し説明を省略する。第2実施形態では、ステップS501の処理の後、スレーブノード400がDelay_Responseメッセージから補正Delay受信時刻Tm(2)を抽出し記録する(ステップS511)。具体的には、時刻同期制御部405aのパケット解析部701aが、Delay_Responseメッセージの受信に応じて、Delay_Responseメッセージのペイロード部に格納される補正Delay受信時刻Tm(2)を抽出し、記録する。そして、パケット解析部701aが補正Delay受信時刻Tm(2)をオフセット計算部703aに通知する。
【0109】
次に、スレーブノード400が、時刻差MS_Diff及び補正時刻差SM_Diff2の値を算出する(ステップS512)。このとき、時刻差MS_Diffを算出する処理は第1実施形態と同じである。オフセット計算部703aは、Delay送信時刻Ts(1)及び補正Delay受信時刻Tm(2)を用いて、以下の式17に基づいて補正時刻差SM_Diff2を算出する。
SM_Diff2 = Tm(2)- Ts(1) ・・・式17
【0110】
次に、スレーブノード400が、時刻差MS_Diff、補正時刻差SM_Diff2、遅延量MS_Qを用いてOffsetを計算する(ステップS513)。具体的には、オフセット計算部703aが、時刻差MS_Diff、補正時刻差SM_Diff2、遅延量MS_Qに基づいて、以下の式18によりOffsetを算出する。そして、オフセット計算部703aが、算出されたOffsetの値を時刻調整部704に通知する。
Offset = {(MS_Diff - SM_Diff2) - MS_Q} / 2 ・・・式18
【0111】
なお、式18は以下のようにして求められる。まず、時刻差MS_Diffと遅延量MS_Qとから以下のような式19が求められる。なお、式19は式15と同じである。
MS_Diff = Propagation_Delay + MS_Q + Offset ・・・式19
また、補正時刻差SM_Diff2から以下のような式20が求められる。
SM_Diff2 = Propagation_Delay - Offset ・・・式20
式19及び式20から、上記の式18が求められる。なお、式19及び式20におけるpropagation_Delayも、上記のものと同様に、マスタノード300とスレーブノード400との間の伝播遅延の遅延量を表す。
【0112】
図23は、第2実施形態における通信システム1による時刻同期処理の具体例を表すシーケンス図である。図23では、マスタノード300に対するスレーブノード400のOffsetが“4”、マスタノード300とスレーブノード400との間の伝播遅延の遅延量Propagation_Delayが“3”、マスタノード300からスレーブノード400へのキューイング遅延の遅延量MS_Qが“2”、スレーブノード400からマスタノード300へのキューイング遅延の遅延量SM_Qが“3”である。
【0113】
マスタ第1処理においてSync送信時刻Tm(0)は、“4”である。スレーブ第1処理において、Sync受信時刻Ts(0)は“13”であり、Delay送信時刻Ts(1)は“17”である。マスタ第2処理において、Delay受信時刻Tm(1)は“19”である。マスタノード300からスレーブノード400へのキューイング遅延の遅延量MS_Qは、スレーブ第1処理において遅延計測部403によって“2”と計測される。また、スレーブノード400からマスタノード300へのキューイング遅延の遅延量SM_Qは、マスタ第2処理において遅延計測部306によって、“3”と計測される。マスタノード300のパケット生成部303aは、以下のように補正Delay受信時刻Tm(2)を算出する。
Tm(2)= Tm(1) - SM_Q = 19 - 3 = 16
【0114】
スレーブノード400のオフセット計算部703aは、スレーブ第2処理において、以上の各値に基づいて以下の通りOffsetの値を“4”と算出する。
MS_Diff = Ts(0) - Tm(0) = 13 - 4 = 9
SM_Diff2 = Tm(2) - Ts(1) = 16 - 17 = -1
Offset = {(MS_Diff - SM_Diff2) - MS_Q} / 2 = {(9 - (- 1)) - 2} / 2 = 4
【0115】
なお、図23は、Offsetが“4”となる条件下でのシーケンスであり、Delay_Responseメッセージに遅延量SM_Qを格納するためのフィールドを設けない場合であっても、上記のように通信システム1の時刻同期処理によってOffsetを正確に算出することが可能となっている。
【0116】
このように構成された第2実施形態における通信システム1では、Delay_Responseメッセージに遅延量SM_Qを格納するためのフィールドを設けることなく、第1実施形態における通信システム1と同程度の精度で時刻同期処理を実行することが可能となる。したがって、標準フォーマットのDelay Responseメッセージを用いることが可能となる。そのため、例えば通信システム1を実装する際のコストの低減や時間の削減を行うことが可能となるとの効果を奏する。
【0117】
[第3実施形態]
上述した第1実施形態及び第2実施形態では、マスタノード300及びスレーブノード400が遅延量MS_Q及びSM_Qの計測を行なうことによって、既存の中継ノードのままで、マスタ/スレーブ間の双方向の遅延の非対称性を考慮した高精度の時刻同期を実現した。これに対し、第3実施形態では、マスタノード300及びスレーブノード400それぞれの前段に各遅延量を計測するノード(以下、「エミュレーションノード」という。)を配置することによって、全ての中継ノードを置き換えることなく、IEEE1588v2 w/TCを実現する。
【0118】
図24は、第3実施形態における通信システム1のシステム構成図である。第3実施形態における通信システム1は、マスタノード300、スレーブノード400(400a〜400c)、エミュレーションノード800(800a〜800d)、パケットネットワークPNを備える。エミュレーションノード800a〜800dは、それぞれスレーブノード400a〜400c及びマスタノード300の前段に配置される。なお、エミュレーションノード800は、パケットネットワークPNの中継ノードの機能として実装されても良いし、パケットネットワークPNの中継ノードとは異なる装置として実装されても良い。エミュレーションノード800は、中継ノードとは異なる装置として実装される場合には、例えば単一の装置として実装され、マスタノード300やスレーブノード400に対して接続される。以下、通信システム1の第3実施形態について、第1実施形態と異なる点を中心に説明する。
【0119】
〔マスタノード〕
図25は第3実施形態におけるマスタノード300の機能構成を表す機能ブロック図である。第3実施形態におけるマスタノード300は、IEEE1588v2 w/TCに基づいて動作する。具体的には、第3実施形態におけるマスタノード300は、パケット生成部303に代えてパケット生成部303bを備える点、遅延計測部306を備えない点で、第1実施形態におけるマスタノード300と異なり、その他の構成は同じである。
【0120】
パケット生成部303bは、Delay_Responseメッセージに関する処理がパケット生成部303と異なり、他の構成は同じである。パケット生成部303bは、Delay_Requestメッセージの受信に応じて、Delay受信時刻Tm(1)を取得すると共に、Delay_Requestメッセージ内からCF_SM値を抽出する。そして、パケット生成部303bは、Delay受信時刻Tm(1)及びCF_SM値を格納したDelay_Responseメッセージを生成する。
【0121】
〔スレーブノード〕
図26は、第3実施形態におけるスレーブノード400の機能構成を表す機能ブロック図である。第3実施形態におけるスレーブノード400は、IEEE1588v2 w/TCに基づいて動作する。具体的には、第3実施形態におけるスレーブノード400は、時刻同期制御部405に代えて時刻同期制御部405bを備える点、遅延計測部403を備えない点で第1実施形態におけるスレーブノード400と異なり、その他の構成は同じである。
【0122】
時刻同期制御部405bは、遅延量SM_Q及び遅延量MS_Qに代えて、CF値(CF_MS、CF_SM)を用いてOffsetを求める点で時刻同期制御部405と異なり、他の構成は同じである。
【0123】
図27は、時刻同期制御部405bの詳細な機能構成を表す機能ブロック図である。時刻同期制御部405bは、パケット解析部701に代えてパケット解析部701bを備える点、オフセット計算部703に代えてオフセット計算部703bを備える点で時刻同期制御部405と異なり、その他の構成は同じである。
【0124】
パケット解析部701bは、Syncメッセージ及びDelay_Responseメッセージに関する処理がパケット解析部701と異なる。具体的には、パケット解析部701bは、Syncメッセージを受信すると、スレーブクロック部404を参照しSync受信時刻Ts(0)を取得すると共に、SyncメッセージからCF値CF_MSを抽出する。そして、パケット解析部701bは、抽出されたSync受信時刻Ts(0)及びCF値CF_MSを、オフセット計算部703bに通知する。また、パケット解析部701bは、Delay_Responseメッセージを受信すると、格納されるDelay受信時刻Tm(1)及びCF値CF_SMを抽出し、オフセット計算部703bに通知する。
【0125】
オフセット計算部703bは、Syncメッセージ及びDelay_Requestメッセージの送受信時刻情報(Sync送信時刻Tm(0)、Sync受信時刻Ts(0)、Delay送信時刻Ts(1)、Delay受信時刻Tm(1))、CF値CF_MS及びCF_SMを用いてOffsetを計算する。なお、CF値とは、Delay ResponseメッセージのCorrection Fieldに格納される二つの値CF_MS及びCF_SMである。CF_MSは遅延量MS_Qと同じ値であり、CF_SMは遅延量SM_Qと同じ値である。したがって、オフセット計算部703bは、上記の式14においてMS_Q及びSM_Qの値をそれぞれCF_MS及びCF_SMに置き換えることによって、Offsetの値を算出する。
【0126】
〔エミュレーションノード〕
図28は、第3実施形態におけるエミュレーションノード800の機能構成を表す機能ブロック図である。エミュレーションノード800は、パケット受信部801と、PLL部402と、遅延計測部803と、クロック部804と、TC処理部805と、パケット送信部806とから構成される。PLL部402は、第1実施形態におけるスレーブノード400が備えるPLL部402と同じ構成である。クロック部804は、第1実施形態におけるスレーブクロック部404と同じ構成である。なお、エミュレーションノード800は、例えばバスで接続されたCPU、メモリ、補助記憶装置、通信インタフェース等を備え、時刻同期用プログラムを実行することによって上記各機能部を備える装置として構成されても良い。
【0127】
遅延計測部803は、マスタノード300bの前段に配置されるエミュレーションノード800dと、スレーブノード400bの前段に配置されるエミュレーションノード800a〜cとでは、その構成が異なる。エミュレーションノード800dの遅延計測部803は、第1実施形態におけるマスタノード300の遅延計測部306と同じ構成である。一方、エミュレーションノード800a〜800cの遅延計測部803は、第1実施形態におけるスレーブノード400の遅延計測部403と同じ構成である。いずれの場合も、遅延計測部803は、計測結果をTC処理部805に通知する。
【0128】
パケット受信部801は、Syncメッセージ又はDelay_Requestメッセージを受信すると、受信されたメッセージをTC処理部805に転送すると共に、クロック部804を参照して各メッセージの受信時刻を取得する。そして、パケット受信部801は、各メッセージの受信時刻をパケット送信部806に通知する。また、パケット受信部801は、Follow_upメッセージ又はDelay_Responseメッセージを受信すると、そのままパケット送信部806に転送する。
【0129】
遅延計測部803は、エミュレーションノード800にメッセージが至るまでのキューイング遅延の遅延量(以下、「予備遅延量」という。)MS_Q2及びSM_Q2を計測する。なお、上述したように、遅延計測部803の構成は、第1実施形態におけるスレーブノード400の遅延計測部403と同じ構成であり、遅延計測部403と同じ処理によって算出された結果の遅延量が予備遅延量を表す。
【0130】
TC処理部805は、パケット受信部801から受信するSyncメッセージ及びDelay_RequestメッセージのCorrection Fieldに、予備遅延量MS_Q2及びSM_Q2を、それぞれCF値CF_MS及びCF_SMとして記録し、パケット送信部806に転送する。
【0131】
パケット送信部806は、TC処理部805からSyncメッセージ又はDelay_Requestメッセージを送信すると、クロック部804を参照して送信時刻を取得する。そして、パケット送信部806は、送信時刻と、パケット受信部801から通知された受信時刻と、に基づいてノード内滞在時間を計算する。ノード内滞在時間とは、自装置内にパケットが滞在していた時間を表す。そして、パケット送信部806は、Correction Fieldに格納されているCF値にノード内滞在時間を加算し、パケットネットワークPN又は宛先となる各ノード(マスタノード300又はスレーブノード400)に転送する。CF値である予備遅延量MS_Q2及びSM_Q2にノード内滞在時間が加算されることによって、加算後のCF値は遅延量MS_Q及びSM_Qと同じ値となる。また、パケット送信部806は、Follow_upメッセージ及びDelay_Responseメッセージについては、そのままパケットネットワークPN又は宛先となる各ノード(マスタノード300又はスレーブノード400)に転送する。
【0132】
〔動作〕
次に、第3実施形態における通信システム1の各装置の処理の流れについて説明する。ただし、マスタ第1処理は、第1実施形態における処理(図10)と同じであるため説明を省略する。
【0133】
図29は、第3実施形態におけるスレーブ第1処理の流れを表すフローチャートである。図29において、図11と同じ処理については同じ符号を付して表し説明を省略する。第3実施形態では、ステップS302の処理の後、スレーブノード400が、受信されたSyncメッセージからCF_MSを抽出する(ステップS321)。具体的には、時刻同期制御部405bのパケット解析部701bが、受信されたSyncメッセージからCF_MSを抽出し、CF_MSをオフセット計算部703bに通知する。そして、ステップS311の処理の後は、スレーブノード400はS303〜S306の処理を実行する。
【0134】
図30は、第3実施形態におけるマスタ第2処理の流れを表すフローチャートである。図30において、図12と同じ処理については同じ符号を付して表し説明を省略する。第3実施形態では、ステップS402の後、マスタノード300が、受信されたDelay_RequestメッセージからCF_SMを抽出する(ステップS421)。具体的には、パケット生成部303bが、受信されたDelay_RequestメッセージからCF_SMを抽出し、Delay_Requestメッセージの送信元である各スレーブノード400のノード情報と共に保持する。
【0135】
次に、マスタノード300が、CF値CF_SM及びDelay受信時刻Tm(1)が格納されたDelay_Responseメッセージを、各スレーブノード400a〜400cに対して送信する(ステップS422)。具体的には、パケット生成部303bが、各スレーブノード400a〜400cに対応するCF値CF_SM及び時刻情報Tm(1)を格納したDelay_Responseメッセージを生成し、パケット送信部304に転送する。そして、パケット送信部304がスレーブノード400a〜400cに対して、各Delay_Responseメッセージをユニキャスト送信する。
【0136】
図31は、第3実施形態におけるスレーブ第2処理の流れを表すフローチャートである。図31において、図13と同じ処理については同じ符号を付して表し説明を省略する。第3実施形態では、ステップS501の後、スレーブノード400が、受信されたDelay_ResponseメッセージからCF値CF_SM及びDelay受信時刻Tm(1)を抽出し記録する(ステップS521)。具体的には、時刻同期制御部405bのパケット解析部701bが、Delay_Responseメッセージの受信に応じて、Delay_Responseメッセージのペイロード部に格納されたCF値CF_SM及びDelay受信時刻Tm(1)を抽出し取得する。そして、パケット解析部701bが、取得されたCF値CF_SM及びDelay受信時刻Tm(1)をオフセット計算部703bに通知する。
【0137】
次に、スレーブノード400が、時刻差MS_Diff及び時刻差SM_Diffの値を算出する(ステップS522)。具体的には、オフセット計算部703bが以下の二つの式(式21及び式22)に基づいて、時刻差MS_Diff及び時刻差SM_Diffの値を算出し、保持する。
MS_Diff = (Ts(0) - CF_MS) - Tm(0) ・・・式21
SM_Diff = (Tm(1) - CF_SM) - Ts(1) ・・・式22
【0138】
次に、スレーブノード400がOffsetを算出する(ステップS523)。具体的には、オフセット計算部703bが、時刻差MS_Diff及び時刻差SM_Diffに基づいて、以下の式23によりOffsetを算出する。そして、オフセット計算部703bが、算出されたOffsetの値を時刻調整部704に通知する。
【0139】
Offset = (MS_Diff - SM_Diff) / 2
={(Ts(0) - CF_MS) - Tm(0) - ((Tm(1) - CF_SM) - Ts(1))} / 2
={Ts(0) - CF_MS - Tm(0) - Tm(1) + CF_SM + Ts(1)} / 2 ・・・式23
【0140】
なお、式23は以下のようにして求められる。まず、時刻差MS_Diffは以下のような式24により表される。
MS_Diff = Propagation_Delay + Offset ・・・式24
また、時刻差SM_Diffは以下のような式25により表される。
SM_Diff = Propagation_Delay - Offset ・・・式25
そして、式24及び式25から、上記の式23が求められる。式24及び式25におけるpropagation_Delayは、マスタノード300とスレーブノード400との間の伝播遅延の遅延量を表す。
【0141】
なお、オフセット計算部703bは、CF_SM及びCF_MSをそれぞれSM_Q及びMS_Qに置き換えることによって、第1実施形態と同様に式12〜式14を用いてOffsetを算出するように構成されても良い。
【0142】
図32は、第3実施形態におけるエミュレーションノード800による処理の流れを表すフローチャートである。まず、エミュレーションノード800が1588メッセージを受信する(ステップS601)。具体的には、パケット受信部801が1588パケットを受信する。受信された1588メッセージがSyncメッセージ又はDelay_Requestメッセージである場合には、エミュレーションノード800がキューイング遅延の予備遅延量を計測する(ステップS602)。具体的には、遅延計測部803の遅延算出部604が、予備遅延量MS_Q2及びSM_Q2を算出する。
【0143】
次に、エミュレーションノード800が、予備遅延量MS_Q2及びSM_Q2をCF値として記録する(ステップS603)。具体的には、TC処理部805が、Syncメッセージ又はDelay_RequestメッセージのCorrection Fieldに、予備遅延量MS_Q2及びSM_Q2を、それぞれCF値CF_MS及びCF_SMとして記録する。次に、エミュレーションノード800が、ノード内滞在時間を計測する(ステップS604)。具体的には、パケット送信部806が、Syncメッセージ又はDelay_Requestメッセージの受信時刻及び送信時刻に基づいて、ノード内滞在時間を計算する。次に、エミュレーションノード800が、CF値に対してノード内滞在時間を加算する(ステップS605)。具体的には、パケット送信部806が、Correction Fieldに格納されているCF値にノード内滞在時間を加算する。そして、エミュレーションノード800が1588メッセージを送信する(ステップS606)。具体的には、パケット送信部806が、ノード内滞在時間が加算された後のSyncメッセージ又はDelay_Requestメッセージを、パケットネットワークPN又は宛先となる各ノード(マスタノード300又はスレーブノード400)に転送する。
【0144】
一方、ステップS601において受信された1588メッセージがSyncメッセージ及びDelay_Requestメッセージ以外のメッセージである場合には、エミュレーションノード800がこの1588メッセージを送信する(ステップS607)。具体的には、パケット送信部806が、受信されたメッセージを、パケットネットワークPN又は宛先となる各ノード(マスタノード300又はスレーブノード400)に転送する。
【0145】
図33は、第3実施形態における通信システム1による時刻同期処理の具体例を表すシーケンス図である。図33では、マスタノード300に対するスレーブノード400aのOffsetが“4”、マスタノード300とスレーブノード400aとの間の伝播遅延の遅延量Propagation_Delayが“3”、マスタノード300からスレーブノード400aへのキューイング遅延の遅延量MS_Qが“2”、スレーブノード400aからマスタノード300へのキューイング遅延の遅延量SM_Qが“3”である。
【0146】
マスタ第1処理においてSync送信時刻Tm(0)は、“4”である。スレーブ第1処理において、Sync受信時刻Ts(0)は“13”であり、Delay送信時刻Ts(1)は“17”である。マスタ第2処理において、Delay受信時刻Tm(1)は“19”である。
【0147】
エミュレーションノード800aは、Syncメッセージに対してマスタノード300からエミュレーションノード800aまでの間で付加されたキューイング遅延(予備遅延量)MS_Q2を計測する。また、エミュレーションノード800aは、自装置におけるノード内滞在時間Ts_syncを予備遅延量MS_Q2に加算し、CF_MS=2としてSyncメッセージに格納する。そして、エミュレーションノード800aは、Syncメッセージをスレーブノード400aに転送する。
【0148】
エミュレーションノード800dは、Delay_Requestメッセージに対してスレーブノード400aからエミュレーションノード800dまでの間で付加されたキューイング遅延(予備遅延量)SM_Q2を計測する。また、エミュレーションノード800dは、自装置におけるノード内滞在時間Ts_dreqを予備遅延量SM_Q2に加算し、CF_SM=3としてDelay_Requestメッセージに格納する。そして、エミュレーションノード800dは、Delay_Requestメッセージをマスタノード300に転送する。
【0149】
スレーブノード400aのオフセット計算部703bは、スレーブ第2処理において、以上の各値に基づいて以下の通りOffsetの値を“4”と算出する。
MS_Diff = (Ts(0) - CF_MS) - Tm(0) = (13 - 2) - 4 = 7
SM_Diff = (Tm(1) - CF_SM) - Ts(1) = (19 - 3) - 17 = -1
Offset = (MS_Diff - SM_Diff) / 2 = (7 - ( -1)) / 2 = 4
【0150】
なお、図33は、Offsetが“4”となる条件下でのシーケンスであり、実施例3の時刻同期制御方式により、エミュレーションノード800が中継ノードのTC機能を代替し、IEEE1588v2 w/TCでOffsetを求める場合でも上記のように通信システム1の時刻同期処理によってOffsetを正確に算出することが可能となっている。
【0151】
このように構成された第3実施形態における通信システム1では、マスタノード300及びスレーブノード400の前段に配置されたエミュレーションノード800が、他方のノードから自装置までのキューイング遅延の合計値である予備遅延量を計測して1588メッセージのCorrection Fieldに格納する。そのため、中継ノードに対してTC機能を実装しなくとも、エミュレーションノード800がCorrection Field に格納すべき遅延量を正確に計測する。したがって、IEEE1588v2 w/TCを実装する場合に、パケットネットワークPNにおける中継ノード全てに対してTC機能を実装する必要が無い。そのため、IEEE1588v2 w/TCによる時刻同期制御を実装する際のコストの低減や時間の削減を行うことが可能となるとの効果を奏する。
【0152】
以上、この発明の実施形態について図面を参照して詳述してきたが、具体的な構成はこの実施形態に限られるものではなく、この発明の要旨を逸脱しない範囲の設計等も含まれる。
【符号の説明】
【0153】
300…マスタノード, 301…クロック生成部, 302…マスタクロック部, 303…パケット生成部(通知部), 304…パケット送信部(送信部、通知部), 305…パケット受信部, 306…遅延計測部(第一遅延計測部), 400…スレーブノード, 401…パケット受信部, 402…PLL部, 403…遅延計測部(第二遅延計測部), 404…スレーブクロック部, 405…時刻同期制御部, 406…パケット送信部(送信部), 407…位相比較器, 408…LPF, 409…PI制御器, 410…VCO, 411…カウンタ, 501…パケットカウンタ, 502…カウンタ最大値モニタ部, 503…到着時カウンタ値モニタ部, 504…遅延算出部, 601…パケットカウンタ, 602…カウンタ最大値モニタ部, 603…到着時カウンタ値モニタ部, 604…遅延算出部, 701…パケット解析部, 702…パケット生成部, 703…オフセット計算部, 704…時刻調整部, 800…エミュレーションノード(中継装置), 801…パケット受信部, 803…遅延計測部, 804…クロック部, 805…TC処理部, 806…パケット送信部
【技術分野】
【0001】
本発明は、通信を行うノード間で時刻の同期を行うための技術に関する。
【背景技術】
【0002】
従来、モバイルバックホールやファクトリオートメーション、家庭内AV用LAN(Local Area Network)などで高精度の時刻同期が求められている。このような背景の元で、時刻同期を行うための技術の標準化が進められている。例えば、パケットネットワークにおいて、マイクロ秒未満の精度で時刻同期を行なうための技術としてIEEE1588がある(非特許文献1参照)。
【0003】
IEEE1588に規定されている技術では、マスタ/スレーブノード間でのメッセージ交換によってタイムスタンプ情報が交換される。スレーブノードは、マスタ及びスレーブノードにおけるメッセージ送受信時刻から、マスタノードに対するスレーブノードの時刻のずれ(Offset)を計算する。そして、スレーブノードは、このOffsetに基づいてスレーブノードの時刻を補正し、スレーブノードの時刻をマスタノードに同期させる。
【0004】
IEEE1588では、Offsetを求めるために、マスタノードからスレーブノードへの伝送遅延(MS_Delay)と、スレーブノードからマスタノードへの伝送遅延(SM_Delay)は等しいと仮定する。しかしながら、パケットネットワークではルータ、スイッチ等の中継ノードにおけるキューイング遅延等により、MS_DelayとSM_Delayとは異なる値となる可能性が高い。そのため、MS_DelayとSM_Delayとが等しいという仮定により、Offsetに誤差が生じてしまい、時刻同期精度が劣化してしまっていた。
【0005】
このような問題を解決するために、IEEE1588 version 2において、Transparent Clock (TC)機能が規定されている。なお、以降の説明では、このTC機能を利用したIEEE1588をIEEE1588v2 w/TCと記す。
【先行技術文献】
【非特許文献】
【0006】
【非特許文献1】IEEE P1588 TM/D1, “Draft Standard for a Precision Clock Synchronization Protocol for Networked Measurement and Control Systems”, June, 2007.
【発明の概要】
【発明が解決しようとする課題】
【0007】
しかしながら、IEEE1588v2 w/TCでは、高精度を実現するためにはより多くの中継ノード(究極的には全中継ノード)がTC機能を有する必要がある。一方、既にネットワークに配置されている既存ノードはTC機能を持たないものが大部分を占める。そのため、IEEE1588v2 w/TCを実現するためには、中継ノードの置き換えや機能追加が必要となる。したがって、IEEE1588v2 w/TCの実現は、コストや手間などの観点から非常に困難であるという問題がある。
上記事情に鑑み、本発明は、導入に要するコストを抑え、高精度の時刻同期を実現する技術を提供することを目的とする。
【課題を解決するための手段】
【0008】
本発明の一態様は、互いに通信するマスタノード及びスレーブノードと、前記マスタノード及びスレーブノード間の通信を中継する中継装置とを備え、スレーブノードにおける時刻をマスタノードにおける時刻に同期させる時刻同期システムであって、前記マスタノードは、前記スレーブノードに対し制御メッセージを送信する送信部と、前記スレーブノードから制御メッセージを受信する受信部と、を備え、前記マスタノード又は前記中継装置は、前記スレーブノードから前記マスタノードへ送信される制御メッセージが通信経路において受けたキューイング遅延を表す第一遅延量を計測する第一遅延計測部と、前記第一遅延計測部によって計測された前記第一遅延量を前記スレーブノードに通知する通知部と、を備え、前記スレーブノード又は前記中継装置は、前記マスタノードから前記スレーブノードへ送信される制御メッセージが通信経路において受けたキューイング遅延を表す第二遅延量を計測する第二遅延計測部、を備え、前記スレーブノードは、前記マスタノードに対し制御メッセージを送信する送信部と、前記マスタノードから前記制御メッセージを受信する受信部と、前記マスタノードから通知された前記第一遅延量と、前記第二遅延計測部によって計測された前記第二遅延量とを用いて、前記スレーブノードにおける時刻と前記マスタノードにおける時刻との差分を計算し、前記スレーブノードにおける時刻を前記マスタノードにおける時刻に同期させる時刻同期制御部と、を備えることを特徴とする。
【0009】
本発明の一態様は、マスタノードと通信し、前記マスタノードに対し制御メッセージを送信する送信部と、前記マスタノードから制御メッセージを受信する受信部と、前記マスタノードから送信される前記制御メッセージが通信経路において受けたキューイング遅延を表す第二遅延量を計測する第二遅延計測部と、前記マスタノードから通知される前記第一遅延量と、前記第二遅延計測部によって計測された前記第二遅延量とを用いて、時刻を前記マスタノードにおける時刻に同期させる時刻同期制御部と、を備えるスレーブノードを有する時刻同期システムに具備されるマスタノードであって、前記スレーブノードに対し制御メッセージを送信する送信部と、前記スレーブノードから制御メッセージを受信する受信部と、前記スレーブノードから前記マスタノードへ送信される制御メッセージが通信経路において受けたキューイング遅延を表す第一遅延量を計測する第一遅延計測部と、前記第一遅延計測部によって計測された前記第一遅延量を前記スレーブノードに通知する通知部と、を備えること特徴とする。
【0010】
本発明の一態様は、スレーブノードと通信し、前記スレーブノードに対し制御メッセージを送信する送信部と、前記スレーブノードから制御メッセージを受信する受信部と、前記スレーブノードから送信される制御メッセージが通信経路において受けたキューイング遅延を表す第一遅延量を計測する第一遅延計測部と、前記第一遅延計測部によって計測された前記第一遅延量を通知する通知部と、を備えるマスタノードを有する時刻同期システムに具備されるスレーブノードであって、前記マスタノードに対し制御メッセージを送信する送信部と、前記マスタノードから前記制御メッセージを受信する受信部と、前記マスタノードから前記スレーブノードへ送信される制御メッセージが通信経路において受けたキューイング遅延を表す第二遅延量を計測する第二遅延計測部と、前記マスタノードから通知された前記第一遅延量と、自装置の前記第二遅延計測部によって計測された前記第二遅延量とを用いて、前記スレーブノードにおける時刻と前記マスタノードにおける時刻との差分を計算し、前記スレーブノードにおける時刻を前記マスタノードにおける時刻に同期させる時刻同期制御部と、を備えることを特徴とする。
【0011】
本発明の一態様は、マスタノードと、時刻を前記マスタノードの時刻に同期させるスレーブノードと、の間の通信を中継する中継装置であって、前記スレーブノードから前記マスタノードへ送信される制御メッセージが通信経路において受けたキューイング遅延を表す第一遅延量を計測する第一遅延計測部と、前記マスタノードから前記スレーブノードへ送信される制御メッセージが通信経路において受けたキューイング遅延を表す第二遅延量を計測し、前記第一遅延量と、計測された前記第二遅延量とを用いて、前記スレーブノードにおける時刻と前記マスタノードにおける時刻との差分を計算し、前記スレーブノードにおける時刻を前記マスタノードにおける時刻に同期させる前記スレーブノードに対し、前記第一遅延計測部によって計測された前記第一遅延量を通知する通知部と、を備える。
【0012】
本発明の一態様は、マスタノードと、時刻を前記マスタノードの時刻に同期させるスレーブノードと、の間の通信を中継する中継装置であって、前記マスタノードから前記スレーブノードへ送信される制御メッセージが通信経路において受けたキューイング遅延を表す第二遅延量を計測する第二遅延計測部と、前記スレーブノードから前記マスタノードへ送信される制御メッセージが通信経路において受けたキューイング遅延を表す第一遅延量と、前記第二遅延量とを用いて、前記スレーブノードにおける時刻と前記マスタノードにおける時刻との差分を計算し、前記スレーブノードにおける時刻を前記マスタノードにおける時刻に同期させる前記スレーブノードに対し、前記第二遅延計測部によって計測された前記第二遅延量を通知する通知部と、を備える。
【0013】
本発明の一態様は、互いに通信するマスタノード及びスレーブノードと、前記マスタノード及びスレーブノード間の通信を中継する中継装置とを備え、スレーブノードにおける時刻をマスタノードにおける時刻に同期させる時刻同期システムが行う時刻同期方法であって、前記マスタノードが、前記スレーブノードに対し制御メッセージを送信する送信ステップと、前記マスタノードが、前記スレーブノードから制御メッセージを受信する受信ステップと、前記マスタノード又は前記中継装置が、前記スレーブノードから前記マスタノードへ送信される制御メッセージが通信経路において受けたキューイング遅延を表す第一遅延量を計測する第一遅延計測ステップと、前記マスタノード又は前記中継装置が、前記第一遅延計測ステップによって計測された前記第一遅延量を前記スレーブノードに通知する通知ステップと、前記スレーブノードが、前記マスタノードに対し制御メッセージを送信する送信ステップと、前記スレーブノードが、前記マスタノードから前記制御メッセージを受信する受信ステップと、前記スレーブノード又は前記中継装置が、前記マスタノードから前記スレーブノードへ送信される制御メッセージが通信経路において受けたキューイング遅延を表す第二遅延量を計測する第二遅延計測ステップと、前記スレーブノードが、前記マスタノードから通知された前記第一遅延量と、前記第二遅延計測ステップによって計測された前記第二遅延量とを用いて、前記スレーブノードにおける時刻と前記マスタノードにおける時刻との差分を計算し、前記スレーブノードにおける時刻を前記マスタノードにおける時刻に同期させる時刻同期制御ステップと、を備えることを特徴とする。
【0014】
本発明の一態様は、互いに通信するマスタノード及びスレーブノードと、前記マスタノード及びスレーブノード間の通信を中継する中継装置とを備え、スレーブノードにおける時刻をマスタノードにおける時刻に同期させる時刻同期システムとして、前記マスタノードに相当する第一のコンピュータ、前記スレーブノードに相当する第二のコンピュータ、及び前記中継装置に相当する第三のコンピュータを動作させるための時刻同期用プログラムであって、前記第一のコンピュータに対し、前記スレーブノードに対し制御メッセージを送信する送信ステップと、前記スレーブノードから制御メッセージを受信する受信ステップと、を実行させ、前記第一のコンピュータ又は前記第三のコンピュータに対し、前記スレーブノードから前記マスタノードへ送信される制御メッセージが通信経路において受けたキューイング遅延を表す第一遅延量を計測する第一遅延計測ステップと、前記第一遅延計測ステップによって計測された前記第一遅延量を前記スレーブノードに通知する通知ステップと、を実行させ、前記第二のコンピュータ又は前記第三のコンピュータに対し、前記マスタノードから前記スレーブノードへ送信される制御メッセージが通信経路において受けたキューイング遅延を表す第二遅延量を計測する第二遅延計測ステップ、を実行させ、前記第二のコンピュータに対し、前記マスタノードに対し制御メッセージを送信する送信ステップと、前記マスタノードから前記制御メッセージを受信する受信ステップと、前記マスタノードから通知された前記第一遅延量と、前記第二遅延計測ステップによって計測された前記第二遅延量とを用いて、前記スレーブノードにおける時刻と前記マスタノードにおける時刻との差分を計算し、前記スレーブノードにおける時刻を前記マスタノードにおける時刻に同期させる時刻同期制御ステップと、を実行させることを特徴とする。
【発明の効果】
【0015】
本発明により、導入に要するコストを抑え、高精度の時刻同期を実現することが可能となる。
【図面の簡単な説明】
【0016】
【図1】IEEE1588の時刻同期アルゴリズムによる通信シーケンスを表すシーケンス図である。
【図2】IEEE1588及びIEEE1588v2 w/TCの時刻同期アルゴリズムの概略を表す概略図である。
【図3】第1実施形態における通信システムのシステム構成図である。
【図4】マスタノードの機能構成を表す機能ブロック図である。
【図5】遅延計測部の詳細な機能構成を表す機能ブロック図である。
【図6】パケットカウンタの動作の概略を表す概略図である。
【図7】スレーブノードの機能構成を表す機能ブロック図である。
【図8】遅延計測部の詳細な機能構成を表す機能ブロック図である。
【図9】時刻同期制御部の詳細な機能構成を表す機能ブロック図である。
【図10】マスタノードによるマスタ第1処理の流れを表すフローチャートである。
【図11】スレーブノードによるスレーブ第1処理の流れを表すフローチャートである。
【図12】マスタノードによるマスタ第2処理の流れを表すフローチャートである。
【図13】スレーブノードによるスレーブ第2処理の流れを表すフローチャートである。
【図14】通信システムによる時刻同期処理の具体例を表すシーケンス図である。
【図15】通信システムによる時刻同期処理の具体例を表すシーケンス図である。
【図16】通信システムにおいて計測される遅延量の確率分布を表す図である。
【図17】パケットバッファを用いて構成された場合の、遅延計測部の処理の概略を表す図である。
【図18】第2実施形態におけるマスタノードの機能構成を表す機能ブロック図である。
【図19】第2実施形態におけるスレーブノードの機能構成を表す機能ブロック図である。
【図20】第2実施形態における時刻同期制御部の機能構成を表す機能ブロック図である。
【図21】第2実施形態におけるマスタ第2処理の流れを表すフローチャートである。
【図22】第2実施形態におけるスレーブ第2処理の流れを表すフローチャートである。
【図23】第2実施形態における通信システムによる時刻同期処理の具体例を表すシーケンス図である。
【図24】第3実施形態における通信システムのシステム構成図である。
【図25】第3実施形態におけるマスタノードの機能構成を表す機能ブロック図である。
【図26】第3実施形態におけるスレーブノードの機能構成を表す機能ブロック図である。
【図27】時刻同期制御部の詳細な機能構成を表す機能ブロック図である。
【図28】第3実施形態におけるエミュレーションノードの機能構成を表す機能ブロック図である。
【図29】第3実施形態におけるスレーブ第1処理の流れを表すフローチャートである。
【図30】第3実施形態におけるマスタ第2処理の流れを表すフローチャートである。
【図31】第3実施形態におけるスレーブ第2処理の流れを表すフローチャートである。
【図32】第3実施形態におけるエミュレーションノードによる処理の流れを表すフローチャートである。
【図33】第3実施形態における通信システムによる時刻同期処理の具体例を表すシーケンス図である。
【発明を実施するための形態】
【0017】
[IEEE1588]
まず、IEEE1588の時刻同期アルゴリズムについて説明する。図1は、IEEE1588の時刻同期アルゴリズムによる通信シーケンスを表すシーケンス図である。図1では、マスタノード100とスレーブノード200とが双方向通信を行っており、スレーブノード200が定期的にマスタノード100に時刻を同期させる。
【0018】
マスタノード100は、スレーブノード200に対して、定期的にSyncメッセージを送信する(ステップS100)。マスタノード100は、このSyncメッセージの送信時刻(以下、「Sync送信時刻」という。)Tm(0)を記録する(ステップS101)。次に、マスタノード100は、スレーブノード200に対して、Follow_upメッセージを送信する。このとき、マスタノード100は、Follow_upメッセージの中に、Sync送信時刻Tm(0)を格納する。
【0019】
スレーブノード200は、Syncメッセージを受信すると、この受信処理をトリガとしてSyncメッセージの受信時刻(以下、「Sync受信時刻」という。)Ts(0)を記録する(ステップS102)。次に、スレーブノード200はFollow_upメッセージを受信し、Follow_upメッセージ中に格納されるSync送信時刻Tm(0)を抽出し記録する。次に、スレーブノード200は、マスタノード100に対して、Delay_Requestメッセージを送信する(ステップS104)。そして、スレーブノード200は、このDelay_Requestメッセージの送信時刻(以下、「Delay送信時刻」という。)Ts(1)を記録する(ステップS105)。
【0020】
マスタノード100は、Delay_Requestメッセージを受信すると、この受信処理をトリガとしてDelay_Requestメッセージの受信時刻(以下、「Delay受信時刻」という。)Tm(1)を記録する(ステップS106)。次に、マスタノード100は、スレーブノード200に対してDelay_Responseメッセージを送信する(ステップS107)。このとき、マスタノード100は、Delay_Responseメッセージの中に、Delay受信時刻Tm(1)を格納する。
【0021】
スレーブノード200は、Delay_Responseメッセージを受信すると、Delay_Responseメッセージ中に格納されるDelay受信時刻Tm(1)を抽出し記録する。
スレーブノード200は、Sync送信時刻Tm(0)、Sync受信時刻Ts(0)に基づいて、以下の式1から、マスタノード100における時刻(以下、「マスタ時刻」という。)とスレーブノード200における時刻(以下、「スレーブ時刻」という。)との差分MS_Diffを算出する。
MS_Diff = Ts(0) - Tm(0) = MS_Delay + Offset ・・・式1
【0022】
また、スレーブノード200は、Delay送信時刻Ts(1)、Delay受信時刻Tm(1)に基づいて、以下の式2から、スレーブ時刻とマスタ時刻との差分を求める。
SM_Diff = Tm(1) - Ts(1) = SM_Delay - Offset ・・・式2
【0023】
ここで、MS_Delayはマスタノード100からスレーブノード200への伝送遅延を表し、SM_Delayはスレーブノード200からマスタノード100への伝送遅延を表し、Offsetはマスタノード100に対するスレーブノード200の時刻オフセット(進み)を表す。なお、伝送遅延MS_Delay及びSM_Delayは、マスタノード100とスレーブノード200との間の伝播遅延と、マスタノード100とスレーブノード200との間のネットワーク上の中継ノードで生じるキューイング遅延から構成される。
【0024】
以上のように、マスタノード100に対するスレーブノード200の時刻のずれであるOffsetに関して、式1及び式2の二つの式が得られる。しかし、この二つの式には、Offsetの他にMS_Delay及びSM_Delayという未知のパラメータが含まれている。したがって、三つの未知のパラメータに対し二つの式しか存在しないため、Offsetを算出することができない。そのため、IEEE1588では、マスタノード100からスレーブノード200への伝送遅延MS_Delayと、スレーブノード200からマスタノード100への伝送遅延SM_Delayとが等しく、いずれの値もDelayであると仮定して、上記の式1及び式2を以下の式3及び式4に変形する。
【0025】
MS_Diff = Delay + Offset ・・・式3
SM_Diff = Delay - Offset ・・・式4
式3及び式4の連立方程式を解くことによって、以下の式5が導出される。
Offset = (MS_Diff - SM_Diff) / 2 ・・・式5
【0026】
スレーブノード200は、式5に基づいてOffsetを算出し、Offsetに基づいてスレーブ時刻を補正することによって、スレーブ時刻をマスタ時刻に同期させる。以上が、IEEE1588に規定される時刻同期アルゴリズムである。
【0027】
[IEEE1588v2 w/TC]
次に、IEEE1588v2 w/TCの時刻同期アルゴリズムについて説明する。図2は、IEEE1588及びIEEE1588v2 w/TCの時刻同期アルゴリズムの概略を表す概略図である。図2Aは、IEEE1588の時刻同期アルゴリズムの概略を表す。図2Bは、IEEE1588v2 w/TC の時刻同期アルゴリズムの概略を表す。図2A及び図2BのD1〜D6は、それぞれ各中継ノードRe1〜Re3において発生する、矢印方向への伝送におけるキューイング遅延を表す。
【0028】
IEEE1588v2 w/TCでは、各中継ノードRe1〜Re3はTC機能を備える。TC機能とは、制御メッセージ(IEEE1588メッセージ)のパケットのノード内滞在時間を計測し、その時間を制御パケットの所定のフィールドに記載し、累積加算していく機能である。なお、IEEE1588メッセージとは、具体的にはSyncメッセージ及びDelay_Requestメッセージである。IEEE1588v2 w/TCでは、TC機能により、制御パケットが中継ノードRe1〜Re3を経由するごとに、中継ノードRe1〜Re3での滞在時間がメッセージ内に累積加算される。そのため、スレーブノード200は、マスタノード100からスレーブノード200へ向けた伝送における各中継ノードRe1〜Re3で生じたキューイング遅延の合計を正確に取得できる。同様に、マスタノード100は、スレーブノード200からマスタノード100へ向けた伝送における各中継ノードRe1〜Re3で生じたキューイング遅延の合計を正確に取得できる。
【0029】
マスタノード100からスレーブノード200へ向けた伝送におけるキューイング遅延の合計及び伝播遅延をそれぞれMS_Q、MS_Pとし、スレーブノード200からマスタノード100へ向けた伝送におけるキューイング遅延の合計及び伝播遅延をそれぞれSM_Q、SM_Pとすると、上述した式1及び式2は下記の式6及び式7に変形できる。
MS_Diff = MS_P + MS_Q + Offset ・・・式6
SM_Diff = SM_P + SM_Q - Offset ・・・式7
【0030】
ここで、マスタノード100からスレーブノード200へ向けた伝送とスレーブノード200からマスタノード100へ向けた伝送のメッセージ伝送経路が双方向で等しい場合は、MS_P = SM_P = Propagation_Delayとなる。この場合、式6及び式7は、下記の式8及び式9のように変形できる。
MS_Diff = Propagation_Delay + MS_Q + Offset ・・・式8
SM_Diff = Propagation_Delay + SM_Q - Offset ・・・式9
【0031】
そして、式8及び式9から、Offsetを算出するための式として下記の式10を得ることができる。
Offset = {(MS_Diff - SM_Diff) - (MS_Q - SM_Q)} / 2 ・・・式10
【0032】
図2Aに示すように、IEEE1588v2 w/TC ではないIEEE1588(以下、「Pure IEEE1588」ともいう。)では、各中継ノードRe1〜Re3で生じるキューイング遅延の合計は、双方向で等しいと仮定していた。すなわち、マスタノード100からスレーブノード200への伝送におけるキューイング遅延の合計(D1+D2+D3)と、スレーブノード200からマスタノード100への伝送におけるキューイング遅延の合計(D4+D5+D6)とは等しいと仮定していた。しかしながら、実際には等しくないため、その誤差が同期精度の劣化の要因となっていた。
【0033】
これに対して、IEEE1588v2 w/TCでは、各中継ノードRe1〜Re3に実装されたTC機能によって各中継ノードRe1〜Re3でのキューイング遅延の合計を計測している。そして、スレーブノード200は、マスタノード100からスレーブノード200への伝送におけるキューイング遅延の合計値(D1+D2+D3)を正確に取得する。また、マスタノード100は、スレーブノード200からマスタノード100への伝送におけるキューイング遅延の合計値(D4+D5+D6)を、正確に取得する。このような動作によって、IEEE1588v2 w/TCでは、高精度の時刻同期が可能となる。以上が、IEEE1588v2 w/TCに規定される時刻同期アルゴリズムである。
【0034】
[第1実施形態]
図3は、第1実施形態における通信システム1のシステム構成図である。通信システム1は、マスタノード300、スレーブノード400(400a〜400c)、パケットネットワークPNを備える。以下、マスタノード300及びスレーブノード400の構成の詳細についてそれぞれ説明する。
【0035】
〔マスタノード〕
図4は、マスタノード300の機能構成を表す機能ブロック図である。マスタノード300は、クロック生成部301、マスタクロック部302、パケット生成部303、パケット送信部304、パケット受信部305、遅延計測部306を備える。マスタノード300は、例えばバスで接続されたCPU(Central Processing Unit)、メモリ、補助記憶装置、通信インタフェース等を備え、時刻同期用プログラムを実行することによって上記各機能部を備える装置として構成されても良い。
【0036】
クロック生成部301は、マスタノード300の基準クロックを生成する。具体的には、クロック生成部301は、マスタノード300における1秒の時間幅を決める。なお、クロック生成部301は、マスタノード300の外部に存在しても良い。その場合、マスタノード300は、外部に設置されるクロック生成部301からのクロックを確実に同期して取得するように構成される。
【0037】
マスタクロック部302は、クロック生成部301で生成される基準クロックに従い、マスタノード300の時刻(マスタ時刻)を決定する。具体的には、マスタクロック部302は、マスタノード300において何時何分何秒であるかを決める。
【0038】
パケット生成部303は、IEEE1588のメッセージを生成し、パケット送信部304に送る。IEEE1588のメッセージとは、具体的には、Syncメッセージ、Follow_upメッセージ、Delay_Responseメッセージである。パケット生成部303は、定期的にパケット送信部304を介してSyncメッセージをスレーブノード400へ送信し、同時にマスタクロック部302を参照してSync送信時刻Tm(0)を記録する。また、パケット生成部303は、Syncメッセージ送信後に、Sync送信時刻Tm(0)を格納したFollow_upメッセージを生成し、パケット送信部304を介してスレーブノード400へ送信する。また、パケット生成部303は、パケット受信部305によって受信されるDelay_Requestメッセージの受信時刻(Delay受信時刻)Tm(1)と、遅延計測部306で計測するDelay_Requestメッセージの遅延量SM_Q(第一遅延量)を格納したDelay_Responseメッセージを生成し、パケット送信部304を介してスレーブノード400へ送信する。なお、遅延量SM_Qは、上述したようにDelay_Requestメッセージが各スレーブノード400a〜400cからマスタノード300まで転送される間に受けたキューイング遅延の遅延量を表す。
【0039】
また、Delay_Responseメッセージは、スレーブノード400a〜400cから送信されたDelay_Requestメッセージへの返信となる。そのため、パケット生成部303は、Delay_Responseメッセージに格納されるDelay受信時刻Tm(1)、遅延量SM_Qを、Delay_Requestメッセージの送信元のスレーブノード400a〜400c毎に管理する。
【0040】
パケット送信部304は、パケット生成部303から受けるSyncメッセージ、Follow_upメッセージ、Delay_Responseメッセージを、パケットネットワークPNを経由してスレーブノード400a〜400cに送信する。なお、パケット送信部304は、Syncメッセージ及びFollow_upメッセージを、スレーブノード400a〜400cに対してブロードキャストする。また、パケット送信部304は、Delay_Responseメッセージを、各Delay_Requestメッセージの送信元のスレーブノード400a〜400cに対してユニキャストする。
【0041】
パケット受信部305は、スレーブノード400a〜400cからパケットネットワークPNを経由して送られてくるDelay_Requestメッセージを受信する。そして、パケット受信部305は、受信されたDelay_Requestメッセージを、パケット生成部303及び遅延計測部306に転送する。
【0042】
遅延計測部306は、パケットカウンタを備える。遅延計測部306は、パケットカウンタのカウンタ値の増減状況をモニタすることによって、到着するDelay_Requestメッセージの遅延量SM_Qを算出する。そして、遅延計測部306は、算出された遅延量SM_Qをパケット生成部303に通知する。
【0043】
図5は、遅延計測部306の詳細な機能構成を表す機能ブロック図である。遅延計測部306は、パケットカウンタ501、カウンタ最大値モニタ部502、到着時カウンタ値モニタ部503、遅延算出部504を備える。カウンタ最大値モニタ部502及び到着時カウンタ値モニタ部503は、パケットカウンタ501のカウンタ値をモニタし、結果を遅延算出部504に通知する。遅延算出部504は、カウンタ最大値モニタ部502及び到着時カウンタ値モニタ部503から通知された情報を用いて遅延量SM_Qを算出する。そして、遅延算出部504は、算出された遅延量SM_Qをパケット生成部303に通知する。
【0044】
パケットカウンタ501は、パケット受信部305からDelay_Requestメッセージを受信する毎に、カウンタの値を所定の値分だけ増加させる。また、パケットカウンタ501は、クロック生成部301から出力される基準クロックの周波数に従い、カウンタの値を減少させる。パケットカウンタ501のカウンタ値が基準クロックの周波数に従って減少するのは、パケット受信部305によって受信されたDelay_Requestメッセージのパケットが、基準クロックの周波数に従って受信パケットのバッファから読み出されるためである。
【0045】
カウンタ最大値モニタ部502は、パケットカウンタ501のカウンタ値の最大値を検出する。具体的には、カウンタ最大値モニタ部502は、予め決められた所定の時間(例えば10秒)のモニタ期間内の最大値を検出する。以下、モニタ期間iにおけるカウンタの最大値を、カウンタ最大値P(i)と表す。カウンタ最大値モニタ部502は、モニタ期間iが終了すると、検出結果であるカウンタ最大値P(i)を遅延算出部504に通知する。
【0046】
到着時カウンタ値モニタ部503は、モニタ期間iにおけるn番目のDelay_Requestメッセージパケットが到着すると、到着時のカウンタ値C(i,n)を検出する。到着時カウンタ値モニタ部503は、Delay_Requestメッセージパケットの到着毎にカウンタ値C(i,n)を検出し、検出結果を遅延算出部504に通知する。
【0047】
遅延算出部504は、到着時カウンタ値モニタ部503からカウンタ値C(i,n)を受ける毎に、カウンタ値C(i,n)及びカウンタ最大値P(i)を用いて、以下の式11に基づき遅延量SM_Qを算出する。
SM_Q = P(i-1) - C(i,n) ・・・式11
遅延算出部504は、遅延量SM_Qを計算する毎に、パケット生成部303に遅延量SM_Qを通知する。
【0048】
図6は、パケットカウンタ501の動作の概略を表す概略図である。図6において、縦軸はカウンタ値を表し、下から上へ向けて高いカウンタ値を表す。横軸は時間を表し、左から右へ向けて進行する。縦に伸びる等間隔に並んだ複数の破線は、キューイング遅延が発生しない場合にDelay_Requestメッセージのパケットが受信されるタイミングを表す。上方向を指す矢印は、Delay_Requestメッセージのパケットが実際に受信されたタイミングを表す。パケットカウンタ501は、Delay_Requestメッセージのパケットを受信すると、カウンタ値を固定値分(図6のCV分)上昇させる。縦に伸びる破線と上方向の矢印とが時間軸で一致している場合、すなわちキューイング遅延が発生せずにDelay_Requestメッセージのパケットが受信されている場合は、カウンタ値は最大値Cmaxをとる。この場合、パケットカウンタ501は、受信されたビット数の総和と、基準クロックの周波数に従って定期的に読み出されるビット数の総和とが一致する。一方、キューイング遅延が発生している場合には、カウンタ値はCmaxよりも小さい値となる。このとき、最大値Cmaxとカウンタ値との差分が、発生しているキューイング遅延の遅延量と等価となる。
【0049】
〔スレーブノード〕
図7は、スレーブノード400の機能構成を表す機能ブロック図である。なお、スレーブノード400a〜400cは、いずれもスレーブノード400と同様の構成を備える。スレーブノード400は、パケット受信部401、PLL(Phase Locked Loop)部402、遅延計測部403、スレーブクロック部404、時刻同期制御部405、パケット送信部406を備える。スレーブノード400は、例えばバスで接続されたCPU、メモリ、補助記憶装置、通信インタフェース等を備え、時刻同期用プログラムを実行することによって上記各機能部を備える装置として構成されても良い。
【0050】
パケット受信部401は、マスタノード300からパケットネットワークPNを経由して送信されてきたSyncメッセージ、Follow_upメッセージ、Delay_Requestメッセージを受信し、時刻同期制御部405に転送する。パケット受信部401は、Syncメッセージに限り、PLL部402及び遅延計測部403にも転送する。
【0051】
PLL部402は、位相比較器407、LPF(Low Pass Filter)408、PI(Proportional Integral)制御器409、VCO(voltage controlled oscillator)410、カウンタ411を備える。ただし、PLL部402のこのような構成は一例に過ぎない。すなわち、PLL部402は、自身のクロックから生成するTS(Time Stamp)とマスタノード300から受信したTSとの差分を計算し、その差分を元に自身のクロックを調整することができる構成であれば、その他どのような構成であっても良い。
【0052】
位相比較器407は、パケット受信部401から受信したSyncメッセージパケットに格納される受信タイムスタンプと、カウンタ411で生成されるタイムスタンプとの差分信号を計算する。そして、位相比較器407は、その計算結果を表す差分信号をLPF408に出力する。
【0053】
LPF408は、位相比較器407によって出力された差分信号を平準化し、ジッタやノイズを抑圧し、PI制御器409に出力する。
PI制御器409は、平準化された差分信号が最終的にゼロとなるような制御信号を生成し、VCO410に出力する。
【0054】
VCO410は、PI制御器409から出力された制御信号によって決定される周波数のクロックを生成し、カウンタ411に出力する。また、VCO410は、生成された周波数のクロックに従い、遅延計測部403のパケットカウンタのカウンタ値を減少させる。
カウンタ411は、VCO410によって生成されたクロックを元にタイムスタンプを生成し、位相比較器407に転送する。
【0055】
以上説明したPLL部402の動作により、VCO410によって生成されるスレーブノード400のクロックが、マスタノード300のクロックに同期される。
遅延計測部403は、パケットカウンタを備える。遅延計測部403は、パケットカウンタのカウンタ値の増減状況をモニタすることによって、到着するSyncメッセージの遅延量MS_Q(第二遅延量)を算出する。そして、遅延計測部403は、算出された遅延量MS_Qを時刻同期制御部405に通知する。なお、遅延量MS_Qは、上述したようにSyncメッセージがマスタノード300からスレーブノード400まで転送される間に受けたキューイング遅延の遅延量を表す。
【0056】
図8は、遅延計測部403の詳細な機能構成を表す機能ブロック図である。遅延計測部403は、パケットカウンタ601、カウンタ最大値モニタ部602、到着時カウンタ値モニタ部603、遅延算出部604を備える。遅延計測部403が備える各構成は、それぞれマスタノード300の遅延計測部306が備える同名の各構成と同じである。ただし、パケットカウンタ601は、パケット受信部401からSyncメッセージを受信する毎に、カウンタの値を所定の値分だけ増加させる。また、パケットカウンタ601は、VCO410によって出力されるクロックの周波数に従い、カウンタの値を減少させる。また、遅延算出部604は、遅延量SM_Qに代えて同様の処理によって遅延量MS_Qを算出し、算出された遅延量MS_Qを時刻同期制御部405に通知する。
【0057】
図7に戻ってスレーブノード400の構成の説明を続ける。スレーブクロック部404は、VCO410によって生成されるクロックに従い、スレーブノード400a〜400cの時刻(スレーブ時刻)を決める。
【0058】
時刻同期制御部405は、Syncメッセージ及びDelay_Requestメッセージの送受信時刻情報(Sync送信時刻Tm(0)、Sync受信時刻Ts(0)、Delay送信時刻Ts(1)、Delay受信時刻Tm(1))、遅延量SM_Q、遅延量MS_Qを用いて、マスタノード300に対するスレーブノード400の時刻のずれであるOffsetを求める。そして、時刻同期制御部405は、スレーブクロック部404の時刻(スレーブ時刻)を補正する。また、時刻同期制御部405は、Delay_Requestメッセージを生成し、パケット送信部406に送る。
パケット送信部406は、時刻同期制御部405から受信するDelay_Requestメッセージを、パケットネットワークPNを介してマスタノード300に対して送信する。
【0059】
図9は、時刻同期制御部405の詳細な機能構成を表す機能ブロック図である。時刻同期制御部405は、パケット解析部701、パケット生成部702、オフセット計算部703、時刻調整部704を備える。
パケット解析部701は、パケット受信部401からSyncメッセージ、Follow_upメッセージ、Delay_Responseメッセージを受信する。パケット解析部701は、Syncメッセージを受信すると、スレーブクロック部404を参照し、Sync受信時刻Ts(0)を取得する。そして、パケット解析部701は、取得されたSync受信時刻Ts(0)をオフセット計算部703に通知する。
【0060】
また、パケット解析部701は、Follow_upメッセージを受信すると、Follow_upメッセージ内に格納されるSync送信時刻Tm(0)を抽出する。そして、パケット解析部701は、抽出されたSync送信時刻Tm(0)をオフセット計算部703に通知すると共に、パケット生成部702に対しDelay_Requestメッセージの生成トリガを送る。
【0061】
また、パケット解析部701は、Delay_Responseメッセージを受信すると、Delay_Responseメッセージ内に格納されるDelay受信時刻Tm(1)及び遅延量SM_Qを抽出し、オフセット計算部703に通知する。
【0062】
パケット生成部702は、Delay_Requestメッセージを生成する。具体的には、パケット生成部702は、パケット解析部701からDelay_Requestメッセージの生成トリガを受信すると、Delay_Requestメッセージを生成する。パケット生成部702は、生成されたDelay_Requestメッセージをパケット送信部406に転送すると共に、スレーブクロック部404を参照し、Delay送信時刻Ts(1)を取得する。そして、パケット生成部702は、取得されたDelay送信時刻Ts(1)をオフセット計算部703に通知する。
【0063】
オフセット計算部703は、Offsetを計算し、算出されたOffsetを時刻調整部704に通知する。具体的には、パケット解析部701及びパケット生成部702から受信する各時刻(Sync送信時刻Tm(0)、Sync受信時刻Ts(0)、Delay送信時刻Ts(1)、Delay受信時刻Tm(1))と、パケット解析部701から受信する遅延量SM_Qと、遅延計測部403から受信する遅延量MS_Qとを用いて、Offsetを計算する。
【0064】
時刻調整部704は、オフセット計算部703から通知されるOffsetを用いて、スレーブクロック部404のスレーブ時刻を調整する。時刻調整部704のこの処理によって、スレーブクロック部404のスレーブ時刻は、マスタノード300のマスタクロック部302のマスタ時刻に同期する。
【0065】
〔動作〕
次に、第1実施形態における通信システム1の各装置の処理の流れについて説明する。通信システム1では、時刻同期のための処理として、マスタノード300によるマスタ第1処理、スレーブノード400によるスレーブ第1処理、マスタノード300によるマスタ第2処理、スレーブノード400によるスレーブ第2処理が、それぞれこの順で実行される。図10及び図12は、それぞれマスタノード300によるマスタ第1処理及びマスタ第2処理の流れを表すフローチャートである。図11及び図13は、それぞれスレーブノード400によるスレーブ第1処理及びスレーブ第2処理の流れを表すフローチャートである。スレーブノード400a〜400cは、それぞれ個別に図11及び図13に表されるスレーブ第1処理及びスレーブ第2処理を実行する。
【0066】
まず、図10を参照してマスタノード300によるマスタ第1処理について説明する。まず、マスタノード300がSyncメッセージをスレーブノード400へ送信する(ステップS201)。具体的には、パケット生成部303がSyncメッセージを生成し、パケット送信部304がSyncメッセージをスレーブノード400(400a〜400c)へブロードキャスト送信する。次に、マスタノード300がSync送信時刻Tm(0)を記録する(ステップS202)。具体的には、パケット生成部303がマスタクロック部302を参照してSync送信時刻Tm(0)を取得し保持する。そして、マスタノード300がFollow_upメッセージをスレーブノード400へ送信する(ステップS203)。具体的には、パケット生成部303が、Sync送信時刻Tm(0)を格納したFollow_upメッセージを生成し、パケット送信部304がFollow_upメッセージをスレーブノード400(400a〜400c)にブロードキャスト送信する。マスタノード300は、マスタ第1処理を定期的に繰り返し実行する。
【0067】
次に、図11を参照してスレーブノード400によるスレーブ第1処理について説明する。まず、スレーブノード400はマスタノード300からSyncメッセージを受信する(ステップS301)。具体的には、パケット受信部401は、マスタノード300からSyncメッセージを受信し、受信したSyncメッセージをPLL部402、遅延計測部403、時刻同期制御部405に転送する。Syncメッセージ受信後の動作は、ステップS302〜S306の処理と、ステップS307及びステップS308の処理とが並行して実行される。
【0068】
まず、ステップS302〜S306の処理について説明する。まず、スレーブノード400がSync受信時刻Ts(0)を記録する(ステップS302)。具体的には、時刻同期制御部405のパケット解析部701が、Syncメッセージの受信に応じて、スレーブクロック部404を参照してSync受信時刻Ts(0)を取得し、オフセット計算部703に通知する。
【0069】
次に、スレーブノード400がマスタノード300からFollow_upメッセージを受信する(ステップS303)。具体的には、パケット受信部401がマスタノード300からFollow_upメッセージを受信し、受信されたFollow_upメッセージを時刻同期制御部405に転送する。次に、スレーブノード400がSync送信時刻Tm(0)を記録する(ステップS304)。具体的には、時刻同期制御部405のパケット解析部701が、Follow_upメッセージの受信に応じて、Follow_upメッセージのペイロード部に格納されたSync送信時刻Tm(0)を抽出して取得する。そして、パケット解析部701が、取得されたSync送信時刻Tm(0)をオフセット計算部703に通知する。
【0070】
次に、スレーブノード400がDelay_Requestメッセージをマスタノード300へ送信する(ステップS305)。具体的には、パケット解析部701がパケット生成部702に対し、Delay_Requestメッセージの生成トリガを送る。パケット生成部702が生成トリガに応じてDelay_Requestメッセージを生成し、パケット送信部406に転送する。そして、パケット送信部406がマスタノード300に対して、Delay_Requestメッセージを送信する。このとき、スレーブノード400がDelay送信時刻Ts(1)を記録する(ステップS306)。具体的には、パケット生成部702がスレーブクロック部404を参照して、Delay送信時刻Ts(1)を取得し、オフセット計算部703に転送する。
【0071】
次に、ステップS307及びS308の処理について説明する。まず、スレーブノード400が遅延量MS_Qを計測する(ステップS307)。具体的には、遅延計測部403のカウンタ最大値モニタ部502及び到着時カウンタ値モニタ部503がパケットカウンタ501のカウンタ値をモニタし、それぞれインターバル期間における最大カウンタ値及び各Syncメッセージ到着時のカウンタ値を取得する。そして、遅延計測部403の遅延算出部504が双方のカウンタ値に基づいて遅延量MS_Qを算出する。
【0072】
次に、スレーブノード400が、計測された遅延量MS_Qを記録する(ステップS308)。具体的には、遅延算出部504が、算出された遅延量MS_Qを時刻同期制御部405のオフセット計算部703に通知する。
【0073】
次に、図12を参照してマスタノード300によるマスタ第2処理について説明する。まず、マスタノード300がスレーブノード400からDelay_Requestメッセージを受信する(ステップS401)。具体的には、パケット受信部305がスレーブノード400からDelay_Requestメッセージを受信し、受信されたDelay_Requestメッセージをパケット生成部303及び遅延計測部306に転送する。
【0074】
次に、マスタノード300がDelay受信時刻Tm(1)を記録する(ステップS402)。具体的には、パケット生成部303が、Delay_Requestメッセージの受信に応じて、マスタクロック部302を参照してDelay_Requestメッセージ受信時の時刻Tm(1)を取得する。そして、パケット生成部303が、各Delay_Requestメッセージの送信元であるスレーブノード400a〜400cのノード情報に対応付けて、各Delay_RequestメッセージのDelay受信時刻Tm(1)を記録する。
【0075】
次に、マスタノード300が各Delay_Requestメッセージについて遅延量SM_Qを計測する(ステップS403)。具体的には、遅延計測部306のカウンタ最大値モニタ部502及び到着時カウンタ値モニタ部503が、パケットカウンタ501のカウンタ値をモニタし、それぞれインターバル期間における最大カウンタ値及び各Delay_Requestメッセージ到着時のカウンタ値を取得する。次に、遅延算出部504が双方のカウンタ値情報に基づいて、各Delay_Requestメッセージの遅延量SM_Qを算出する。そして、遅延計測部306が、算出された各遅延量SM_Qをパケット生成部303に通知する。パケット生成部303は、各Delay_Requestメッセージの送信元であるスレーブノード400a〜400cのノード情報に対応付けて、各Delay_Requestメッセージの遅延量SM_Qを記録する。
【0076】
次に、マスタノード300が、遅延量SM_Q及びDelay受信時刻Tm(1)が格納されたDelay_Responseメッセージを、各スレーブノード400a〜400cに対して送信する(ステップS404)。具体的には、パケット生成部303が、各スレーブノード400a〜400cに対応する遅延量SM_Q及び時刻情報Tm(1)を格納したDelay_Responseメッセージを生成し、パケット送信部304に転送する。そして、パケット送信部304がスレーブノード400a〜400cに対して、各Delay_Responseメッセージをユニキャスト送信する。
【0077】
次に、図13を参照してスレーブノード400によるスレーブ第2処理について説明する。まず、スレーブノード400がマスタノード300からDelay_Responseメッセージを受信する(ステップS501)。具体的には、パケット受信部401がマスタノード300からDelay_Responseメッセージを受信し、受信されたDelay_Responseメッセージを時刻同期制御部405に転送する。
【0078】
次に、スレーブノード400が、受信されたDelay_Responseメッセージから遅延量SM_Q及びDelay受信時刻Tm(1)を抽出し記録する(ステップS502)。具体的には、時刻同期制御部405のパケット解析部701が、Delay_Responseメッセージの受信に応じて、Delay_Responseメッセージのペイロード部に格納された遅延量SM_Q及びDelay受信時刻Tm(1)を抽出し取得する。そして、パケット解析部701が、取得された遅延量SM_Q及びDelay受信時刻Tm(1)をオフセット計算部703に通知する。
【0079】
次に、スレーブノード400が、時刻差MS_Diff及び時刻差SM_Diffの値を算出する(ステップS503)。具体的には、オフセット計算部703が以下の二つの式(式12及び式13)に基づいて、時刻差MS_Diff及び時刻差SM_Diffの値を算出し、保持する。
MS_Diff = Ts(0) - Tm(0) ・・・式12
SM_Diff = Tm(1) - Ts(1) ・・・式13
【0080】
次に、スレーブノード400がOffsetを算出する(ステップS504)。具体的には、オフセット計算部703が、時刻差MS_Diff及び時刻差SM_Diffと、遅延量MS_Q及び遅延量SM_Qとに基づいて、以下の式14によりOffsetを算出する。そして、オフセット計算部703が、算出されたOffsetの値を時刻調整部704に通知する。
Offset = {(MS_Diff - SM_Diff) - (MS_Q - SM_Q)} / 2 ・・・式14
【0081】
なお、式14は以下のようにして求められる。まず、時刻差MS_Diffと遅延量MS_Qとから以下のような式15が求められる。
MS_Diff = Propagation_Delay + MS_Q + Offset ・・・式15
また、時刻差SM_Diffと遅延量SM_Qとから以下のような式16が求められる。
SM_Diff = Propagation_Delay + SM_Q - Offset ・・・式16
式15及び式16から、上記の式14が求められる。なお、式15及び式16におけるpropagation_Delayは、マスタノード300とスレーブノード400との間の伝播遅延の遅延量を表す。
【0082】
図13に表される処理の説明に戻る。上記のステップS504の処理の後、スレーブノード400が、算出されたOffsetの値を用いてスレーブ時刻を調整する(ステップS505)。具体的には、時刻調整部704が、Offsetが正の値の場合にはスレーブ時刻をOffset分遅らせ、Offsetが負の値の場合にはスレーブ時刻をOffset分進める。このようなスレーブ時刻の調整により、スレーブ時刻はマスタノード300のマスタ時刻に同期する。
【0083】
図14及び図15は、通信システム1による時刻同期処理の具体例を表すシーケンス図である。まず、図14を用いて通信システム1による時刻同期処理の具体例について説明する。図14では、マスタノード300に対するスレーブノード400のOffsetが“3”、マスタノード300とスレーブノード400との間の伝播遅延の遅延量Propagation_Delayが“3”、マスタノード300からスレーブノード400へのキューイング遅延の遅延量MS_Qが“0”、スレーブノード400からマスタノード300へのキューイング遅延の遅延量SM_Qが“0”である。なお、図14及び図15では、説明の便宜のため、マスタ時刻及びスレーブ時刻を時/分/秒の表記ではなく、整数値で示す。
【0084】
マスタ第1処理においてSync送信時刻Tm(0)は、“4”である。スレーブ第1処理において、Sync受信時刻Ts(0)は“10”であり、Delay送信時刻Ts(1)は“15”である。マスタ第2処理において、Delay受信時刻Tm(1)は“15”である。マスタノード300からスレーブノード400へのキューイング遅延の遅延量MS_Qは、スレーブ第1処理において遅延計測部403によって“0”と計測される。また、スレーブノード400からマスタノード300へのキューイング遅延の遅延量SM_Qは、マスタ第2処理において遅延計測部306によって、“0”と計測される。スレーブノード400のオフセット計算部703は、スレーブ第2処理において、以上の各値に基づいて以下の通りOffsetの値を“3”と算出する。
【0085】
MS_Diff = Ts(0) - Tm(0) = 10 - 4 = 6
SM_Diff = Tm(1) - Ts(1) = 15 - 15 = 0
Offset = {(MS_Diff - SM_Diff) - (MS_Q - SM_Q)} / 2 = {(6 - 0) - (0 - 0)} / 2 = 3
【0086】
なお、図14は、Offsetが“3”となる条件下でのシーケンスであり、上記のように通信システム1の時刻同期処理によってOffsetを正確に算出することが可能となっている。
【0087】
次に、図15を用いて通信システム1による時刻同期処理の具体例について説明する。図15では、マスタノード300に対するスレーブノード400のOffsetが“4”、マスタノード300とスレーブノード400との間の伝播遅延の遅延量Propagation_Delayが“3”、マスタノード300からスレーブノード400へのキューイング遅延の遅延量MS_Qが“2”、スレーブノード400からマスタノード300へのキューイング遅延の遅延量SM_Qが“3”である。
【0088】
マスタ第1処理においてSync送信時刻Tm(0)は、“4”である。スレーブ第1処理において、Sync受信時刻Ts(0)は“13”であり、Delay送信時刻Ts(1)は“17”である。マスタ第2処理において、Delay受信時刻Tm(1)は“19”である。マスタノード300からスレーブノード400へのキューイング遅延の遅延量MS_Qは、スレーブ第1処理において遅延計測部403によって“2”と計測される。また、スレーブノード400からマスタノード300へのキューイング遅延の遅延量SM_Qは、マスタ第2処理において遅延計測部306によって、“3”と計測される。スレーブノード400のオフセット計算部703は、スレーブ第2処理において、以上の各値に基づいて以下の通りOffsetの値を“4”と算出する。
【0089】
MS_Diff = Ts(0) - Tm(0) = 13 - 4 = 9
SM_Diff = Tm(1) - Ts(1) = 19 - 17 = 2
Offset = {(MS_Diff - SM_Diff) - (MS_Q - SM_Q)} / 2 = {(9 - 2) - (2 - 3)} / 2 = 4
【0090】
なお、図15は、Offsetが“4”となる条件下でのシーケンスであり、キューイング遅延がゼロでない場合であっても、上記のように通信システム1の時刻同期処理によってOffsetを正確に算出することが可能となっている。
【0091】
図16は、通信システム1において計測される遅延量の確率分布を表す図である。図16における実験では、パケットネットワークPNの代わりにネットワークエミュレータを接続し、マスタノード300から定期的に送信されるSyncメッセージのパケットに対して遅延量を付加し、スレーブノード400の遅延計測部403において遅延量を測定した。図16では、ネットワークエミュレータによって付加した遅延量の分布と、スレーブノード400で計測された遅延量の分布を示している。図16の横軸が遅延量を表し、縦軸が確率を示す。一様分布及びポアソン分布のいずれの場合も、計測された遅延量の分布がネットワークエミュレータによって付加された遅延量の分布とほぼ一致している。したがって、遅延計測部403において、遅延量MS_Qが正しく計測できていることが明らかである。マスタノード300の遅延計測部306も、スレーブノード400の遅延計測部403と同様の動作を行なうため、SM_Qを正しく計測できていることが明らかである。そのため、通信システム1による時刻同期処理によって、Offsetの値を正確に算出し、マスタ時刻に対してスレーブ時刻を正確に同期できていることが明らかである。
【0092】
上記の通信システム1によれば、スレーブノード400の遅延計測部403が、マスタノード300からスレーブノード400へのキューイング遅延の遅延量MS_Qを正確に計測する。また、マスタノード300の遅延計測部306がスレーブノード400からマスタノード300へのキューイング遅延の遅延量SM_Qを正確に計測する。そして、マスタノード300から遅延量SM_Qをスレーブノード400に通知することによって、スレーブノード400が、マスタノード300とスレーブノード400との間の双方向のキューイング遅延の遅延量をそれぞれ個別に認識できる。これによって、Pure IEEE1588のように、双方向のキューイング遅延を等しいと仮定してOffsetを算出する場合に比べて、双方向のキューイング遅延の実際の差異によって生じる誤差を除外することができ、より精度の高い時刻同期を実現することが可能となる。
【0093】
また、通信システム1では、各々の方向のキューイング遅延の遅延量を、マスタノード300及びスレーブノード400のみによって計測することができる。そのため、パケットネットワークPNにおける中継ノードにおいてTC機能などの特別な機能を実装する必要がなく、既存の中継ノードで対応することが可能である。すなわち、中継ノードに対してTC機能を実装する必要があるIEEE1588v2 w/TCに比べて、中継ノードを置き換える必要が生じず、導入に要するコストを抑えることができ、導入が容易であるという効果がある。
【0094】
<変形例>
遅延計測部306は、パケットカウンタ501に代えてパケットバッファを用いて構成されても良い。パケットバッファは、パケット受信部401からDelay_Requestメッセージのパケットを受信すると、受信されたパケットをバッファに蓄積する。また、パケットバッファは、クロック生成部301で決定される周波数に従って、蓄積しているパケットを出力する。図17は、パケットバッファを用いて構成された場合の、遅延計測部306の処理の概略を表す図である。図17において、縦軸はバッファへの蓄積量を表し、下から上へ向けて高い蓄積量を表す。横軸は時間を表し、左から右へ向けて進行する。縦に伸びる等間隔に並んだ複数の破線は、キューイング遅延が発生しない場合にDelay_Requestメッセージのパケットが受信されるタイミングを表す。上方向を指す矢印は、Delay_Requestメッセージのパケットが実際に受信されたタイミングを表す。パケットバッファは、Delay_Requestメッセージのパケットが受信されると、受信されたビット数分だけ蓄積量が増加する。縦に伸びる破線と上方向の矢印とが時間軸で一致している場合、すなわちキューイング遅延が発生せずにDelay_Requestメッセージのパケットが受信されている場合は、読み出されたタイミング(蓄積量が減るタイミング)から新たに受信されるタイミング(蓄積量が増えるタイミング)との間の時間幅は最小Tminとなる。一方、キューイング遅延が発生している場合には、上記の時間幅はTminよりも大きい値となる。このとき、最小値Tminと時間幅との差分が、発生しているキューイング遅延の遅延量と等価となる。
【0095】
なお、上述した遅延計測部306のいずれの構成も、遅延を計測するための構成の一例にすぎず、キューイング遅延の遅延量SM_Qを計測できる構成であればその他の構成が採用されても良い。また、遅延計測部403についても同様である。
【0096】
[第2実施形態]
通信システム1の第1実施形態では、マスタノード300が遅延量SM_Qを計測しDelay_Responseメッセージに格納してスレーブノード400へ送信する。しかしながら、IEEE1588の標準では、Delay_Responseメッセージ内にDelay受信時刻Tm(1)を格納するためのフィールドはあるものの、遅延量SM_Qを格納するためのフィールドはない。そのため、第1実施形態では、Delay_Responseメッセージの標準フォーマットを変更する必要が生じる。そこで、通信システム1の第2実施形態は、Delay_Responseメッセージの標準フォーマットを変更することなく、時刻同期処理を実現することを可能とする。以下、通信システム1の第2実施形態について、第1実施形態と異なる点を中心に説明する。
【0097】
〔マスタノード〕
図18は、第2実施形態におけるマスタノード300の機能構成を表す機能ブロック図である。第2実施形態におけるマスタノード300は、パケット生成部303に代えてパケット生成部303aを備える点で第1実施形態におけるマスタノード300と異なり、その他の構成は同じである。
【0098】
パケット生成部303aは、Delay_Responseメッセージに関する処理がパケット生成部303と異なり、他の構成は同じである。パケット生成部303aは、Delay受信時刻Tm(1)を、遅延量SM_Qを用いて、補正Delay受信時刻Tm(2)(補正時刻)として補正する。具体的には、パケット生成部303aは、Delay受信時刻Tm(1)から遅延量SM_Qを減算した結果として補正Delay受信時刻Tm(2)を算出する。そして、パケット生成部303aは、補正Delay受信時刻Tm(2)をDelay_Responseメッセージに格納し、パケット送信部304へ送る。
【0099】
〔スレーブノード〕
図19は、第2実施形態におけるスレーブノード400の機能構成を表す機能ブロック図である。第2実施形態におけるスレーブノード400は、時刻同期制御部405に代えて時刻同期制御部405aを備える点で第1実施形態におけるスレーブノード400と異なり、その他の構成は同じである。
【0100】
時刻同期制御部405aは、Delay_Requestメッセージの受信時刻情報として補正Delay受信時刻Tm(2)を用いる点、遅延量SM_Qを用いない点で時刻同期制御部405と異なり、他の構成は同じである。
【0101】
図20は、第2実施形態における時刻同期制御部405aの機能構成を表す機能ブロック図である。第2実施形態における時刻同期制御部405aは、パケット解析部701及びオフセット計算部703に代えて、パケット解析部701a及びオフセット計算部703aを備える点で第1実施形態における時刻同期制御部405と異なり、他の構成は同じである。
【0102】
パケット解析部701aは、Delay_Responseメッセージに関する処理がパケット解析部701と異なり、他の構成は同じである。パケット解析部701aは、Delay_Responseメッセージから補正Delay受信時刻Tm(2)を抽出し、抽出された補正Delay受信時刻Tm(2)をオフセット計算部703aに通知する。
【0103】
オフセット計算部703aは、Delay受信時刻Tm(1)に代えて補正Delay受信時刻Tm(2)を用いてOffsetを計算する点でオフセット計算部703と異なる。オフセット計算部703aの処理の詳細については後述する。
【0104】
〔動作〕
次に、第2実施形態における通信システム1の各装置の処理の流れについて説明する。ただし、マスタ第1処理及びスレーブ第1処理は、それぞれ第1実施形態における処理(図10及び図11)と同じであるため説明を省略する。
【0105】
図21は、第2実施形態におけるマスタ第2処理の流れを表すフローチャートである。図21において、図12と同じ処理については同じ符号を付して表し説明を省略する。第2実施形態では、ステップS403の後、マスタノード300が補正Delay受信時刻Tm(2)を算出する(ステップS411)。具体的には、パケット生成部303aが遅延量SM_Q及びDelay受信時刻Tm(1)を用いて下記の式17により補正Delay受信時刻Tm(2)を算出する。
Tm(2) = Tm(1) - SM_Q ・・・式17
【0106】
このとき、パケット生成部303aは、スレーブノード400a〜400c毎の補正Delay受信時刻Tm(2)を算出する。そして、パケット生成部303aは、Delay_Requestメッセージの送信元であるスレーブノード400a〜400cのノード情報に対応付けて、補正Delay受信時刻Tm(2)を記録する。なお、補正Delay受信時刻Tm(2)は、キューイング遅延が付加されずにDelay_Requestメッセージが転送された場合の受信時刻を示す。
【0107】
次に、マスタノード300が、算出された補正Delay受信時刻Tm(2)を格納したDelay_Responseメッセージをスレーブノード400に送信する(ステップS412)。具体的には、パケット生成部303aは、スレーブノード400a〜400c毎に、補正Delay受信時刻Tm(2)を格納したDelay_Responseメッセージを生成し、パケット送信部304に送る。パケット送信部304は、各スレーブノード400a〜400cに対して、Delay_Responseメッセージをユニキャスト送信する。
【0108】
図22は、第2実施形態におけるスレーブ第2処理の流れを表すフローチャートである。図22において、図13と同じ処理については同じ符号を付して表し説明を省略する。第2実施形態では、ステップS501の処理の後、スレーブノード400がDelay_Responseメッセージから補正Delay受信時刻Tm(2)を抽出し記録する(ステップS511)。具体的には、時刻同期制御部405aのパケット解析部701aが、Delay_Responseメッセージの受信に応じて、Delay_Responseメッセージのペイロード部に格納される補正Delay受信時刻Tm(2)を抽出し、記録する。そして、パケット解析部701aが補正Delay受信時刻Tm(2)をオフセット計算部703aに通知する。
【0109】
次に、スレーブノード400が、時刻差MS_Diff及び補正時刻差SM_Diff2の値を算出する(ステップS512)。このとき、時刻差MS_Diffを算出する処理は第1実施形態と同じである。オフセット計算部703aは、Delay送信時刻Ts(1)及び補正Delay受信時刻Tm(2)を用いて、以下の式17に基づいて補正時刻差SM_Diff2を算出する。
SM_Diff2 = Tm(2)- Ts(1) ・・・式17
【0110】
次に、スレーブノード400が、時刻差MS_Diff、補正時刻差SM_Diff2、遅延量MS_Qを用いてOffsetを計算する(ステップS513)。具体的には、オフセット計算部703aが、時刻差MS_Diff、補正時刻差SM_Diff2、遅延量MS_Qに基づいて、以下の式18によりOffsetを算出する。そして、オフセット計算部703aが、算出されたOffsetの値を時刻調整部704に通知する。
Offset = {(MS_Diff - SM_Diff2) - MS_Q} / 2 ・・・式18
【0111】
なお、式18は以下のようにして求められる。まず、時刻差MS_Diffと遅延量MS_Qとから以下のような式19が求められる。なお、式19は式15と同じである。
MS_Diff = Propagation_Delay + MS_Q + Offset ・・・式19
また、補正時刻差SM_Diff2から以下のような式20が求められる。
SM_Diff2 = Propagation_Delay - Offset ・・・式20
式19及び式20から、上記の式18が求められる。なお、式19及び式20におけるpropagation_Delayも、上記のものと同様に、マスタノード300とスレーブノード400との間の伝播遅延の遅延量を表す。
【0112】
図23は、第2実施形態における通信システム1による時刻同期処理の具体例を表すシーケンス図である。図23では、マスタノード300に対するスレーブノード400のOffsetが“4”、マスタノード300とスレーブノード400との間の伝播遅延の遅延量Propagation_Delayが“3”、マスタノード300からスレーブノード400へのキューイング遅延の遅延量MS_Qが“2”、スレーブノード400からマスタノード300へのキューイング遅延の遅延量SM_Qが“3”である。
【0113】
マスタ第1処理においてSync送信時刻Tm(0)は、“4”である。スレーブ第1処理において、Sync受信時刻Ts(0)は“13”であり、Delay送信時刻Ts(1)は“17”である。マスタ第2処理において、Delay受信時刻Tm(1)は“19”である。マスタノード300からスレーブノード400へのキューイング遅延の遅延量MS_Qは、スレーブ第1処理において遅延計測部403によって“2”と計測される。また、スレーブノード400からマスタノード300へのキューイング遅延の遅延量SM_Qは、マスタ第2処理において遅延計測部306によって、“3”と計測される。マスタノード300のパケット生成部303aは、以下のように補正Delay受信時刻Tm(2)を算出する。
Tm(2)= Tm(1) - SM_Q = 19 - 3 = 16
【0114】
スレーブノード400のオフセット計算部703aは、スレーブ第2処理において、以上の各値に基づいて以下の通りOffsetの値を“4”と算出する。
MS_Diff = Ts(0) - Tm(0) = 13 - 4 = 9
SM_Diff2 = Tm(2) - Ts(1) = 16 - 17 = -1
Offset = {(MS_Diff - SM_Diff2) - MS_Q} / 2 = {(9 - (- 1)) - 2} / 2 = 4
【0115】
なお、図23は、Offsetが“4”となる条件下でのシーケンスであり、Delay_Responseメッセージに遅延量SM_Qを格納するためのフィールドを設けない場合であっても、上記のように通信システム1の時刻同期処理によってOffsetを正確に算出することが可能となっている。
【0116】
このように構成された第2実施形態における通信システム1では、Delay_Responseメッセージに遅延量SM_Qを格納するためのフィールドを設けることなく、第1実施形態における通信システム1と同程度の精度で時刻同期処理を実行することが可能となる。したがって、標準フォーマットのDelay Responseメッセージを用いることが可能となる。そのため、例えば通信システム1を実装する際のコストの低減や時間の削減を行うことが可能となるとの効果を奏する。
【0117】
[第3実施形態]
上述した第1実施形態及び第2実施形態では、マスタノード300及びスレーブノード400が遅延量MS_Q及びSM_Qの計測を行なうことによって、既存の中継ノードのままで、マスタ/スレーブ間の双方向の遅延の非対称性を考慮した高精度の時刻同期を実現した。これに対し、第3実施形態では、マスタノード300及びスレーブノード400それぞれの前段に各遅延量を計測するノード(以下、「エミュレーションノード」という。)を配置することによって、全ての中継ノードを置き換えることなく、IEEE1588v2 w/TCを実現する。
【0118】
図24は、第3実施形態における通信システム1のシステム構成図である。第3実施形態における通信システム1は、マスタノード300、スレーブノード400(400a〜400c)、エミュレーションノード800(800a〜800d)、パケットネットワークPNを備える。エミュレーションノード800a〜800dは、それぞれスレーブノード400a〜400c及びマスタノード300の前段に配置される。なお、エミュレーションノード800は、パケットネットワークPNの中継ノードの機能として実装されても良いし、パケットネットワークPNの中継ノードとは異なる装置として実装されても良い。エミュレーションノード800は、中継ノードとは異なる装置として実装される場合には、例えば単一の装置として実装され、マスタノード300やスレーブノード400に対して接続される。以下、通信システム1の第3実施形態について、第1実施形態と異なる点を中心に説明する。
【0119】
〔マスタノード〕
図25は第3実施形態におけるマスタノード300の機能構成を表す機能ブロック図である。第3実施形態におけるマスタノード300は、IEEE1588v2 w/TCに基づいて動作する。具体的には、第3実施形態におけるマスタノード300は、パケット生成部303に代えてパケット生成部303bを備える点、遅延計測部306を備えない点で、第1実施形態におけるマスタノード300と異なり、その他の構成は同じである。
【0120】
パケット生成部303bは、Delay_Responseメッセージに関する処理がパケット生成部303と異なり、他の構成は同じである。パケット生成部303bは、Delay_Requestメッセージの受信に応じて、Delay受信時刻Tm(1)を取得すると共に、Delay_Requestメッセージ内からCF_SM値を抽出する。そして、パケット生成部303bは、Delay受信時刻Tm(1)及びCF_SM値を格納したDelay_Responseメッセージを生成する。
【0121】
〔スレーブノード〕
図26は、第3実施形態におけるスレーブノード400の機能構成を表す機能ブロック図である。第3実施形態におけるスレーブノード400は、IEEE1588v2 w/TCに基づいて動作する。具体的には、第3実施形態におけるスレーブノード400は、時刻同期制御部405に代えて時刻同期制御部405bを備える点、遅延計測部403を備えない点で第1実施形態におけるスレーブノード400と異なり、その他の構成は同じである。
【0122】
時刻同期制御部405bは、遅延量SM_Q及び遅延量MS_Qに代えて、CF値(CF_MS、CF_SM)を用いてOffsetを求める点で時刻同期制御部405と異なり、他の構成は同じである。
【0123】
図27は、時刻同期制御部405bの詳細な機能構成を表す機能ブロック図である。時刻同期制御部405bは、パケット解析部701に代えてパケット解析部701bを備える点、オフセット計算部703に代えてオフセット計算部703bを備える点で時刻同期制御部405と異なり、その他の構成は同じである。
【0124】
パケット解析部701bは、Syncメッセージ及びDelay_Responseメッセージに関する処理がパケット解析部701と異なる。具体的には、パケット解析部701bは、Syncメッセージを受信すると、スレーブクロック部404を参照しSync受信時刻Ts(0)を取得すると共に、SyncメッセージからCF値CF_MSを抽出する。そして、パケット解析部701bは、抽出されたSync受信時刻Ts(0)及びCF値CF_MSを、オフセット計算部703bに通知する。また、パケット解析部701bは、Delay_Responseメッセージを受信すると、格納されるDelay受信時刻Tm(1)及びCF値CF_SMを抽出し、オフセット計算部703bに通知する。
【0125】
オフセット計算部703bは、Syncメッセージ及びDelay_Requestメッセージの送受信時刻情報(Sync送信時刻Tm(0)、Sync受信時刻Ts(0)、Delay送信時刻Ts(1)、Delay受信時刻Tm(1))、CF値CF_MS及びCF_SMを用いてOffsetを計算する。なお、CF値とは、Delay ResponseメッセージのCorrection Fieldに格納される二つの値CF_MS及びCF_SMである。CF_MSは遅延量MS_Qと同じ値であり、CF_SMは遅延量SM_Qと同じ値である。したがって、オフセット計算部703bは、上記の式14においてMS_Q及びSM_Qの値をそれぞれCF_MS及びCF_SMに置き換えることによって、Offsetの値を算出する。
【0126】
〔エミュレーションノード〕
図28は、第3実施形態におけるエミュレーションノード800の機能構成を表す機能ブロック図である。エミュレーションノード800は、パケット受信部801と、PLL部402と、遅延計測部803と、クロック部804と、TC処理部805と、パケット送信部806とから構成される。PLL部402は、第1実施形態におけるスレーブノード400が備えるPLL部402と同じ構成である。クロック部804は、第1実施形態におけるスレーブクロック部404と同じ構成である。なお、エミュレーションノード800は、例えばバスで接続されたCPU、メモリ、補助記憶装置、通信インタフェース等を備え、時刻同期用プログラムを実行することによって上記各機能部を備える装置として構成されても良い。
【0127】
遅延計測部803は、マスタノード300bの前段に配置されるエミュレーションノード800dと、スレーブノード400bの前段に配置されるエミュレーションノード800a〜cとでは、その構成が異なる。エミュレーションノード800dの遅延計測部803は、第1実施形態におけるマスタノード300の遅延計測部306と同じ構成である。一方、エミュレーションノード800a〜800cの遅延計測部803は、第1実施形態におけるスレーブノード400の遅延計測部403と同じ構成である。いずれの場合も、遅延計測部803は、計測結果をTC処理部805に通知する。
【0128】
パケット受信部801は、Syncメッセージ又はDelay_Requestメッセージを受信すると、受信されたメッセージをTC処理部805に転送すると共に、クロック部804を参照して各メッセージの受信時刻を取得する。そして、パケット受信部801は、各メッセージの受信時刻をパケット送信部806に通知する。また、パケット受信部801は、Follow_upメッセージ又はDelay_Responseメッセージを受信すると、そのままパケット送信部806に転送する。
【0129】
遅延計測部803は、エミュレーションノード800にメッセージが至るまでのキューイング遅延の遅延量(以下、「予備遅延量」という。)MS_Q2及びSM_Q2を計測する。なお、上述したように、遅延計測部803の構成は、第1実施形態におけるスレーブノード400の遅延計測部403と同じ構成であり、遅延計測部403と同じ処理によって算出された結果の遅延量が予備遅延量を表す。
【0130】
TC処理部805は、パケット受信部801から受信するSyncメッセージ及びDelay_RequestメッセージのCorrection Fieldに、予備遅延量MS_Q2及びSM_Q2を、それぞれCF値CF_MS及びCF_SMとして記録し、パケット送信部806に転送する。
【0131】
パケット送信部806は、TC処理部805からSyncメッセージ又はDelay_Requestメッセージを送信すると、クロック部804を参照して送信時刻を取得する。そして、パケット送信部806は、送信時刻と、パケット受信部801から通知された受信時刻と、に基づいてノード内滞在時間を計算する。ノード内滞在時間とは、自装置内にパケットが滞在していた時間を表す。そして、パケット送信部806は、Correction Fieldに格納されているCF値にノード内滞在時間を加算し、パケットネットワークPN又は宛先となる各ノード(マスタノード300又はスレーブノード400)に転送する。CF値である予備遅延量MS_Q2及びSM_Q2にノード内滞在時間が加算されることによって、加算後のCF値は遅延量MS_Q及びSM_Qと同じ値となる。また、パケット送信部806は、Follow_upメッセージ及びDelay_Responseメッセージについては、そのままパケットネットワークPN又は宛先となる各ノード(マスタノード300又はスレーブノード400)に転送する。
【0132】
〔動作〕
次に、第3実施形態における通信システム1の各装置の処理の流れについて説明する。ただし、マスタ第1処理は、第1実施形態における処理(図10)と同じであるため説明を省略する。
【0133】
図29は、第3実施形態におけるスレーブ第1処理の流れを表すフローチャートである。図29において、図11と同じ処理については同じ符号を付して表し説明を省略する。第3実施形態では、ステップS302の処理の後、スレーブノード400が、受信されたSyncメッセージからCF_MSを抽出する(ステップS321)。具体的には、時刻同期制御部405bのパケット解析部701bが、受信されたSyncメッセージからCF_MSを抽出し、CF_MSをオフセット計算部703bに通知する。そして、ステップS311の処理の後は、スレーブノード400はS303〜S306の処理を実行する。
【0134】
図30は、第3実施形態におけるマスタ第2処理の流れを表すフローチャートである。図30において、図12と同じ処理については同じ符号を付して表し説明を省略する。第3実施形態では、ステップS402の後、マスタノード300が、受信されたDelay_RequestメッセージからCF_SMを抽出する(ステップS421)。具体的には、パケット生成部303bが、受信されたDelay_RequestメッセージからCF_SMを抽出し、Delay_Requestメッセージの送信元である各スレーブノード400のノード情報と共に保持する。
【0135】
次に、マスタノード300が、CF値CF_SM及びDelay受信時刻Tm(1)が格納されたDelay_Responseメッセージを、各スレーブノード400a〜400cに対して送信する(ステップS422)。具体的には、パケット生成部303bが、各スレーブノード400a〜400cに対応するCF値CF_SM及び時刻情報Tm(1)を格納したDelay_Responseメッセージを生成し、パケット送信部304に転送する。そして、パケット送信部304がスレーブノード400a〜400cに対して、各Delay_Responseメッセージをユニキャスト送信する。
【0136】
図31は、第3実施形態におけるスレーブ第2処理の流れを表すフローチャートである。図31において、図13と同じ処理については同じ符号を付して表し説明を省略する。第3実施形態では、ステップS501の後、スレーブノード400が、受信されたDelay_ResponseメッセージからCF値CF_SM及びDelay受信時刻Tm(1)を抽出し記録する(ステップS521)。具体的には、時刻同期制御部405bのパケット解析部701bが、Delay_Responseメッセージの受信に応じて、Delay_Responseメッセージのペイロード部に格納されたCF値CF_SM及びDelay受信時刻Tm(1)を抽出し取得する。そして、パケット解析部701bが、取得されたCF値CF_SM及びDelay受信時刻Tm(1)をオフセット計算部703bに通知する。
【0137】
次に、スレーブノード400が、時刻差MS_Diff及び時刻差SM_Diffの値を算出する(ステップS522)。具体的には、オフセット計算部703bが以下の二つの式(式21及び式22)に基づいて、時刻差MS_Diff及び時刻差SM_Diffの値を算出し、保持する。
MS_Diff = (Ts(0) - CF_MS) - Tm(0) ・・・式21
SM_Diff = (Tm(1) - CF_SM) - Ts(1) ・・・式22
【0138】
次に、スレーブノード400がOffsetを算出する(ステップS523)。具体的には、オフセット計算部703bが、時刻差MS_Diff及び時刻差SM_Diffに基づいて、以下の式23によりOffsetを算出する。そして、オフセット計算部703bが、算出されたOffsetの値を時刻調整部704に通知する。
【0139】
Offset = (MS_Diff - SM_Diff) / 2
={(Ts(0) - CF_MS) - Tm(0) - ((Tm(1) - CF_SM) - Ts(1))} / 2
={Ts(0) - CF_MS - Tm(0) - Tm(1) + CF_SM + Ts(1)} / 2 ・・・式23
【0140】
なお、式23は以下のようにして求められる。まず、時刻差MS_Diffは以下のような式24により表される。
MS_Diff = Propagation_Delay + Offset ・・・式24
また、時刻差SM_Diffは以下のような式25により表される。
SM_Diff = Propagation_Delay - Offset ・・・式25
そして、式24及び式25から、上記の式23が求められる。式24及び式25におけるpropagation_Delayは、マスタノード300とスレーブノード400との間の伝播遅延の遅延量を表す。
【0141】
なお、オフセット計算部703bは、CF_SM及びCF_MSをそれぞれSM_Q及びMS_Qに置き換えることによって、第1実施形態と同様に式12〜式14を用いてOffsetを算出するように構成されても良い。
【0142】
図32は、第3実施形態におけるエミュレーションノード800による処理の流れを表すフローチャートである。まず、エミュレーションノード800が1588メッセージを受信する(ステップS601)。具体的には、パケット受信部801が1588パケットを受信する。受信された1588メッセージがSyncメッセージ又はDelay_Requestメッセージである場合には、エミュレーションノード800がキューイング遅延の予備遅延量を計測する(ステップS602)。具体的には、遅延計測部803の遅延算出部604が、予備遅延量MS_Q2及びSM_Q2を算出する。
【0143】
次に、エミュレーションノード800が、予備遅延量MS_Q2及びSM_Q2をCF値として記録する(ステップS603)。具体的には、TC処理部805が、Syncメッセージ又はDelay_RequestメッセージのCorrection Fieldに、予備遅延量MS_Q2及びSM_Q2を、それぞれCF値CF_MS及びCF_SMとして記録する。次に、エミュレーションノード800が、ノード内滞在時間を計測する(ステップS604)。具体的には、パケット送信部806が、Syncメッセージ又はDelay_Requestメッセージの受信時刻及び送信時刻に基づいて、ノード内滞在時間を計算する。次に、エミュレーションノード800が、CF値に対してノード内滞在時間を加算する(ステップS605)。具体的には、パケット送信部806が、Correction Fieldに格納されているCF値にノード内滞在時間を加算する。そして、エミュレーションノード800が1588メッセージを送信する(ステップS606)。具体的には、パケット送信部806が、ノード内滞在時間が加算された後のSyncメッセージ又はDelay_Requestメッセージを、パケットネットワークPN又は宛先となる各ノード(マスタノード300又はスレーブノード400)に転送する。
【0144】
一方、ステップS601において受信された1588メッセージがSyncメッセージ及びDelay_Requestメッセージ以外のメッセージである場合には、エミュレーションノード800がこの1588メッセージを送信する(ステップS607)。具体的には、パケット送信部806が、受信されたメッセージを、パケットネットワークPN又は宛先となる各ノード(マスタノード300又はスレーブノード400)に転送する。
【0145】
図33は、第3実施形態における通信システム1による時刻同期処理の具体例を表すシーケンス図である。図33では、マスタノード300に対するスレーブノード400aのOffsetが“4”、マスタノード300とスレーブノード400aとの間の伝播遅延の遅延量Propagation_Delayが“3”、マスタノード300からスレーブノード400aへのキューイング遅延の遅延量MS_Qが“2”、スレーブノード400aからマスタノード300へのキューイング遅延の遅延量SM_Qが“3”である。
【0146】
マスタ第1処理においてSync送信時刻Tm(0)は、“4”である。スレーブ第1処理において、Sync受信時刻Ts(0)は“13”であり、Delay送信時刻Ts(1)は“17”である。マスタ第2処理において、Delay受信時刻Tm(1)は“19”である。
【0147】
エミュレーションノード800aは、Syncメッセージに対してマスタノード300からエミュレーションノード800aまでの間で付加されたキューイング遅延(予備遅延量)MS_Q2を計測する。また、エミュレーションノード800aは、自装置におけるノード内滞在時間Ts_syncを予備遅延量MS_Q2に加算し、CF_MS=2としてSyncメッセージに格納する。そして、エミュレーションノード800aは、Syncメッセージをスレーブノード400aに転送する。
【0148】
エミュレーションノード800dは、Delay_Requestメッセージに対してスレーブノード400aからエミュレーションノード800dまでの間で付加されたキューイング遅延(予備遅延量)SM_Q2を計測する。また、エミュレーションノード800dは、自装置におけるノード内滞在時間Ts_dreqを予備遅延量SM_Q2に加算し、CF_SM=3としてDelay_Requestメッセージに格納する。そして、エミュレーションノード800dは、Delay_Requestメッセージをマスタノード300に転送する。
【0149】
スレーブノード400aのオフセット計算部703bは、スレーブ第2処理において、以上の各値に基づいて以下の通りOffsetの値を“4”と算出する。
MS_Diff = (Ts(0) - CF_MS) - Tm(0) = (13 - 2) - 4 = 7
SM_Diff = (Tm(1) - CF_SM) - Ts(1) = (19 - 3) - 17 = -1
Offset = (MS_Diff - SM_Diff) / 2 = (7 - ( -1)) / 2 = 4
【0150】
なお、図33は、Offsetが“4”となる条件下でのシーケンスであり、実施例3の時刻同期制御方式により、エミュレーションノード800が中継ノードのTC機能を代替し、IEEE1588v2 w/TCでOffsetを求める場合でも上記のように通信システム1の時刻同期処理によってOffsetを正確に算出することが可能となっている。
【0151】
このように構成された第3実施形態における通信システム1では、マスタノード300及びスレーブノード400の前段に配置されたエミュレーションノード800が、他方のノードから自装置までのキューイング遅延の合計値である予備遅延量を計測して1588メッセージのCorrection Fieldに格納する。そのため、中継ノードに対してTC機能を実装しなくとも、エミュレーションノード800がCorrection Field に格納すべき遅延量を正確に計測する。したがって、IEEE1588v2 w/TCを実装する場合に、パケットネットワークPNにおける中継ノード全てに対してTC機能を実装する必要が無い。そのため、IEEE1588v2 w/TCによる時刻同期制御を実装する際のコストの低減や時間の削減を行うことが可能となるとの効果を奏する。
【0152】
以上、この発明の実施形態について図面を参照して詳述してきたが、具体的な構成はこの実施形態に限られるものではなく、この発明の要旨を逸脱しない範囲の設計等も含まれる。
【符号の説明】
【0153】
300…マスタノード, 301…クロック生成部, 302…マスタクロック部, 303…パケット生成部(通知部), 304…パケット送信部(送信部、通知部), 305…パケット受信部, 306…遅延計測部(第一遅延計測部), 400…スレーブノード, 401…パケット受信部, 402…PLL部, 403…遅延計測部(第二遅延計測部), 404…スレーブクロック部, 405…時刻同期制御部, 406…パケット送信部(送信部), 407…位相比較器, 408…LPF, 409…PI制御器, 410…VCO, 411…カウンタ, 501…パケットカウンタ, 502…カウンタ最大値モニタ部, 503…到着時カウンタ値モニタ部, 504…遅延算出部, 601…パケットカウンタ, 602…カウンタ最大値モニタ部, 603…到着時カウンタ値モニタ部, 604…遅延算出部, 701…パケット解析部, 702…パケット生成部, 703…オフセット計算部, 704…時刻調整部, 800…エミュレーションノード(中継装置), 801…パケット受信部, 803…遅延計測部, 804…クロック部, 805…TC処理部, 806…パケット送信部
【特許請求の範囲】
【請求項1】
互いに通信するマスタノード及びスレーブノードと、前記マスタノード及びスレーブノード間の通信を中継する中継装置とを備え、スレーブノードにおける時刻をマスタノードにおける時刻に同期させる時刻同期システムであって、
前記マスタノードは、
前記スレーブノードに対し制御メッセージを送信する送信部と、
前記スレーブノードから制御メッセージを受信する受信部と、
を備え、
前記マスタノード又は前記中継装置は、
前記スレーブノードから前記マスタノードへ送信される制御メッセージが通信経路において受けたキューイング遅延を表す第一遅延量を計測する第一遅延計測部と、
前記第一遅延計測部によって計測された前記第一遅延量を前記スレーブノードに通知する通知部と、
を備え、
前記スレーブノード又は前記中継装置は、
前記マスタノードから前記スレーブノードへ送信される制御メッセージが通信経路において受けたキューイング遅延を表す第二遅延量を計測する第二遅延計測部、
を備え、
前記スレーブノードは、
前記マスタノードに対し制御メッセージを送信する送信部と、
前記マスタノードから前記制御メッセージを受信する受信部と、
前記マスタノードから通知された前記第一遅延量と、前記第二遅延計測部によって計測された前記第二遅延量とを用いて、前記スレーブノードにおける時刻と前記マスタノードにおける時刻との差分を計算し、前記スレーブノードにおける時刻を前記マスタノードにおける時刻に同期させる時刻同期制御部と、
を備えることを特徴とする時刻同期システム。
【請求項2】
前記第一遅延計測部又は前記第二遅延計測部は、自装置において受信された前記制御メッセージのパケットの量と、定期的に読み出されるパケットの量とに基づいて、前記第一遅延量又は前記第二遅延量を計測することを特徴とする請求項1に記載の時刻同期システム。
【請求項3】
前記第一遅延計測部又は前記第二遅延計測部は、自装置において受信された前記制御メッセージを蓄積するバッファを備え、前記制御メッセージが前記バッファに蓄積されたタイミングと、前記バッファから前記制御メッセージが定期的に読み出されるタイミングとに基づいて、前記第一遅延量又は前記第二遅延量を計測することを特徴とする請求項1に記載の時刻同期システム。
【請求項4】
前記マスタノードの前記通知部は、前記制御メッセージが前記マスタノードにおいて受信された時刻を表す受信時刻から前記第一遅延量を減算した結果を表す補正時刻を算出し、前記制御メッセージに予め設けられている前記受信時刻を格納するためのフィールドに前記補正時刻を格納することによって通知を行うことを特徴とする請求項1〜3のいずれか一項に記載の時刻同期システム。
【請求項5】
マスタノードと通信し、前記マスタノードに対し制御メッセージを送信する送信部と、前記マスタノードから制御メッセージを受信する受信部と、前記マスタノードから送信される前記制御メッセージが通信経路において受けたキューイング遅延を表す第二遅延量を計測する第二遅延計測部と、前記マスタノードから通知される前記第一遅延量と、前記第二遅延計測部によって計測された前記第二遅延量とを用いて、時刻を前記マスタノードにおける時刻に同期させる時刻同期制御部と、を備えるスレーブノードを有する時刻同期システムに具備されるマスタノードであって、
前記スレーブノードに対し制御メッセージを送信する送信部と、
前記スレーブノードから制御メッセージを受信する受信部と、
前記スレーブノードから前記マスタノードへ送信される制御メッセージが通信経路において受けたキューイング遅延を表す第一遅延量を計測する第一遅延計測部と、
前記第一遅延計測部によって計測された前記第一遅延量を前記スレーブノードに通知する通知部と、
を備えること特徴とするマスタノード。
【請求項6】
スレーブノードと通信し、前記スレーブノードに対し制御メッセージを送信する送信部と、前記スレーブノードから制御メッセージを受信する受信部と、前記スレーブノードから送信される制御メッセージが通信経路において受けたキューイング遅延を表す第一遅延量を計測する第一遅延計測部と、前記第一遅延計測部によって計測された前記第一遅延量を通知する通知部と、を備えるマスタノードを有する時刻同期システムに具備されるスレーブノードであって、
前記マスタノードに対し制御メッセージを送信する送信部と、
前記マスタノードから前記制御メッセージを受信する受信部と、
前記マスタノードから前記スレーブノードへ送信される制御メッセージが通信経路において受けたキューイング遅延を表す第二遅延量を計測する第二遅延計測部と、
前記マスタノードから通知された前記第一遅延量と、自装置の前記第二遅延計測部によって計測された前記第二遅延量とを用いて、前記スレーブノードにおける時刻と前記マスタノードにおける時刻との差分を計算し、前記スレーブノードにおける時刻を前記マスタノードにおける時刻に同期させる時刻同期制御部と、
を備えることを特徴とするスレーブノード。
【請求項7】
マスタノードと、時刻を前記マスタノードの時刻に同期させるスレーブノードと、の間の通信を中継する中継装置であって、
前記スレーブノードから前記マスタノードへ送信される制御メッセージが通信経路において受けたキューイング遅延を表す第一遅延量を計測する第一遅延計測部と、
前記マスタノードから前記スレーブノードへ送信される制御メッセージが通信経路において受けたキューイング遅延を表す第二遅延量を計測し、前記第一遅延量と、計測された前記第二遅延量とを用いて、前記スレーブノードにおける時刻と前記マスタノードにおける時刻との差分を計算し、前記スレーブノードにおける時刻を前記マスタノードにおける時刻に同期させる前記スレーブノードに対し、前記第一遅延計測部によって計測された前記第一遅延量を通知する通知部と、
を備える中継装置。
【請求項8】
マスタノードと、時刻を前記マスタノードの時刻に同期させるスレーブノードと、の間の通信を中継する中継装置であって、
前記マスタノードから前記スレーブノードへ送信される制御メッセージが通信経路において受けたキューイング遅延を表す第二遅延量を計測する第二遅延計測部と、
前記スレーブノードから前記マスタノードへ送信される制御メッセージが通信経路において受けたキューイング遅延を表す第一遅延量と、前記第二遅延量とを用いて、前記スレーブノードにおける時刻と前記マスタノードにおける時刻との差分を計算し、前記スレーブノードにおける時刻を前記マスタノードにおける時刻に同期させる前記スレーブノードに対し、前記第二遅延計測部によって計測された前記第二遅延量を通知する通知部と、
を備える中継装置。
【請求項9】
互いに通信するマスタノード及びスレーブノードと、前記マスタノード及びスレーブノード間の通信を中継する中継装置とを備え、スレーブノードにおける時刻をマスタノードにおける時刻に同期させる時刻同期システムが行う時刻同期方法であって、
前記マスタノードが、前記スレーブノードに対し制御メッセージを送信する送信ステップと、
前記マスタノードが、前記スレーブノードから制御メッセージを受信する受信ステップと、
前記マスタノード又は前記中継装置が、前記スレーブノードから前記マスタノードへ送信される制御メッセージが通信経路において受けたキューイング遅延を表す第一遅延量を計測する第一遅延計測ステップと、
前記マスタノード又は前記中継装置が、前記第一遅延計測ステップによって計測された前記第一遅延量を前記スレーブノードに通知する通知ステップと、
前記スレーブノードが、前記マスタノードに対し制御メッセージを送信する送信ステップと、
前記スレーブノードが、前記マスタノードから前記制御メッセージを受信する受信ステップと、
前記スレーブノード又は前記中継装置が、前記マスタノードから前記スレーブノードへ送信される制御メッセージが通信経路において受けたキューイング遅延を表す第二遅延量を計測する第二遅延計測ステップと、
前記スレーブノードが、前記マスタノードから通知された前記第一遅延量と、前記第二遅延計測ステップによって計測された前記第二遅延量とを用いて、前記スレーブノードにおける時刻と前記マスタノードにおける時刻との差分を計算し、前記スレーブノードにおける時刻を前記マスタノードにおける時刻に同期させる時刻同期制御ステップと、
を備えることを特徴とする時刻同期方法。
【請求項10】
互いに通信するマスタノード及びスレーブノードと、前記マスタノード及びスレーブノード間の通信を中継する中継装置とを備え、スレーブノードにおける時刻をマスタノードにおける時刻に同期させる時刻同期システムとして、前記マスタノードに相当する第一のコンピュータ、前記スレーブノードに相当する第二のコンピュータ、及び前記中継装置に相当する第三のコンピュータを動作させるための時刻同期用プログラムであって、
前記第一のコンピュータに対し、
前記スレーブノードに対し制御メッセージを送信する送信ステップと、
前記スレーブノードから制御メッセージを受信する受信ステップと、
を実行させ、
前記第一のコンピュータ又は前記第三のコンピュータに対し、
前記スレーブノードから前記マスタノードへ送信される制御メッセージが通信経路において受けたキューイング遅延を表す第一遅延量を計測する第一遅延計測ステップと、
前記第一遅延計測ステップによって計測された前記第一遅延量を前記スレーブノードに通知する通知ステップと、
を実行させ、
前記第二のコンピュータ又は前記第三のコンピュータに対し、
前記マスタノードから前記スレーブノードへ送信される制御メッセージが通信経路において受けたキューイング遅延を表す第二遅延量を計測する第二遅延計測ステップ、
を実行させ、
前記第二のコンピュータに対し、
前記マスタノードに対し制御メッセージを送信する送信ステップと、
前記マスタノードから前記制御メッセージを受信する受信ステップと、
前記マスタノードから通知された前記第一遅延量と、前記第二遅延計測ステップによって計測された前記第二遅延量とを用いて、前記スレーブノードにおける時刻と前記マスタノードにおける時刻との差分を計算し、前記スレーブノードにおける時刻を前記マスタノードにおける時刻に同期させる時刻同期制御ステップと、
を実行させることを特徴とする時刻同期用プログラム。
【請求項1】
互いに通信するマスタノード及びスレーブノードと、前記マスタノード及びスレーブノード間の通信を中継する中継装置とを備え、スレーブノードにおける時刻をマスタノードにおける時刻に同期させる時刻同期システムであって、
前記マスタノードは、
前記スレーブノードに対し制御メッセージを送信する送信部と、
前記スレーブノードから制御メッセージを受信する受信部と、
を備え、
前記マスタノード又は前記中継装置は、
前記スレーブノードから前記マスタノードへ送信される制御メッセージが通信経路において受けたキューイング遅延を表す第一遅延量を計測する第一遅延計測部と、
前記第一遅延計測部によって計測された前記第一遅延量を前記スレーブノードに通知する通知部と、
を備え、
前記スレーブノード又は前記中継装置は、
前記マスタノードから前記スレーブノードへ送信される制御メッセージが通信経路において受けたキューイング遅延を表す第二遅延量を計測する第二遅延計測部、
を備え、
前記スレーブノードは、
前記マスタノードに対し制御メッセージを送信する送信部と、
前記マスタノードから前記制御メッセージを受信する受信部と、
前記マスタノードから通知された前記第一遅延量と、前記第二遅延計測部によって計測された前記第二遅延量とを用いて、前記スレーブノードにおける時刻と前記マスタノードにおける時刻との差分を計算し、前記スレーブノードにおける時刻を前記マスタノードにおける時刻に同期させる時刻同期制御部と、
を備えることを特徴とする時刻同期システム。
【請求項2】
前記第一遅延計測部又は前記第二遅延計測部は、自装置において受信された前記制御メッセージのパケットの量と、定期的に読み出されるパケットの量とに基づいて、前記第一遅延量又は前記第二遅延量を計測することを特徴とする請求項1に記載の時刻同期システム。
【請求項3】
前記第一遅延計測部又は前記第二遅延計測部は、自装置において受信された前記制御メッセージを蓄積するバッファを備え、前記制御メッセージが前記バッファに蓄積されたタイミングと、前記バッファから前記制御メッセージが定期的に読み出されるタイミングとに基づいて、前記第一遅延量又は前記第二遅延量を計測することを特徴とする請求項1に記載の時刻同期システム。
【請求項4】
前記マスタノードの前記通知部は、前記制御メッセージが前記マスタノードにおいて受信された時刻を表す受信時刻から前記第一遅延量を減算した結果を表す補正時刻を算出し、前記制御メッセージに予め設けられている前記受信時刻を格納するためのフィールドに前記補正時刻を格納することによって通知を行うことを特徴とする請求項1〜3のいずれか一項に記載の時刻同期システム。
【請求項5】
マスタノードと通信し、前記マスタノードに対し制御メッセージを送信する送信部と、前記マスタノードから制御メッセージを受信する受信部と、前記マスタノードから送信される前記制御メッセージが通信経路において受けたキューイング遅延を表す第二遅延量を計測する第二遅延計測部と、前記マスタノードから通知される前記第一遅延量と、前記第二遅延計測部によって計測された前記第二遅延量とを用いて、時刻を前記マスタノードにおける時刻に同期させる時刻同期制御部と、を備えるスレーブノードを有する時刻同期システムに具備されるマスタノードであって、
前記スレーブノードに対し制御メッセージを送信する送信部と、
前記スレーブノードから制御メッセージを受信する受信部と、
前記スレーブノードから前記マスタノードへ送信される制御メッセージが通信経路において受けたキューイング遅延を表す第一遅延量を計測する第一遅延計測部と、
前記第一遅延計測部によって計測された前記第一遅延量を前記スレーブノードに通知する通知部と、
を備えること特徴とするマスタノード。
【請求項6】
スレーブノードと通信し、前記スレーブノードに対し制御メッセージを送信する送信部と、前記スレーブノードから制御メッセージを受信する受信部と、前記スレーブノードから送信される制御メッセージが通信経路において受けたキューイング遅延を表す第一遅延量を計測する第一遅延計測部と、前記第一遅延計測部によって計測された前記第一遅延量を通知する通知部と、を備えるマスタノードを有する時刻同期システムに具備されるスレーブノードであって、
前記マスタノードに対し制御メッセージを送信する送信部と、
前記マスタノードから前記制御メッセージを受信する受信部と、
前記マスタノードから前記スレーブノードへ送信される制御メッセージが通信経路において受けたキューイング遅延を表す第二遅延量を計測する第二遅延計測部と、
前記マスタノードから通知された前記第一遅延量と、自装置の前記第二遅延計測部によって計測された前記第二遅延量とを用いて、前記スレーブノードにおける時刻と前記マスタノードにおける時刻との差分を計算し、前記スレーブノードにおける時刻を前記マスタノードにおける時刻に同期させる時刻同期制御部と、
を備えることを特徴とするスレーブノード。
【請求項7】
マスタノードと、時刻を前記マスタノードの時刻に同期させるスレーブノードと、の間の通信を中継する中継装置であって、
前記スレーブノードから前記マスタノードへ送信される制御メッセージが通信経路において受けたキューイング遅延を表す第一遅延量を計測する第一遅延計測部と、
前記マスタノードから前記スレーブノードへ送信される制御メッセージが通信経路において受けたキューイング遅延を表す第二遅延量を計測し、前記第一遅延量と、計測された前記第二遅延量とを用いて、前記スレーブノードにおける時刻と前記マスタノードにおける時刻との差分を計算し、前記スレーブノードにおける時刻を前記マスタノードにおける時刻に同期させる前記スレーブノードに対し、前記第一遅延計測部によって計測された前記第一遅延量を通知する通知部と、
を備える中継装置。
【請求項8】
マスタノードと、時刻を前記マスタノードの時刻に同期させるスレーブノードと、の間の通信を中継する中継装置であって、
前記マスタノードから前記スレーブノードへ送信される制御メッセージが通信経路において受けたキューイング遅延を表す第二遅延量を計測する第二遅延計測部と、
前記スレーブノードから前記マスタノードへ送信される制御メッセージが通信経路において受けたキューイング遅延を表す第一遅延量と、前記第二遅延量とを用いて、前記スレーブノードにおける時刻と前記マスタノードにおける時刻との差分を計算し、前記スレーブノードにおける時刻を前記マスタノードにおける時刻に同期させる前記スレーブノードに対し、前記第二遅延計測部によって計測された前記第二遅延量を通知する通知部と、
を備える中継装置。
【請求項9】
互いに通信するマスタノード及びスレーブノードと、前記マスタノード及びスレーブノード間の通信を中継する中継装置とを備え、スレーブノードにおける時刻をマスタノードにおける時刻に同期させる時刻同期システムが行う時刻同期方法であって、
前記マスタノードが、前記スレーブノードに対し制御メッセージを送信する送信ステップと、
前記マスタノードが、前記スレーブノードから制御メッセージを受信する受信ステップと、
前記マスタノード又は前記中継装置が、前記スレーブノードから前記マスタノードへ送信される制御メッセージが通信経路において受けたキューイング遅延を表す第一遅延量を計測する第一遅延計測ステップと、
前記マスタノード又は前記中継装置が、前記第一遅延計測ステップによって計測された前記第一遅延量を前記スレーブノードに通知する通知ステップと、
前記スレーブノードが、前記マスタノードに対し制御メッセージを送信する送信ステップと、
前記スレーブノードが、前記マスタノードから前記制御メッセージを受信する受信ステップと、
前記スレーブノード又は前記中継装置が、前記マスタノードから前記スレーブノードへ送信される制御メッセージが通信経路において受けたキューイング遅延を表す第二遅延量を計測する第二遅延計測ステップと、
前記スレーブノードが、前記マスタノードから通知された前記第一遅延量と、前記第二遅延計測ステップによって計測された前記第二遅延量とを用いて、前記スレーブノードにおける時刻と前記マスタノードにおける時刻との差分を計算し、前記スレーブノードにおける時刻を前記マスタノードにおける時刻に同期させる時刻同期制御ステップと、
を備えることを特徴とする時刻同期方法。
【請求項10】
互いに通信するマスタノード及びスレーブノードと、前記マスタノード及びスレーブノード間の通信を中継する中継装置とを備え、スレーブノードにおける時刻をマスタノードにおける時刻に同期させる時刻同期システムとして、前記マスタノードに相当する第一のコンピュータ、前記スレーブノードに相当する第二のコンピュータ、及び前記中継装置に相当する第三のコンピュータを動作させるための時刻同期用プログラムであって、
前記第一のコンピュータに対し、
前記スレーブノードに対し制御メッセージを送信する送信ステップと、
前記スレーブノードから制御メッセージを受信する受信ステップと、
を実行させ、
前記第一のコンピュータ又は前記第三のコンピュータに対し、
前記スレーブノードから前記マスタノードへ送信される制御メッセージが通信経路において受けたキューイング遅延を表す第一遅延量を計測する第一遅延計測ステップと、
前記第一遅延計測ステップによって計測された前記第一遅延量を前記スレーブノードに通知する通知ステップと、
を実行させ、
前記第二のコンピュータ又は前記第三のコンピュータに対し、
前記マスタノードから前記スレーブノードへ送信される制御メッセージが通信経路において受けたキューイング遅延を表す第二遅延量を計測する第二遅延計測ステップ、
を実行させ、
前記第二のコンピュータに対し、
前記マスタノードに対し制御メッセージを送信する送信ステップと、
前記マスタノードから前記制御メッセージを受信する受信ステップと、
前記マスタノードから通知された前記第一遅延量と、前記第二遅延計測ステップによって計測された前記第二遅延量とを用いて、前記スレーブノードにおける時刻と前記マスタノードにおける時刻との差分を計算し、前記スレーブノードにおける時刻を前記マスタノードにおける時刻に同期させる時刻同期制御ステップと、
を実行させることを特徴とする時刻同期用プログラム。
【図1】
【図2】
【図3】
【図4】
【図5】
【図6】
【図7】
【図8】
【図9】
【図10】
【図11】
【図12】
【図13】
【図14】
【図15】
【図16】
【図17】
【図18】
【図19】
【図20】
【図21】
【図22】
【図23】
【図24】
【図25】
【図26】
【図27】
【図28】
【図29】
【図30】
【図31】
【図32】
【図33】
【図2】
【図3】
【図4】
【図5】
【図6】
【図7】
【図8】
【図9】
【図10】
【図11】
【図12】
【図13】
【図14】
【図15】
【図16】
【図17】
【図18】
【図19】
【図20】
【図21】
【図22】
【図23】
【図24】
【図25】
【図26】
【図27】
【図28】
【図29】
【図30】
【図31】
【図32】
【図33】
【公開番号】特開2011−135482(P2011−135482A)
【公開日】平成23年7月7日(2011.7.7)
【国際特許分類】
【出願番号】特願2009−294971(P2009−294971)
【出願日】平成21年12月25日(2009.12.25)
【出願人】(000004237)日本電気株式会社 (19,353)
【Fターム(参考)】
【公開日】平成23年7月7日(2011.7.7)
【国際特許分類】
【出願日】平成21年12月25日(2009.12.25)
【出願人】(000004237)日本電気株式会社 (19,353)
【Fターム(参考)】
[ Back to top ]