(57)【特許請求の範囲】
【請求項１】
互いに通信するマスタノード及びスレーブノードと、前記マスタノード及びスレーブノード間の通信を中継する中継装置とを備え、スレーブノードにおける時刻をマスタノードにおける時刻に同期させる時刻同期システムであって、
前記マスタノードは、
前記スレーブノードに対し制御メッセージを送信する送信部と、
前記スレーブノードから制御メッセージを受信する受信部と、
を備え、
前記マスタノード又は前記中継装置は、
前記スレーブノードから前記マスタノードへ送信される制御メッセージが通信経路において受けたキューイング遅延を表す第一遅延量を計測する第一遅延計測部と、
前記第一遅延計測部によって計測された前記第一遅延量を前記スレーブノードに通知する通知部と、
を備え、
前記スレーブノード又は前記中継装置は、
前記マスタノードから前記スレーブノードへ送信される制御メッセージが通信経路において受けたキューイング遅延を表す第二遅延量を計測する第二遅延計測部、
を備え、
前記スレーブノードは、
前記マスタノードに対し制御メッセージを送信する送信部と、
前記マスタノードから前記制御メッセージを受信する受信部と、
前記マスタノードから通知された前記第一遅延量と、前記第二遅延計測部によって計測された前記第二遅延量とを用いて、前記スレーブノードにおける時刻と前記マスタノードにおける時刻との差分を計算し、前記スレーブノードにおける時刻を前記マスタノードにおける時刻に同期させる時刻同期制御部と、
を備えることを特徴とする時刻同期システム。
【請求項２】
前記第一遅延計測部又は前記第二遅延計測部は、自装置において受信された前記制御メッセージのパケットの量と、定期的に読み出されるパケットの量とに基づいて、前記第一遅延量又は前記第二遅延量を計測することを特徴とする請求項１に記載の時刻同期システム。
【請求項３】
前記第一遅延計測部又は前記第二遅延計測部は、自装置において受信された前記制御メッセージを蓄積するバッファを備え、前記制御メッセージが前記バッファに蓄積されたタイミングと、前記バッファから前記制御メッセージが定期的に読み出されるタイミングとに基づいて、前記第一遅延量又は前記第二遅延量を計測することを特徴とする請求項１に記載の時刻同期システム。
【請求項４】
前記マスタノードの前記通知部は、前記制御メッセージが前記マスタノードにおいて受信された時刻を表す受信時刻から前記第一遅延量を減算した結果を表す補正時刻を算出し、前記制御メッセージに予め設けられている前記受信時刻を格納するためのフィールドに前記補正時刻を格納することによって通知を行うことを特徴とする請求項１〜３のいずれか一項に記載の時刻同期システム。
【請求項５】
マスタノードと通信し、前記マスタノードに対し制御メッセージを送信する送信部と、前記マスタノードから制御メッセージを受信する受信部と、前記マスタノードから送信される前記制御メッセージが通信経路において受けたキューイング遅延を表す第二遅延量を計測する第二遅延計測部と、前記マスタノードから通知される前記第一遅延量と、前記第二遅延計測部によって計測された前記第二遅延量とを用いて、時刻を前記マスタノードにおける時刻に同期させる時刻同期制御部と、を備えるスレーブノードを有する時刻同期システムに具備されるマスタノードであって、
前記スレーブノードに対し制御メッセージを送信する送信部と、
前記スレーブノードから制御メッセージを受信する受信部と、
前記スレーブノードから前記マスタノードへ送信される制御メッセージが通信経路において受けたキューイング遅延を表す第一遅延量を計測する第一遅延計測部と、
前記第一遅延計測部によって計測された前記第一遅延量を前記スレーブノードに通知する通知部と、
を備えること特徴とするマスタノード。
【請求項６】
スレーブノードと通信し、前記スレーブノードに対し制御メッセージを送信する送信部と、前記スレーブノードから制御メッセージを受信する受信部と、前記スレーブノードから送信される制御メッセージが通信経路において受けたキューイング遅延を表す第一遅延量を計測する第一遅延計測部と、前記第一遅延計測部によって計測された前記第一遅延量を通知する通知部と、を備えるマスタノードを有する時刻同期システムに具備されるスレーブノードであって、
前記マスタノードに対し制御メッセージを送信する送信部と、
前記マスタノードから前記制御メッセージを受信する受信部と、
前記マスタノードから前記スレーブノードへ送信される制御メッセージが通信経路において受けたキューイング遅延を表す第二遅延量を計測する第二遅延計測部と、
前記マスタノードから通知された前記第一遅延量と、自装置の前記第二遅延計測部によって計測された前記第二遅延量とを用いて、前記スレーブノードにおける時刻と前記マスタノードにおける時刻との差分を計算し、前記スレーブノードにおける時刻を前記マスタノードにおける時刻に同期させる時刻同期制御部と、
を備えることを特徴とするスレーブノード。
【請求項７】
マスタノードと、時刻を前記マスタノードの時刻に同期させるスレーブノードと、の間の通信を中継する中継装置であって、
前記スレーブノードから前記マスタノードへ送信される制御メッセージが通信経路において受けたキューイング遅延を表す第一遅延量を計測する第一遅延計測部と、
前記マスタノードから前記スレーブノードへ送信される制御メッセージが通信経路において受けたキューイング遅延を表す第二遅延量を計測し、前記第一遅延量と、計測された前記第二遅延量とを用いて、前記スレーブノードにおける時刻と前記マスタノードにおける時刻との差分を計算し、前記スレーブノードにおける時刻を前記マスタノードにおける時刻に同期させる前記スレーブノードに対し、前記第一遅延計測部によって計測された前記第一遅延量を通知する通知部と、
を備える中継装置。
【請求項８】
マスタノードと、時刻を前記マスタノードの時刻に同期させるスレーブノードと、の間の通信を中継する中継装置であって、
前記マスタノードから前記スレーブノードへ送信される制御メッセージが通信経路において受けたキューイング遅延を表す第二遅延量を計測する第二遅延計測部と、
前記スレーブノードから前記マスタノードへ送信される制御メッセージが通信経路において受けたキューイング遅延を表す第一遅延量と、前記第二遅延量とを用いて、前記スレーブノードにおける時刻と前記マスタノードにおける時刻との差分を計算し、前記スレーブノードにおける時刻を前記マスタノードにおける時刻に同期させる前記スレーブノードに対し、前記第二遅延計測部によって計測された前記第二遅延量を通知する通知部と、
を備える中継装置。
【請求項９】
互いに通信するマスタノード及びスレーブノードと、前記マスタノード及びスレーブノード間の通信を中継する中継装置とを備え、スレーブノードにおける時刻をマスタノードにおける時刻に同期させる時刻同期システムが行う時刻同期方法であって、
前記マスタノードが、前記スレーブノードに対し制御メッセージを送信する送信ステップと、
前記マスタノードが、前記スレーブノードから制御メッセージを受信する受信ステップと、
前記マスタノード又は前記中継装置が、前記スレーブノードから前記マスタノードへ送信される制御メッセージが通信経路において受けたキューイング遅延を表す第一遅延量を計測する第一遅延計測ステップと、
前記マスタノード又は前記中継装置が、前記第一遅延計測ステップによって計測された前記第一遅延量を前記スレーブノードに通知する通知ステップと、
前記スレーブノードが、前記マスタノードに対し制御メッセージを送信する送信ステップと、
前記スレーブノードが、前記マスタノードから前記制御メッセージを受信する受信ステップと、
前記スレーブノード又は前記中継装置が、前記マスタノードから前記スレーブノードへ送信される制御メッセージが通信経路において受けたキューイング遅延を表す第二遅延量を計測する第二遅延計測ステップと、
前記スレーブノードが、前記マスタノードから通知された前記第一遅延量と、前記第二遅延計測ステップによって計測された前記第二遅延量とを用いて、前記スレーブノードにおける時刻と前記マスタノードにおける時刻との差分を計算し、前記スレーブノードにおける時刻を前記マスタノードにおける時刻に同期させる時刻同期制御ステップと、
を備えることを特徴とする時刻同期方法。
【請求項１０】
互いに通信するマスタノード及びスレーブノードと、前記マスタノード及びスレーブノード間の通信を中継する中継装置とを備え、スレーブノードにおける時刻をマスタノードにおける時刻に同期させる時刻同期システムとして、前記マスタノードに相当する第一のコンピュータ、前記スレーブノードに相当する第二のコンピュータ、及び前記中継装置に相当する第三のコンピュータを動作させるための時刻同期用プログラムであって、
前記第一のコンピュータに対し、
前記スレーブノードに対し制御メッセージを送信する送信ステップと、
前記スレーブノードから制御メッセージを受信する受信ステップと、
を実行させ、
前記第一のコンピュータ又は前記第三のコンピュータに対し、
前記スレーブノードから前記マスタノードへ送信される制御メッセージが通信経路において受けたキューイング遅延を表す第一遅延量を計測する第一遅延計測ステップと、
前記第一遅延計測ステップによって計測された前記第一遅延量を前記スレーブノードに通知する通知ステップと、
を実行させ、
前記第二のコンピュータ又は前記第三のコンピュータに対し、
前記マスタノードから前記スレーブノードへ送信される制御メッセージが通信経路において受けたキューイング遅延を表す第二遅延量を計測する第二遅延計測ステップ、
を実行させ、
前記第二のコンピュータに対し、
前記マスタノードに対し制御メッセージを送信する送信ステップと、
前記マスタノードから前記制御メッセージを受信する受信ステップと、
前記マスタノードから通知された前記第一遅延量と、前記第二遅延計測ステップによって計測された前記第二遅延量とを用いて、前記スレーブノードにおける時刻と前記マスタノードにおける時刻との差分を計算し、前記スレーブノードにおける時刻を前記マスタノードにおける時刻に同期させる時刻同期制御ステップと、
を実行させることを特徴とする時刻同期用プログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、通信を行うノード間で時刻の同期を行うための技術に関する。
【背景技術】
【０００２】
従来、モバイルバックホールやファクトリオートメーション、家庭内ＡＶ用ＬＡＮ（Local Area Network）などで高精度の時刻同期が求められている。このような背景の元で、時刻同期を行うための技術の標準化が進められている。例えば、パケットネットワークにおいて、マイクロ秒未満の精度で時刻同期を行なうための技術としてIEEE1588がある（非特許文献１参照）。
【０００３】
IEEE1588に規定されている技術では、マスタ／スレーブノード間でのメッセージ交換によってタイムスタンプ情報が交換される。スレーブノードは、マスタ及びスレーブノードにおけるメッセージ送受信時刻から、マスタノードに対するスレーブノードの時刻のずれ（Offset）を計算する。そして、スレーブノードは、このOffsetに基づいてスレーブノードの時刻を補正し、スレーブノードの時刻をマスタノードに同期させる。
【０００４】
IEEE1588では、Offsetを求めるために、マスタノードからスレーブノードへの伝送遅延（MS_Delay）と、スレーブノードからマスタノードへの伝送遅延（SM_Delay）は等しいと仮定する。しかしながら、パケットネットワークではルータ、スイッチ等の中継ノードにおけるキューイング遅延等により、MS_DelayとSM_Delayとは異なる値となる可能性が高い。そのため、MS_DelayとSM_Delayとが等しいという仮定により、Offsetに誤差が生じてしまい、時刻同期精度が劣化してしまっていた。
【０００５】
このような問題を解決するために、IEEE1588 version 2において、Transparent Clock （TC）機能が規定されている。なお、以降の説明では、このTC機能を利用したIEEE1588をIEEE1588v2 w/TCと記す。
【先行技術文献】
【非特許文献】
【０００６】
【非特許文献１】IEEE P1588 TM/D1, “Draft Standard for a Precision Clock Synchronization Protocol for Networked Measurement and Control Systems”, June, 2007.
【発明の概要】
【発明が解決しようとする課題】
【０００７】
しかしながら、IEEE1588v2 w/TCでは、高精度を実現するためにはより多くの中継ノード（究極的には全中継ノード）がTC機能を有する必要がある。一方、既にネットワークに配置されている既存ノードはTC機能を持たないものが大部分を占める。そのため、IEEE1588v2 w/TCを実現するためには、中継ノードの置き換えや機能追加が必要となる。したがって、IEEE1588v2 w/TCの実現は、コストや手間などの観点から非常に困難であるという問題がある。
上記事情に鑑み、本発明は、導入に要するコストを抑え、高精度の時刻同期を実現する技術を提供することを目的とする。
【課題を解決するための手段】
【０００８】
本発明の一態様は、互いに通信するマスタノード及びスレーブノードと、前記マスタノード及びスレーブノード間の通信を中継する中継装置とを備え、スレーブノードにおける時刻をマスタノードにおける時刻に同期させる時刻同期システムであって、前記マスタノードは、前記スレーブノードに対し制御メッセージを送信する送信部と、前記スレーブノードから制御メッセージを受信する受信部と、を備え、前記マスタノード又は前記中継装置は、前記スレーブノードから前記マスタノードへ送信される制御メッセージが通信経路において受けたキューイング遅延を表す第一遅延量を計測する第一遅延計測部と、前記第一遅延計測部によって計測された前記第一遅延量を前記スレーブノードに通知する通知部と、を備え、前記スレーブノード又は前記中継装置は、前記マスタノードから前記スレーブノードへ送信される制御メッセージが通信経路において受けたキューイング遅延を表す第二遅延量を計測する第二遅延計測部、を備え、前記スレーブノードは、前記マスタノードに対し制御メッセージを送信する送信部と、前記マスタノードから前記制御メッセージを受信する受信部と、前記マスタノードから通知された前記第一遅延量と、前記第二遅延計測部によって計測された前記第二遅延量とを用いて、前記スレーブノードにおける時刻と前記マスタノードにおける時刻との差分を計算し、前記スレーブノードにおける時刻を前記マスタノードにおける時刻に同期させる時刻同期制御部と、を備えることを特徴とする。
【０００９】
本発明の一態様は、マスタノードと通信し、前記マスタノードに対し制御メッセージを送信する送信部と、前記マスタノードから制御メッセージを受信する受信部と、前記マスタノードから送信される前記制御メッセージが通信経路において受けたキューイング遅延を表す第二遅延量を計測する第二遅延計測部と、前記マスタノードから通知される前記第一遅延量と、前記第二遅延計測部によって計測された前記第二遅延量とを用いて、時刻を前記マスタノードにおける時刻に同期させる時刻同期制御部と、を備えるスレーブノードを有する時刻同期システムに具備されるマスタノードであって、前記スレーブノードに対し制御メッセージを送信する送信部と、前記スレーブノードから制御メッセージを受信する受信部と、前記スレーブノードから前記マスタノードへ送信される制御メッセージが通信経路において受けたキューイング遅延を表す第一遅延量を計測する第一遅延計測部と、前記第一遅延計測部によって計測された前記第一遅延量を前記スレーブノードに通知する通知部と、を備えること特徴とする。
【００１０】
本発明の一態様は、スレーブノードと通信し、前記スレーブノードに対し制御メッセージを送信する送信部と、前記スレーブノードから制御メッセージを受信する受信部と、前記スレーブノードから送信される制御メッセージが通信経路において受けたキューイング遅延を表す第一遅延量を計測する第一遅延計測部と、前記第一遅延計測部によって計測された前記第一遅延量を通知する通知部と、を備えるマスタノードを有する時刻同期システムに具備されるスレーブノードであって、前記マスタノードに対し制御メッセージを送信する送信部と、前記マスタノードから前記制御メッセージを受信する受信部と、前記マスタノードから前記スレーブノードへ送信される制御メッセージが通信経路において受けたキューイング遅延を表す第二遅延量を計測する第二遅延計測部と、前記マスタノードから通知された前記第一遅延量と、自装置の前記第二遅延計測部によって計測された前記第二遅延量とを用いて、前記スレーブノードにおける時刻と前記マスタノードにおける時刻との差分を計算し、前記スレーブノードにおける時刻を前記マスタノードにおける時刻に同期させる時刻同期制御部と、を備えることを特徴とする。
【００１１】
本発明の一態様は、マスタノードと、時刻を前記マスタノードの時刻に同期させるスレーブノードと、の間の通信を中継する中継装置であって、前記スレーブノードから前記マスタノードへ送信される制御メッセージが通信経路において受けたキューイング遅延を表す第一遅延量を計測する第一遅延計測部と、前記マスタノードから前記スレーブノードへ送信される制御メッセージが通信経路において受けたキューイング遅延を表す第二遅延量を計測し、前記第一遅延量と、計測された前記第二遅延量とを用いて、前記スレーブノードにおける時刻と前記マスタノードにおける時刻との差分を計算し、前記スレーブノードにおける時刻を前記マスタノードにおける時刻に同期させる前記スレーブノードに対し、前記第一遅延計測部によって計測された前記第一遅延量を通知する通知部と、を備える。
【００１２】
本発明の一態様は、マスタノードと、時刻を前記マスタノードの時刻に同期させるスレーブノードと、の間の通信を中継する中継装置であって、前記マスタノードから前記スレーブノードへ送信される制御メッセージが通信経路において受けたキューイング遅延を表す第二遅延量を計測する第二遅延計測部と、前記スレーブノードから前記マスタノードへ送信される制御メッセージが通信経路において受けたキューイング遅延を表す第一遅延量と、前記第二遅延量とを用いて、前記スレーブノードにおける時刻と前記マスタノードにおける時刻との差分を計算し、前記スレーブノードにおける時刻を前記マスタノードにおける時刻に同期させる前記スレーブノードに対し、前記第二遅延計測部によって計測された前記第二遅延量を通知する通知部と、を備える。
【００１３】
本発明の一態様は、互いに通信するマスタノード及びスレーブノードと、前記マスタノード及びスレーブノード間の通信を中継する中継装置とを備え、スレーブノードにおける時刻をマスタノードにおける時刻に同期させる時刻同期システムが行う時刻同期方法であって、前記マスタノードが、前記スレーブノードに対し制御メッセージを送信する送信ステップと、前記マスタノードが、前記スレーブノードから制御メッセージを受信する受信ステップと、前記マスタノード又は前記中継装置が、前記スレーブノードから前記マスタノードへ送信される制御メッセージが通信経路において受けたキューイング遅延を表す第一遅延量を計測する第一遅延計測ステップと、前記マスタノード又は前記中継装置が、前記第一遅延計測ステップによって計測された前記第一遅延量を前記スレーブノードに通知する通知ステップと、前記スレーブノードが、前記マスタノードに対し制御メッセージを送信する送信ステップと、前記スレーブノードが、前記マスタノードから前記制御メッセージを受信する受信ステップと、前記スレーブノード又は前記中継装置が、前記マスタノードから前記スレーブノードへ送信される制御メッセージが通信経路において受けたキューイング遅延を表す第二遅延量を計測する第二遅延計測ステップと、前記スレーブノードが、前記マスタノードから通知された前記第一遅延量と、前記第二遅延計測ステップによって計測された前記第二遅延量とを用いて、前記スレーブノードにおける時刻と前記マスタノードにおける時刻との差分を計算し、前記スレーブノードにおける時刻を前記マスタノードにおける時刻に同期させる時刻同期制御ステップと、を備えることを特徴とする。
【００１４】
本発明の一態様は、互いに通信するマスタノード及びスレーブノードと、前記マスタノード及びスレーブノード間の通信を中継する中継装置とを備え、スレーブノードにおける時刻をマスタノードにおける時刻に同期させる時刻同期システムとして、前記マスタノードに相当する第一のコンピュータ、前記スレーブノードに相当する第二のコンピュータ、及び前記中継装置に相当する第三のコンピュータを動作させるための時刻同期用プログラムであって、前記第一のコンピュータに対し、前記スレーブノードに対し制御メッセージを送信する送信ステップと、前記スレーブノードから制御メッセージを受信する受信ステップと、を実行させ、前記第一のコンピュータ又は前記第三のコンピュータに対し、前記スレーブノードから前記マスタノードへ送信される制御メッセージが通信経路において受けたキューイング遅延を表す第一遅延量を計測する第一遅延計測ステップと、前記第一遅延計測ステップによって計測された前記第一遅延量を前記スレーブノードに通知する通知ステップと、を実行させ、前記第二のコンピュータ又は前記第三のコンピュータに対し、前記マスタノードから前記スレーブノードへ送信される制御メッセージが通信経路において受けたキューイング遅延を表す第二遅延量を計測する第二遅延計測ステップ、を実行させ、前記第二のコンピュータに対し、前記マスタノードに対し制御メッセージを送信する送信ステップと、前記マスタノードから前記制御メッセージを受信する受信ステップと、前記マスタノードから通知された前記第一遅延量と、前記第二遅延計測ステップによって計測された前記第二遅延量とを用いて、前記スレーブノードにおける時刻と前記マスタノードにおける時刻との差分を計算し、前記スレーブノードにおける時刻を前記マスタノードにおける時刻に同期させる時刻同期制御ステップと、を実行させることを特徴とする。
【発明の効果】
【００１５】
本発明により、導入に要するコストを抑え、高精度の時刻同期を実現することが可能となる。
【図面の簡単な説明】
【００１６】
【図１】IEEE1588の時刻同期アルゴリズムによる通信シーケンスを表すシーケンス図である。
【図２】IEEE1588及びIEEE1588v2 w/TCの時刻同期アルゴリズムの概略を表す概略図である。
【図３】第１実施形態における通信システムのシステム構成図である。
【図４】マスタノードの機能構成を表す機能ブロック図である。
【図５】遅延計測部の詳細な機能構成を表す機能ブロック図である。
【図６】パケットカウンタの動作の概略を表す概略図である。
【図７】スレーブノードの機能構成を表す機能ブロック図である。
【図８】遅延計測部の詳細な機能構成を表す機能ブロック図である。
【図９】時刻同期制御部の詳細な機能構成を表す機能ブロック図である。
【図１０】マスタノードによるマスタ第１処理の流れを表すフローチャートである。
【図１１】スレーブノードによるスレーブ第１処理の流れを表すフローチャートである。
【図１２】マスタノードによるマスタ第２処理の流れを表すフローチャートである。
【図１３】スレーブノードによるスレーブ第２処理の流れを表すフローチャートである。
【図１４】通信システムによる時刻同期処理の具体例を表すシーケンス図である。
【図１５】通信システムによる時刻同期処理の具体例を表すシーケンス図である。
【図１６】通信システムにおいて計測される遅延量の確率分布を表す図である。
【図１７】パケットバッファを用いて構成された場合の、遅延計測部の処理の概略を表す図である。
【図１８】第２実施形態におけるマスタノードの機能構成を表す機能ブロック図である。
【図１９】第２実施形態におけるスレーブノードの機能構成を表す機能ブロック図である。
【図２０】第２実施形態における時刻同期制御部の機能構成を表す機能ブロック図である。
【図２１】第２実施形態におけるマスタ第２処理の流れを表すフローチャートである。
【図２２】第２実施形態におけるスレーブ第２処理の流れを表すフローチャートである。
【図２３】第２実施形態における通信システムによる時刻同期処理の具体例を表すシーケンス図である。
【図２４】第３実施形態における通信システムのシステム構成図である。
【図２５】第３実施形態におけるマスタノードの機能構成を表す機能ブロック図である。
【図２６】第３実施形態におけるスレーブノードの機能構成を表す機能ブロック図である。
【図２７】時刻同期制御部の詳細な機能構成を表す機能ブロック図である。
【図２８】第３実施形態におけるエミュレーションノードの機能構成を表す機能ブロック図である。
【図２９】第３実施形態におけるスレーブ第１処理の流れを表すフローチャートである。
【図３０】第３実施形態におけるマスタ第２処理の流れを表すフローチャートである。
【図３１】第３実施形態におけるスレーブ第２処理の流れを表すフローチャートである。
【図３２】第３実施形態におけるエミュレーションノードによる処理の流れを表すフローチャートである。
【図３３】第３実施形態における通信システムによる時刻同期処理の具体例を表すシーケンス図である。
【発明を実施するための形態】
【００１７】
［IEEE1588］
まず、IEEE1588の時刻同期アルゴリズムについて説明する。図１は、IEEE1588の時刻同期アルゴリズムによる通信シーケンスを表すシーケンス図である。図１では、マスタノード１００とスレーブノード２００とが双方向通信を行っており、スレーブノード２００が定期的にマスタノード１００に時刻を同期させる。
【００１８】
マスタノード１００は、スレーブノード２００に対して、定期的にSyncメッセージを送信する（ステップＳ１００）。マスタノード１００は、このSyncメッセージの送信時刻（以下、「Sync送信時刻」という。）Tm(0)を記録する（ステップＳ１０１）。次に、マスタノード１００は、スレーブノード２００に対して、Follow_upメッセージを送信する。このとき、マスタノード１００は、Follow_upメッセージの中に、Sync送信時刻Tm(0)を格納する。
【００１９】
スレーブノード２００は、Syncメッセージを受信すると、この受信処理をトリガとしてSyncメッセージの受信時刻（以下、「Sync受信時刻」という。）Ts(0)を記録する（ステップＳ１０２）。次に、スレーブノード２００はFollow_upメッセージを受信し、Follow_upメッセージ中に格納されるSync送信時刻Tm(0)を抽出し記録する。次に、スレーブノード２００は、マスタノード１００に対して、Delay_Requestメッセージを送信する（ステップＳ１０４）。そして、スレーブノード２００は、このDelay_Requestメッセージの送信時刻（以下、「Delay送信時刻」という。）Ts(1)を記録する（ステップＳ１０５）。
【００２０】
マスタノード１００は、Delay_Requestメッセージを受信すると、この受信処理をトリガとしてDelay_Requestメッセージの受信時刻（以下、「Delay受信時刻」という。）Tm(1)を記録する（ステップＳ１０６）。次に、マスタノード１００は、スレーブノード２００に対してDelay_Responseメッセージを送信する（ステップＳ１０７）。このとき、マスタノード１００は、Delay_Responseメッセージの中に、Delay受信時刻Tm(1)を格納する。
【００２１】
スレーブノード２００は、Delay_Responseメッセージを受信すると、Delay_Responseメッセージ中に格納されるDelay受信時刻Tm(1)を抽出し記録する。
スレーブノード２００は、Sync送信時刻Tm(0)、Sync受信時刻Ts(0)に基づいて、以下の式１から、マスタノード１００における時刻（以下、「マスタ時刻」という。）とスレーブノード２００における時刻（以下、「スレーブ時刻」という。）との差分MS_Diffを算出する。
MS_Diff = Ts(0) - Tm(0) = MS_Delay + Offset  ・・・式１
【００２２】
また、スレーブノード２００は、Delay送信時刻Ts(1)、Delay受信時刻Tm(1)に基づいて、以下の式２から、スレーブ時刻とマスタ時刻との差分を求める。
SM_Diff = Tm(1) - Ts(1) = SM_Delay - Offset  ・・・式２
【００２３】
ここで、MS_Delayはマスタノード１００からスレーブノード２００への伝送遅延を表し、SM_Delayはスレーブノード２００からマスタノード１００への伝送遅延を表し、Offsetはマスタノード１００に対するスレーブノード２００の時刻オフセット（進み）を表す。なお、伝送遅延MS_Delay及びSM_Delayは、マスタノード１００とスレーブノード２００との間の伝播遅延と、マスタノード１００とスレーブノード２００との間のネットワーク上の中継ノードで生じるキューイング遅延から構成される。
【００２４】
以上のように、マスタノード１００に対するスレーブノード２００の時刻のずれであるOffsetに関して、式１及び式２の二つの式が得られる。しかし、この二つの式には、Offsetの他にMS_Delay及びSM_Delayという未知のパラメータが含まれている。したがって、三つの未知のパラメータに対し二つの式しか存在しないため、Offsetを算出することができない。そのため、IEEE1588では、マスタノード１００からスレーブノード２００への伝送遅延MS_Delayと、スレーブノード２００からマスタノード１００への伝送遅延SM_Delayとが等しく、いずれの値もDelayであると仮定して、上記の式１及び式２を以下の式３及び式４に変形する。
【００２５】
MS_Diff = Delay + Offset  ・・・式３
SM_Diff = Delay - Offset  ・・・式４
式３及び式４の連立方程式を解くことによって、以下の式５が導出される。
Offset = (MS_Diff - SM_Diff) / 2  ・・・式５
【００２６】
スレーブノード２００は、式５に基づいてOffsetを算出し、Offsetに基づいてスレーブ時刻を補正することによって、スレーブ時刻をマスタ時刻に同期させる。以上が、IEEE1588に規定される時刻同期アルゴリズムである。
【００２７】
［IEEE1588v2 w/TC］
次に、IEEE1588v2 w/TCの時刻同期アルゴリズムについて説明する。図２は、IEEE1588及びIEEE1588v2 w/TCの時刻同期アルゴリズムの概略を表す概略図である。図２Ａは、IEEE1588の時刻同期アルゴリズムの概略を表す。図２Ｂは、IEEE1588v2 w/TC の時刻同期アルゴリズムの概略を表す。図２Ａ及び図２ＢのＤ１〜Ｄ６は、それぞれ各中継ノードＲｅ１〜Ｒｅ３において発生する、矢印方向への伝送におけるキューイング遅延を表す。
【００２８】
IEEE1588v2 w/TCでは、各中継ノードＲｅ１〜Ｒｅ３はTC機能を備える。TC機能とは、制御メッセージ（IEEE1588メッセージ）のパケットのノード内滞在時間を計測し、その時間を制御パケットの所定のフィールドに記載し、累積加算していく機能である。なお、IEEE1588メッセージとは、具体的にはSyncメッセージ及びDelay_Requestメッセージである。IEEE1588v2 w/TCでは、TC機能により、制御パケットが中継ノードＲｅ１〜Ｒｅ３を経由するごとに、中継ノードＲｅ１〜Ｒｅ３での滞在時間がメッセージ内に累積加算される。そのため、スレーブノード２００は、マスタノード１００からスレーブノード２００へ向けた伝送における各中継ノードＲｅ１〜Ｒｅ３で生じたキューイング遅延の合計を正確に取得できる。同様に、マスタノード１００は、スレーブノード２００からマスタノード１００へ向けた伝送における各中継ノードＲｅ１〜Ｒｅ３で生じたキューイング遅延の合計を正確に取得できる。
【００２９】
マスタノード１００からスレーブノード２００へ向けた伝送におけるキューイング遅延の合計及び伝播遅延をそれぞれMS_Q、MS_Pとし、スレーブノード２００からマスタノード１００へ向けた伝送におけるキューイング遅延の合計及び伝播遅延をそれぞれSM_Q、SM_Pとすると、上述した式１及び式２は下記の式６及び式７に変形できる。
MS_Diff = MS_P + MS_Q + Offset  ・・・式６
SM_Diff = SM_P + SM_Q - Offset  ・・・式７
【００３０】
ここで、マスタノード１００からスレーブノード２００へ向けた伝送とスレーブノード２００からマスタノード１００へ向けた伝送のメッセージ伝送経路が双方向で等しい場合は、MS_P = SM_P = Propagation_Delayとなる。この場合、式６及び式７は、下記の式８及び式９のように変形できる。
MS_Diff = Propagation_Delay + MS_Q + Offset  ・・・式８
SM_Diff = Propagation_Delay + SM_Q - Offset  ・・・式９
【００３１】
そして、式８及び式９から、Offsetを算出するための式として下記の式１０を得ることができる。
Offset = {(MS_Diff - SM_Diff) - (MS_Q - SM_Q)} / 2  ・・・式１０
【００３２】
図２Ａに示すように、IEEE1588v2 w/TC ではないIEEE1588（以下、「Pure IEEE1588」ともいう。）では、各中継ノードＲｅ１〜Ｒｅ３で生じるキューイング遅延の合計は、双方向で等しいと仮定していた。すなわち、マスタノード１００からスレーブノード２００への伝送におけるキューイング遅延の合計（D1+D2+D3）と、スレーブノード２００からマスタノード１００への伝送におけるキューイング遅延の合計（D4+D5+D6）とは等しいと仮定していた。しかしながら、実際には等しくないため、その誤差が同期精度の劣化の要因となっていた。
【００３３】
これに対して、IEEE1588v2 w/TCでは、各中継ノードＲｅ１〜Ｒｅ３に実装されたTC機能によって各中継ノードＲｅ１〜Ｒｅ３でのキューイング遅延の合計を計測している。そして、スレーブノード２００は、マスタノード１００からスレーブノード２００への伝送におけるキューイング遅延の合計値（D1+D2+D3）を正確に取得する。また、マスタノード１００は、スレーブノード２００からマスタノード１００への伝送におけるキューイング遅延の合計値（D4+D5+D6）を、正確に取得する。このような動作によって、IEEE1588v2 w/TCでは、高精度の時刻同期が可能となる。以上が、IEEE1588v2 w/TCに規定される時刻同期アルゴリズムである。
【００３４】
［第１実施形態］
図３は、第１実施形態における通信システム１のシステム構成図である。通信システム１は、マスタノード３００、スレーブノード４００（４００ａ〜４００ｃ）、パケットネットワークＰＮを備える。以下、マスタノード３００及びスレーブノード４００の構成の詳細についてそれぞれ説明する。
【００３５】
〔マスタノード〕
図4は、マスタノード３００の機能構成を表す機能ブロック図である。マスタノード３００は、クロック生成部３０１、マスタクロック部３０２、パケット生成部３０３、パケット送信部３０４、パケット受信部３０５、遅延計測部３０６を備える。マスタノード３００は、例えばバスで接続されたＣＰＵ（Central Processing Unit）、メモリ、補助記憶装置、通信インタフェース等を備え、時刻同期用プログラムを実行することによって上記各機能部を備える装置として構成されても良い。
【００３６】
クロック生成部３０１は、マスタノード３００の基準クロックを生成する。具体的には、クロック生成部３０１は、マスタノード３００における１秒の時間幅を決める。なお、クロック生成部３０１は、マスタノード３００の外部に存在しても良い。その場合、マスタノード３００は、外部に設置されるクロック生成部３０１からのクロックを確実に同期して取得するように構成される。
【００３７】
マスタクロック部３０２は、クロック生成部３０１で生成される基準クロックに従い、マスタノード３００の時刻（マスタ時刻）を決定する。具体的には、マスタクロック部３０２は、マスタノード３００において何時何分何秒であるかを決める。
【００３８】
パケット生成部３０３は、IEEE1588のメッセージを生成し、パケット送信部３０４に送る。IEEE1588のメッセージとは、具体的には、Syncメッセージ、Follow_upメッセージ、Delay_Responseメッセージである。パケット生成部３０３は、定期的にパケット送信部３０４を介してSyncメッセージをスレーブノード４００へ送信し、同時にマスタクロック部３０２を参照してSync送信時刻Tm(0)を記録する。また、パケット生成部３０３は、Syncメッセージ送信後に、Sync送信時刻Tm(0)を格納したFollow_upメッセージを生成し、パケット送信部３０４を介してスレーブノード４００へ送信する。また、パケット生成部３０３は、パケット受信部３０５によって受信されるDelay_Requestメッセージの受信時刻（Delay受信時刻）Tm(1)と、遅延計測部３０６で計測するDelay_Requestメッセージの遅延量SM_Q（第一遅延量）を格納したDelay_Responseメッセージを生成し、パケット送信部３０４を介してスレーブノード４００へ送信する。なお、遅延量SM_Qは、上述したようにDelay_Requestメッセージが各スレーブノード４００ａ〜４００ｃからマスタノード３００まで転送される間に受けたキューイング遅延の遅延量を表す。
【００３９】
また、Delay_Responseメッセージは、スレーブノード４００ａ〜４００ｃから送信されたDelay_Requestメッセージへの返信となる。そのため、パケット生成部３０３は、Delay_Responseメッセージに格納されるDelay受信時刻Tm(1)、遅延量SM_Qを、Delay_Requestメッセージの送信元のスレーブノード４００ａ〜４００ｃ毎に管理する。
【００４０】
パケット送信部３０４は、パケット生成部３０３から受けるSyncメッセージ、Follow_upメッセージ、Delay_Responseメッセージを、パケットネットワークＰＮを経由してスレーブノード４００ａ〜４００ｃに送信する。なお、パケット送信部３０４は、Syncメッセージ及びFollow_upメッセージを、スレーブノード４００ａ〜４００ｃに対してブロードキャストする。また、パケット送信部３０４は、Delay_Responseメッセージを、各Delay_Requestメッセージの送信元のスレーブノード４００ａ〜４００ｃに対してユニキャストする。
【００４１】
パケット受信部３０５は、スレーブノード４００ａ〜４００ｃからパケットネットワークＰＮを経由して送られてくるDelay_Requestメッセージを受信する。そして、パケット受信部３０５は、受信されたDelay_Requestメッセージを、パケット生成部３０３及び遅延計測部３０６に転送する。
【００４２】
遅延計測部３０６は、パケットカウンタを備える。遅延計測部３０６は、パケットカウンタのカウンタ値の増減状況をモニタすることによって、到着するDelay_Requestメッセージの遅延量SM_Qを算出する。そして、遅延計測部３０６は、算出された遅延量SM_Qをパケット生成部３０３に通知する。
【００４３】
図５は、遅延計測部３０６の詳細な機能構成を表す機能ブロック図である。遅延計測部３０６は、パケットカウンタ５０１、カウンタ最大値モニタ部５０２、到着時カウンタ値モニタ部５０３、遅延算出部５０４を備える。カウンタ最大値モニタ部５０２及び到着時カウンタ値モニタ部５０３は、パケットカウンタ５０１のカウンタ値をモニタし、結果を遅延算出部５０４に通知する。遅延算出部５０４は、カウンタ最大値モニタ部５０２及び到着時カウンタ値モニタ部５０３から通知された情報を用いて遅延量SM_Qを算出する。そして、遅延算出部５０４は、算出された遅延量SM_Qをパケット生成部３０３に通知する。
【００４４】
パケットカウンタ５０１は、パケット受信部３０５からDelay_Requestメッセージを受信する毎に、カウンタの値を所定の値分だけ増加させる。また、パケットカウンタ５０１は、クロック生成部３０１から出力される基準クロックの周波数に従い、カウンタの値を減少させる。パケットカウンタ５０１のカウンタ値が基準クロックの周波数に従って減少するのは、パケット受信部３０５によって受信されたDelay_Requestメッセージのパケットが、基準クロックの周波数に従って受信パケットのバッファから読み出されるためである。
【００４５】
カウンタ最大値モニタ部５０２は、パケットカウンタ５０１のカウンタ値の最大値を検出する。具体的には、カウンタ最大値モニタ部５０２は、予め決められた所定の時間（例えば１０秒）のモニタ期間内の最大値を検出する。以下、モニタ期間iにおけるカウンタの最大値を、カウンタ最大値P(i)と表す。カウンタ最大値モニタ部５０２は、モニタ期間iが終了すると、検出結果であるカウンタ最大値P(i)を遅延算出部５０４に通知する。
【００４６】
到着時カウンタ値モニタ部５０３は、モニタ期間iにおけるn番目のDelay_Requestメッセージパケットが到着すると、到着時のカウンタ値C(i,n)を検出する。到着時カウンタ値モニタ部５０３は、Delay_Requestメッセージパケットの到着毎にカウンタ値C(i,n)を検出し、検出結果を遅延算出部５０４に通知する。
【００４７】
遅延算出部５０４は、到着時カウンタ値モニタ部５０３からカウンタ値C(i,n)を受ける毎に、カウンタ値C(i,n)及びカウンタ最大値P(i)を用いて、以下の式１１に基づき遅延量SM_Qを算出する。
SM_Q = P(i-1) - C(i,n)  ・・・式１１
遅延算出部５０４は、遅延量SM_Qを計算する毎に、パケット生成部３０３に遅延量SM_Qを通知する。
【００４８】
図６は、パケットカウンタ５０１の動作の概略を表す概略図である。図６において、縦軸はカウンタ値を表し、下から上へ向けて高いカウンタ値を表す。横軸は時間を表し、左から右へ向けて進行する。縦に伸びる等間隔に並んだ複数の破線は、キューイング遅延が発生しない場合にDelay_Requestメッセージのパケットが受信されるタイミングを表す。上方向を指す矢印は、Delay_Requestメッセージのパケットが実際に受信されたタイミングを表す。パケットカウンタ５０１は、Delay_Requestメッセージのパケットを受信すると、カウンタ値を固定値分（図６のCV分）上昇させる。縦に伸びる破線と上方向の矢印とが時間軸で一致している場合、すなわちキューイング遅延が発生せずにDelay_Requestメッセージのパケットが受信されている場合は、カウンタ値は最大値Cmaxをとる。この場合、パケットカウンタ５０１は、受信されたビット数の総和と、基準クロックの周波数に従って定期的に読み出されるビット数の総和とが一致する。一方、キューイング遅延が発生している場合には、カウンタ値はCmaxよりも小さい値となる。このとき、最大値Cmaxとカウンタ値との差分が、発生しているキューイング遅延の遅延量と等価となる。
【００４９】
〔スレーブノード〕
図７は、スレーブノード４００の機能構成を表す機能ブロック図である。なお、スレーブノード４００ａ〜４００ｃは、いずれもスレーブノード４００と同様の構成を備える。スレーブノード４００は、パケット受信部４０１、ＰＬＬ（Phase Locked Loop）部４０２、遅延計測部４０３、スレーブクロック部４０４、時刻同期制御部４０５、パケット送信部４０６を備える。スレーブノード４００は、例えばバスで接続されたＣＰＵ、メモリ、補助記憶装置、通信インタフェース等を備え、時刻同期用プログラムを実行することによって上記各機能部を備える装置として構成されても良い。
【００５０】
パケット受信部４０１は、マスタノード３００からパケットネットワークＰＮを経由して送信されてきたSyncメッセージ、Follow_upメッセージ、Delay_Requestメッセージを受信し、時刻同期制御部４０５に転送する。パケット受信部４０１は、Syncメッセージに限り、ＰＬＬ部４０２及び遅延計測部４０３にも転送する。
【００５１】
ＰＬＬ部４０２は、位相比較器４０７、ＬＰＦ（Low Pass Filter）４０８、ＰＩ（Proportional Integral）制御器４０９、ＶＣＯ（voltage controlled oscillator）４１０、カウンタ４１１を備える。ただし、ＰＬＬ部４０２のこのような構成は一例に過ぎない。すなわち、ＰＬＬ部４０２は、自身のクロックから生成するＴＳ（Time Stamp）とマスタノード３００から受信したＴＳとの差分を計算し、その差分を元に自身のクロックを調整することができる構成であれば、その他どのような構成であっても良い。
【００５２】
位相比較器４０７は、パケット受信部４０１から受信したSyncメッセージパケットに格納される受信タイムスタンプと、カウンタ４１１で生成されるタイムスタンプとの差分信号を計算する。そして、位相比較器４０７は、その計算結果を表す差分信号をＬＰＦ４０８に出力する。
【００５３】
ＬＰＦ４０８は、位相比較器４０７によって出力された差分信号を平準化し、ジッタやノイズを抑圧し、ＰＩ制御器４０９に出力する。
ＰＩ制御器４０９は、平準化された差分信号が最終的にゼロとなるような制御信号を生成し、ＶＣＯ４１０に出力する。
【００５４】
ＶＣＯ４１０は、ＰＩ制御器４０９から出力された制御信号によって決定される周波数のクロックを生成し、カウンタ４１１に出力する。また、ＶＣＯ４１０は、生成された周波数のクロックに従い、遅延計測部４０３のパケットカウンタのカウンタ値を減少させる。
カウンタ４１１は、ＶＣＯ４１０によって生成されたクロックを元にタイムスタンプを生成し、位相比較器４０７に転送する。
【００５５】
以上説明したＰＬＬ部４０２の動作により、ＶＣＯ４１０によって生成されるスレーブノード４００のクロックが、マスタノード３００のクロックに同期される。
遅延計測部４０３は、パケットカウンタを備える。遅延計測部４０３は、パケットカウンタのカウンタ値の増減状況をモニタすることによって、到着するSyncメッセージの遅延量MS_Q（第二遅延量）を算出する。そして、遅延計測部４０３は、算出された遅延量MS_Qを時刻同期制御部４０５に通知する。なお、遅延量MS_Qは、上述したようにSyncメッセージがマスタノード３００からスレーブノード４００まで転送される間に受けたキューイング遅延の遅延量を表す。
【００５６】
図８は、遅延計測部４０３の詳細な機能構成を表す機能ブロック図である。遅延計測部４０３は、パケットカウンタ６０１、カウンタ最大値モニタ部６０２、到着時カウンタ値モニタ部６０３、遅延算出部６０４を備える。遅延計測部４０３が備える各構成は、それぞれマスタノード３００の遅延計測部３０６が備える同名の各構成と同じである。ただし、パケットカウンタ６０１は、パケット受信部４０１からSyncメッセージを受信する毎に、カウンタの値を所定の値分だけ増加させる。また、パケットカウンタ６０１は、ＶＣＯ４１０によって出力されるクロックの周波数に従い、カウンタの値を減少させる。また、遅延算出部６０４は、遅延量SM_Qに代えて同様の処理によって遅延量MS_Qを算出し、算出された遅延量MS_Qを時刻同期制御部４０５に通知する。
【００５７】
図７に戻ってスレーブノード４００の構成の説明を続ける。スレーブクロック部４０４は、ＶＣＯ４１０によって生成されるクロックに従い、スレーブノード４００ａ〜４００ｃの時刻（スレーブ時刻）を決める。
【００５８】
時刻同期制御部４０５は、Syncメッセージ及びDelay_Requestメッセージの送受信時刻情報（Sync送信時刻Tm(0)、Sync受信時刻Ts(0)、Delay送信時刻Ts(1)、Delay受信時刻Tm(1)）、遅延量SM_Q、遅延量MS_Qを用いて、マスタノード３００に対するスレーブノード４００の時刻のずれであるOffsetを求める。そして、時刻同期制御部４０５は、スレーブクロック部４０４の時刻（スレーブ時刻）を補正する。また、時刻同期制御部４０５は、Delay_Requestメッセージを生成し、パケット送信部４０６に送る。
パケット送信部４０６は、時刻同期制御部４０５から受信するDelay_Requestメッセージを、パケットネットワークＰＮを介してマスタノード３００に対して送信する。
【００５９】
図９は、時刻同期制御部４０５の詳細な機能構成を表す機能ブロック図である。時刻同期制御部４０５は、パケット解析部７０１、パケット生成部７０２、オフセット計算部７０３、時刻調整部７０４を備える。
パケット解析部７０１は、パケット受信部４０１からSyncメッセージ、Follow_upメッセージ、Delay_Responseメッセージを受信する。パケット解析部７０１は、Syncメッセージを受信すると、スレーブクロック部４０４を参照し、Sync受信時刻Ts(0)を取得する。そして、パケット解析部７０１は、取得されたSync受信時刻Ts(0)をオフセット計算部７０３に通知する。
【００６０】
また、パケット解析部７０１は、Follow_upメッセージを受信すると、Follow_upメッセージ内に格納されるSync送信時刻Tm(0)を抽出する。そして、パケット解析部７０１は、抽出されたSync送信時刻Tm(0)をオフセット計算部７０３に通知すると共に、パケット生成部７０２に対しDelay_Requestメッセージの生成トリガを送る。
【００６１】
また、パケット解析部７０１は、Delay_Responseメッセージを受信すると、Delay_Responseメッセージ内に格納されるDelay受信時刻Tm(1)及び遅延量SM_Qを抽出し、オフセット計算部７０３に通知する。
【００６２】
パケット生成部７０２は、Delay_Requestメッセージを生成する。具体的には、パケット生成部７０２は、パケット解析部７０１からDelay_Requestメッセージの生成トリガを受信すると、Delay_Requestメッセージを生成する。パケット生成部７０２は、生成されたDelay_Requestメッセージをパケット送信部４０６に転送すると共に、スレーブクロック部４０４を参照し、Delay送信時刻Ts(1)を取得する。そして、パケット生成部７０２は、取得されたDelay送信時刻Ts(1)をオフセット計算部７０３に通知する。
【００６３】
オフセット計算部７０３は、Offsetを計算し、算出されたOffsetを時刻調整部７０４に通知する。具体的には、パケット解析部７０１及びパケット生成部７０２から受信する各時刻（Sync送信時刻Tm(0)、Sync受信時刻Ts(0)、Delay送信時刻Ts(1)、Delay受信時刻Tm(1)）と、パケット解析部７０１から受信する遅延量SM_Qと、遅延計測部４０３から受信する遅延量MS_Qとを用いて、Offsetを計算する。
【００６４】
時刻調整部７０４は、オフセット計算部７０３から通知されるOffsetを用いて、スレーブクロック部４０４のスレーブ時刻を調整する。時刻調整部７０４のこの処理によって、スレーブクロック部４０４のスレーブ時刻は、マスタノード３００のマスタクロック部３０２のマスタ時刻に同期する。
【００６５】
〔動作〕
次に、第１実施形態における通信システム１の各装置の処理の流れについて説明する。通信システム１では、時刻同期のための処理として、マスタノード３００によるマスタ第１処理、スレーブノード４００によるスレーブ第１処理、マスタノード３００によるマスタ第２処理、スレーブノード４００によるスレーブ第２処理が、それぞれこの順で実行される。図１０及び図１２は、それぞれマスタノード３００によるマスタ第１処理及びマスタ第２処理の流れを表すフローチャートである。図１１及び図１３は、それぞれスレーブノード４００によるスレーブ第１処理及びスレーブ第２処理の流れを表すフローチャートである。スレーブノード４００ａ〜４００ｃは、それぞれ個別に図１１及び図１３に表されるスレーブ第１処理及びスレーブ第２処理を実行する。
【００６６】
まず、図１０を参照してマスタノード３００によるマスタ第１処理について説明する。まず、マスタノード３００がSyncメッセージをスレーブノード４００へ送信する（ステップＳ２０１）。具体的には、パケット生成部３０３がSyncメッセージを生成し、パケット送信部３０４がSyncメッセージをスレーブノード４００（４００ａ〜４００ｃ）へブロードキャスト送信する。次に、マスタノード３００がSync送信時刻Tm(0)を記録する（ステップＳ２０２）。具体的には、パケット生成部３０３がマスタクロック部３０２を参照してSync送信時刻Tm(0)を取得し保持する。そして、マスタノード３００がFollow_upメッセージをスレーブノード４００へ送信する（ステップＳ２０３）。具体的には、パケット生成部３０３が、Sync送信時刻Tm(0)を格納したFollow_upメッセージを生成し、パケット送信部３０４がFollow_upメッセージをスレーブノード４００（４００ａ〜４００ｃ）にブロードキャスト送信する。マスタノード３００は、マスタ第１処理を定期的に繰り返し実行する。
【００６７】
次に、図１１を参照してスレーブノード４００によるスレーブ第１処理について説明する。まず、スレーブノード４００はマスタノード３００からSyncメッセージを受信する（ステップＳ３０１）。具体的には、パケット受信部４０１は、マスタノード３００からSyncメッセージを受信し、受信したSyncメッセージをＰＬＬ部４０２、遅延計測部４０３、時刻同期制御部４０５に転送する。Syncメッセージ受信後の動作は、ステップＳ３０２〜Ｓ３０６の処理と、ステップＳ３０７及びステップＳ３０８の処理とが並行して実行される。
【００６８】
まず、ステップＳ３０２〜Ｓ３０６の処理について説明する。まず、スレーブノード４００がSync受信時刻Ts(0)を記録する（ステップＳ３０２）。具体的には、時刻同期制御部４０５のパケット解析部７０１が、Syncメッセージの受信に応じて、スレーブクロック部４０４を参照してSync受信時刻Ts(0)を取得し、オフセット計算部７０３に通知する。
【００６９】
次に、スレーブノード４００がマスタノード３００からFollow_upメッセージを受信する（ステップＳ３０３）。具体的には、パケット受信部４０１がマスタノード３００からFollow_upメッセージを受信し、受信されたFollow_upメッセージを時刻同期制御部４０５に転送する。次に、スレーブノード４００がSync送信時刻Tm(0)を記録する（ステップＳ３０４）。具体的には、時刻同期制御部４０５のパケット解析部７０１が、Follow_upメッセージの受信に応じて、Follow_upメッセージのペイロード部に格納されたSync送信時刻Tm(0)を抽出して取得する。そして、パケット解析部７０１が、取得されたSync送信時刻Tm(0)をオフセット計算部７０３に通知する。
【００７０】
次に、スレーブノード４００がDelay_Requestメッセージをマスタノード３００へ送信する（ステップＳ３０５）。具体的には、パケット解析部７０１がパケット生成部７０２に対し、Delay_Requestメッセージの生成トリガを送る。パケット生成部７０２が生成トリガに応じてDelay_Requestメッセージを生成し、パケット送信部４０６に転送する。そして、パケット送信部４０６がマスタノード３００に対して、Delay_Requestメッセージを送信する。このとき、スレーブノード４００がDelay送信時刻Ts(1)を記録する（ステップＳ３０６）。具体的には、パケット生成部７０２がスレーブクロック部４０４を参照して、Delay送信時刻Ts(1)を取得し、オフセット計算部７０３に転送する。
【００７１】
次に、ステップＳ３０７及びＳ３０８の処理について説明する。まず、スレーブノード４００が遅延量MS_Qを計測する（ステップＳ３０７）。具体的には、遅延計測部４０３のカウンタ最大値モニタ部５０２及び到着時カウンタ値モニタ部５０３がパケットカウンタ５０１のカウンタ値をモニタし、それぞれインターバル期間における最大カウンタ値及び各Syncメッセージ到着時のカウンタ値を取得する。そして、遅延計測部４０３の遅延算出部５０４が双方のカウンタ値に基づいて遅延量MS_Qを算出する。
【００７２】
次に、スレーブノード４００が、計測された遅延量MS_Qを記録する（ステップＳ３０８）。具体的には、遅延算出部５０４が、算出された遅延量MS_Qを時刻同期制御部４０５のオフセット計算部７０３に通知する。
【００７３】
次に、図１２を参照してマスタノード３００によるマスタ第２処理について説明する。まず、マスタノード３００がスレーブノード４００からDelay_Requestメッセージを受信する（ステップＳ４０１）。具体的には、パケット受信部３０５がスレーブノード４００からDelay_Requestメッセージを受信し、受信されたDelay_Requestメッセージをパケット生成部３０３及び遅延計測部３０６に転送する。
【００７４】
次に、マスタノード３００がDelay受信時刻Tm(1)を記録する（ステップＳ４０２）。具体的には、パケット生成部３０３が、Delay_Requestメッセージの受信に応じて、マスタクロック部３０２を参照してDelay_Requestメッセージ受信時の時刻Tm(1)を取得する。そして、パケット生成部３０３が、各Delay_Requestメッセージの送信元であるスレーブノード４００ａ〜４００ｃのノード情報に対応付けて、各Delay_RequestメッセージのDelay受信時刻Tm(1)を記録する。
【００７５】
次に、マスタノード３００が各Delay_Requestメッセージについて遅延量SM_Qを計測する（ステップＳ４０３）。具体的には、遅延計測部３０６のカウンタ最大値モニタ部５０２及び到着時カウンタ値モニタ部５０３が、パケットカウンタ５０１のカウンタ値をモニタし、それぞれインターバル期間における最大カウンタ値及び各Delay_Requestメッセージ到着時のカウンタ値を取得する。次に、遅延算出部５０４が双方のカウンタ値情報に基づいて、各Delay_Requestメッセージの遅延量SM_Qを算出する。そして、遅延計測部３０６が、算出された各遅延量SM_Qをパケット生成部３０３に通知する。パケット生成部３０３は、各Delay_Requestメッセージの送信元であるスレーブノード４００ａ〜４００ｃのノード情報に対応付けて、各Delay_Requestメッセージの遅延量SM_Qを記録する。
【００７６】
次に、マスタノード３００が、遅延量SM_Q及びDelay受信時刻Tm(1)が格納されたDelay_Responseメッセージを、各スレーブノード４００ａ〜４００ｃに対して送信する（ステップＳ４０４）。具体的には、パケット生成部３０３が、各スレーブノード４００ａ〜４００ｃに対応する遅延量SM_Q及び時刻情報Tm(1)を格納したDelay_Responseメッセージを生成し、パケット送信部３０４に転送する。そして、パケット送信部３０４がスレーブノード４００ａ〜４００ｃに対して、各Delay_Responseメッセージをユニキャスト送信する。
【００７７】
次に、図１３を参照してスレーブノード４００によるスレーブ第２処理について説明する。まず、スレーブノード４００がマスタノード３００からDelay_Responseメッセージを受信する（ステップＳ５０１）。具体的には、パケット受信部４０１がマスタノード３００からDelay_Responseメッセージを受信し、受信されたDelay_Responseメッセージを時刻同期制御部４０５に転送する。
【００７８】
次に、スレーブノード４００が、受信されたDelay_Responseメッセージから遅延量SM_Q及びDelay受信時刻Tm(1)を抽出し記録する（ステップＳ５０２）。具体的には、時刻同期制御部４０５のパケット解析部７０１が、Delay_Responseメッセージの受信に応じて、Delay_Responseメッセージのペイロード部に格納された遅延量SM_Q及びDelay受信時刻Tm(1)を抽出し取得する。そして、パケット解析部７０１が、取得された遅延量SM_Q及びDelay受信時刻Tm(1)をオフセット計算部７０３に通知する。
【００７９】
次に、スレーブノード４００が、時刻差MS_Diff及び時刻差SM_Diffの値を算出する（ステップＳ５０３）。具体的には、オフセット計算部７０３が以下の二つの式（式１２及び式１３）に基づいて、時刻差MS_Diff及び時刻差SM_Diffの値を算出し、保持する。
MS_Diff = Ts(0) - Tm(0)  ・・・式１２
SM_Diff = Tm(1) - Ts(1)  ・・・式１３
【００８０】
次に、スレーブノード４００がOffsetを算出する（ステップＳ５０４）。具体的には、オフセット計算部７０３が、時刻差MS_Diff及び時刻差SM_Diffと、遅延量MS_Q及び遅延量SM_Qとに基づいて、以下の式１４によりOffsetを算出する。そして、オフセット計算部７０３が、算出されたOffsetの値を時刻調整部７０４に通知する。
Offset = {(MS_Diff - SM_Diff) - (MS_Q - SM_Q)} / 2  ・・・式１４
【００８１】
なお、式１４は以下のようにして求められる。まず、時刻差MS_Diffと遅延量MS_Qとから以下のような式１５が求められる。
MS_Diff = Propagation_Delay + MS_Q + Offset  ・・・式１５
また、時刻差SM_Diffと遅延量SM_Qとから以下のような式１６が求められる。
SM_Diff = Propagation_Delay + SM_Q - Offset  ・・・式１６
式１５及び式１６から、上記の式１４が求められる。なお、式１５及び式１６におけるpropagation_Delayは、マスタノード３００とスレーブノード４００との間の伝播遅延の遅延量を表す。
【００８２】
図１３に表される処理の説明に戻る。上記のステップＳ５０４の処理の後、スレーブノード４００が、算出されたOffsetの値を用いてスレーブ時刻を調整する（ステップＳ５０５）。具体的には、時刻調整部７０４が、Offsetが正の値の場合にはスレーブ時刻をOffset分遅らせ、Offsetが負の値の場合にはスレーブ時刻をOffset分進める。このようなスレーブ時刻の調整により、スレーブ時刻はマスタノード３００のマスタ時刻に同期する。
【００８３】
図１４及び図１５は、通信システム１による時刻同期処理の具体例を表すシーケンス図である。まず、図１４を用いて通信システム１による時刻同期処理の具体例について説明する。図１４では、マスタノード３００に対するスレーブノード４００のOffsetが“３”、マスタノード３００とスレーブノード４００との間の伝播遅延の遅延量Propagation_Delayが“３”、マスタノード３００からスレーブノード４００へのキューイング遅延の遅延量MS_Qが“０”、スレーブノード４００からマスタノード３００へのキューイング遅延の遅延量SM_Qが“０”である。なお、図１４及び図１５では、説明の便宜のため、マスタ時刻及びスレーブ時刻を時／分／秒の表記ではなく、整数値で示す。
【００８４】
マスタ第１処理においてSync送信時刻Tm(0)は、“４”である。スレーブ第１処理において、Sync受信時刻Ts(0)は“１０”であり、Delay送信時刻Ts(1)は“１５”である。マスタ第２処理において、Delay受信時刻Tm(1)は“１５”である。マスタノード３００からスレーブノード４００へのキューイング遅延の遅延量MS_Qは、スレーブ第１処理において遅延計測部４０３によって“０”と計測される。また、スレーブノード４００からマスタノード３００へのキューイング遅延の遅延量SM_Qは、マスタ第２処理において遅延計測部３０６によって、“０”と計測される。スレーブノード４００のオフセット計算部７０３は、スレーブ第２処理において、以上の各値に基づいて以下の通りOffsetの値を“３”と算出する。
【００８５】
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
【００８６】
なお、図１４は、Offsetが“3”となる条件下でのシーケンスであり、上記のように通信システム１の時刻同期処理によってOffsetを正確に算出することが可能となっている。
【００８７】
次に、図１５を用いて通信システム１による時刻同期処理の具体例について説明する。図１５では、マスタノード３００に対するスレーブノード４００のOffsetが“４”、マスタノード３００とスレーブノード４００との間の伝播遅延の遅延量Propagation_Delayが“３”、マスタノード３００からスレーブノード４００へのキューイング遅延の遅延量MS_Qが“２”、スレーブノード４００からマスタノード３００へのキューイング遅延の遅延量SM_Qが“３”である。
【００８８】
マスタ第１処理においてSync送信時刻Tm(0)は、“４”である。スレーブ第１処理において、Sync受信時刻Ts(0)は“１３”であり、Delay送信時刻Ts(1)は“１７”である。マスタ第２処理において、Delay受信時刻Tm(1)は“１９”である。マスタノード３００からスレーブノード４００へのキューイング遅延の遅延量MS_Qは、スレーブ第１処理において遅延計測部４０３によって“２”と計測される。また、スレーブノード４００からマスタノード３００へのキューイング遅延の遅延量SM_Qは、マスタ第２処理において遅延計測部３０６によって、“３”と計測される。スレーブノード４００のオフセット計算部７０３は、スレーブ第２処理において、以上の各値に基づいて以下の通りOffsetの値を“４”と算出する。
【００８９】
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
【００９０】
なお、図１５は、Offsetが“４”となる条件下でのシーケンスであり、キューイング遅延がゼロでない場合であっても、上記のように通信システム１の時刻同期処理によってOffsetを正確に算出することが可能となっている。
【００９１】
図１６は、通信システム１において計測される遅延量の確率分布を表す図である。図１６における実験では、パケットネットワークＰＮの代わりにネットワークエミュレータを接続し、マスタノード３００から定期的に送信されるSyncメッセージのパケットに対して遅延量を付加し、スレーブノード４００の遅延計測部４０３において遅延量を測定した。図１６では、ネットワークエミュレータによって付加した遅延量の分布と、スレーブノード４００で計測された遅延量の分布を示している。図１６の横軸が遅延量を表し、縦軸が確率を示す。一様分布及びポアソン分布のいずれの場合も、計測された遅延量の分布がネットワークエミュレータによって付加された遅延量の分布とほぼ一致している。したがって、遅延計測部４０３において、遅延量MS_Qが正しく計測できていることが明らかである。マスタノード３００の遅延計測部３０６も、スレーブノード４００の遅延計測部４０３と同様の動作を行なうため、SM_Qを正しく計測できていることが明らかである。そのため、通信システム１による時刻同期処理によって、Offsetの値を正確に算出し、マスタ時刻に対してスレーブ時刻を正確に同期できていることが明らかである。
【００９２】
上記の通信システム１によれば、スレーブノード４００の遅延計測部４０３が、マスタノード３００からスレーブノード４００へのキューイング遅延の遅延量MS_Qを正確に計測する。また、マスタノード３００の遅延計測部３０６がスレーブノード４００からマスタノード３００へのキューイング遅延の遅延量SM_Qを正確に計測する。そして、マスタノード３００から遅延量SM_Qをスレーブノード４００に通知することによって、スレーブノード４００が、マスタノード３００とスレーブノード４００との間の双方向のキューイング遅延の遅延量をそれぞれ個別に認識できる。これによって、Pure IEEE1588のように、双方向のキューイング遅延を等しいと仮定してOffsetを算出する場合に比べて、双方向のキューイング遅延の実際の差異によって生じる誤差を除外することができ、より精度の高い時刻同期を実現することが可能となる。
【００９３】
また、通信システム１では、各々の方向のキューイング遅延の遅延量を、マスタノード３００及びスレーブノード４００のみによって計測することができる。そのため、パケットネットワークＰＮにおける中継ノードにおいてTC機能などの特別な機能を実装する必要がなく、既存の中継ノードで対応することが可能である。すなわち、中継ノードに対してTC機能を実装する必要があるIEEE1588v2 w/TCに比べて、中継ノードを置き換える必要が生じず、導入に要するコストを抑えることができ、導入が容易であるという効果がある。
【００９４】
＜変形例＞
遅延計測部３０６は、パケットカウンタ５０１に代えてパケットバッファを用いて構成されても良い。パケットバッファは、パケット受信部４０１からDelay_Requestメッセージのパケットを受信すると、受信されたパケットをバッファに蓄積する。また、パケットバッファは、クロック生成部３０１で決定される周波数に従って、蓄積しているパケットを出力する。図１７は、パケットバッファを用いて構成された場合の、遅延計測部３０６の処理の概略を表す図である。図１７において、縦軸はバッファへの蓄積量を表し、下から上へ向けて高い蓄積量を表す。横軸は時間を表し、左から右へ向けて進行する。縦に伸びる等間隔に並んだ複数の破線は、キューイング遅延が発生しない場合にDelay_Requestメッセージのパケットが受信されるタイミングを表す。上方向を指す矢印は、Delay_Requestメッセージのパケットが実際に受信されたタイミングを表す。パケットバッファは、Delay_Requestメッセージのパケットが受信されると、受信されたビット数分だけ蓄積量が増加する。縦に伸びる破線と上方向の矢印とが時間軸で一致している場合、すなわちキューイング遅延が発生せずにDelay_Requestメッセージのパケットが受信されている場合は、読み出されたタイミング（蓄積量が減るタイミング）から新たに受信されるタイミング（蓄積量が増えるタイミング）との間の時間幅は最小Tminとなる。一方、キューイング遅延が発生している場合には、上記の時間幅はTminよりも大きい値となる。このとき、最小値Tminと時間幅との差分が、発生しているキューイング遅延の遅延量と等価となる。
【００９５】
なお、上述した遅延計測部３０６のいずれの構成も、遅延を計測するための構成の一例にすぎず、キューイング遅延の遅延量SM_Qを計測できる構成であればその他の構成が採用されても良い。また、遅延計測部４０３についても同様である。
【００９６】
［第２実施形態］
通信システム１の第１実施形態では、マスタノード３００が遅延量SM_Qを計測しDelay_Responseメッセージに格納してスレーブノード４００へ送信する。しかしながら、IEEE1588の標準では、Delay_Responseメッセージ内にDelay受信時刻Tm(1)を格納するためのフィールドはあるものの、遅延量SM_Qを格納するためのフィールドはない。そのため、第１実施形態では、Delay_Responseメッセージの標準フォーマットを変更する必要が生じる。そこで、通信システム１の第２実施形態は、Delay_Responseメッセージの標準フォーマットを変更することなく、時刻同期処理を実現することを可能とする。以下、通信システム１の第２実施形態について、第１実施形態と異なる点を中心に説明する。
【００９７】
〔マスタノード〕
図１８は、第２実施形態におけるマスタノード３００の機能構成を表す機能ブロック図である。第２実施形態におけるマスタノード３００は、パケット生成部３０３に代えてパケット生成部３０３ａを備える点で第１実施形態におけるマスタノード３００と異なり、その他の構成は同じである。
【００９８】
パケット生成部３０３ａは、Delay_Responseメッセージに関する処理がパケット生成部３０３と異なり、他の構成は同じである。パケット生成部３０３ａは、Delay受信時刻Tm(1)を、遅延量SM_Qを用いて、補正Delay受信時刻Tm(2)（補正時刻）として補正する。具体的には、パケット生成部３０３ａは、Delay受信時刻Tm(1)から遅延量SM_Qを減算した結果として補正Delay受信時刻Tm(2)を算出する。そして、パケット生成部３０３ａは、補正Delay受信時刻Tm(2)をDelay_Responseメッセージに格納し、パケット送信部３０４へ送る。
【００９９】
〔スレーブノード〕
図１９は、第２実施形態におけるスレーブノード４００の機能構成を表す機能ブロック図である。第２実施形態におけるスレーブノード４００は、時刻同期制御部４０５に代えて時刻同期制御部４０５ａを備える点で第１実施形態におけるスレーブノード４００と異なり、その他の構成は同じである。
【０１００】
時刻同期制御部４０５ａは、Delay_Requestメッセージの受信時刻情報として補正Delay受信時刻Tm(2)を用いる点、遅延量SM_Qを用いない点で時刻同期制御部４０５と異なり、他の構成は同じである。
【０１０１】
図２０は、第２実施形態における時刻同期制御部４０５ａの機能構成を表す機能ブロック図である。第２実施形態における時刻同期制御部４０５ａは、パケット解析部７０１及びオフセット計算部７０３に代えて、パケット解析部７０１ａ及びオフセット計算部７０３ａを備える点で第１実施形態における時刻同期制御部４０５と異なり、他の構成は同じである。
【０１０２】
パケット解析部７０１ａは、Delay_Responseメッセージに関する処理がパケット解析部７０１と異なり、他の構成は同じである。パケット解析部７０１ａは、Delay_Responseメッセージから補正Delay受信時刻Tm(2)を抽出し、抽出された補正Delay受信時刻Tm(2)をオフセット計算部７０３ａに通知する。
【０１０３】
オフセット計算部７０３ａは、Delay受信時刻Tm(1)に代えて補正Delay受信時刻Tm(2)を用いてOffsetを計算する点でオフセット計算部７０３と異なる。オフセット計算部７０３ａの処理の詳細については後述する。
【０１０４】
〔動作〕
次に、第２実施形態における通信システム１の各装置の処理の流れについて説明する。ただし、マスタ第１処理及びスレーブ第１処理は、それぞれ第１実施形態における処理（図１０及び図１１）と同じであるため説明を省略する。
【０１０５】
図２１は、第２実施形態におけるマスタ第２処理の流れを表すフローチャートである。図２１において、図１２と同じ処理については同じ符号を付して表し説明を省略する。第２実施形態では、ステップＳ４０３の後、マスタノード３００が補正Delay受信時刻Tm(2)を算出する（ステップＳ４１１）。具体的には、パケット生成部３０３ａが遅延量SM_Q及びDelay受信時刻Tm(1)を用いて下記の式１７により補正Delay受信時刻Tm(2)を算出する。
Tm(2) = Tm(1) - SM_Q  ・・・式１７
【０１０６】
このとき、パケット生成部３０３ａは、スレーブノード４００ａ〜４００ｃ毎の補正Delay受信時刻Tm(2)を算出する。そして、パケット生成部３０３ａは、Delay_Requestメッセージの送信元であるスレーブノード４００ａ〜４００ｃのノード情報に対応付けて、補正Delay受信時刻Tm(2)を記録する。なお、補正Delay受信時刻Tm(2)は、キューイング遅延が付加されずにDelay_Requestメッセージが転送された場合の受信時刻を示す。
【０１０７】
次に、マスタノード３００が、算出された補正Delay受信時刻Tm(2)を格納したDelay_Responseメッセージをスレーブノード４００に送信する（ステップＳ４１２）。具体的には、パケット生成部３０３ａは、スレーブノード４００ａ〜４００ｃ毎に、補正Delay受信時刻Tm(2)を格納したDelay_Responseメッセージを生成し、パケット送信部３０４に送る。パケット送信部３０４は、各スレーブノード４００ａ〜４００ｃに対して、Delay_Responseメッセージをユニキャスト送信する。
【０１０８】
図２２は、第２実施形態におけるスレーブ第２処理の流れを表すフローチャートである。図２２において、図１３と同じ処理については同じ符号を付して表し説明を省略する。第２実施形態では、ステップＳ５０１の処理の後、スレーブノード４００がDelay_Responseメッセージから補正Delay受信時刻Tm(2)を抽出し記録する（ステップＳ５１１）。具体的には、時刻同期制御部４０５ａのパケット解析部７０１ａが、Delay_Responseメッセージの受信に応じて、Delay_Responseメッセージのペイロード部に格納される補正Delay受信時刻Tm(2)を抽出し、記録する。そして、パケット解析部７０１ａが補正Delay受信時刻Tm(2)をオフセット計算部７０３ａに通知する。
【０１０９】
次に、スレーブノード４００が、時刻差MS_Diff及び補正時刻差SM_Diff2の値を算出する（ステップＳ５１２）。このとき、時刻差MS_Diffを算出する処理は第１実施形態と同じである。オフセット計算部７０３ａは、Delay送信時刻Ts(1)及び補正Delay受信時刻Tm(2)を用いて、以下の式１７に基づいて補正時刻差SM_Diff2を算出する。
SM_Diff2 = Tm(2)- Ts(1)  ・・・式１７
【０１１０】
次に、スレーブノード４００が、時刻差MS_Diff、補正時刻差SM_Diff2、遅延量MS_Qを用いてOffsetを計算する（ステップＳ５１３）。具体的には、オフセット計算部７０３ａが、時刻差MS_Diff、補正時刻差SM_Diff2、遅延量MS_Qに基づいて、以下の式１８によりOffsetを算出する。そして、オフセット計算部７０３ａが、算出されたOffsetの値を時刻調整部７０４に通知する。
Offset = {(MS_Diff - SM_Diff2) - MS_Q} / 2  ・・・式１８
【０１１１】
なお、式１８は以下のようにして求められる。まず、時刻差MS_Diffと遅延量MS_Qとから以下のような式１９が求められる。なお、式１９は式１５と同じである。
MS_Diff = Propagation_Delay + MS_Q + Offset  ・・・式１９
また、補正時刻差SM_Diff2から以下のような式２０が求められる。
SM_Diff2 = Propagation_Delay - Offset  ・・・式２０
式１９及び式２０から、上記の式１８が求められる。なお、式１９及び式２０におけるpropagation_Delayも、上記のものと同様に、マスタノード３００とスレーブノード４００との間の伝播遅延の遅延量を表す。
【０１１２】
図２３は、第２実施形態における通信システム１による時刻同期処理の具体例を表すシーケンス図である。図２３では、マスタノード３００に対するスレーブノード４００のOffsetが“４”、マスタノード３００とスレーブノード４００との間の伝播遅延の遅延量Propagation_Delayが“３”、マスタノード３００からスレーブノード４００へのキューイング遅延の遅延量MS_Qが“２”、スレーブノード４００からマスタノード３００へのキューイング遅延の遅延量SM_Qが“３”である。
【０１１３】
マスタ第１処理においてSync送信時刻Tm(0)は、“４”である。スレーブ第１処理において、Sync受信時刻Ts(0)は“１３”であり、Delay送信時刻Ts(1)は“１７”である。マスタ第２処理において、Delay受信時刻Tm(1)は“１９”である。マスタノード３００からスレーブノード４００へのキューイング遅延の遅延量MS_Qは、スレーブ第１処理において遅延計測部４０３によって“２”と計測される。また、スレーブノード４００からマスタノード３００へのキューイング遅延の遅延量SM_Qは、マスタ第２処理において遅延計測部３０６によって、“３”と計測される。マスタノード３００のパケット生成部３０３ａは、以下のように補正Delay受信時刻Tm(2)を算出する。
Tm(2)= Tm(1) - SM_Q = 19 - 3 = 16
【０１１４】
スレーブノード４００のオフセット計算部７０３ａは、スレーブ第２処理において、以上の各値に基づいて以下の通りOffsetの値を“４”と算出する。
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
【０１１５】
なお、図２３は、Offsetが“４”となる条件下でのシーケンスであり、Delay_Responseメッセージに遅延量SM_Qを格納するためのフィールドを設けない場合であっても、上記のように通信システム１の時刻同期処理によってOffsetを正確に算出することが可能となっている。
【０１１６】
このように構成された第２実施形態における通信システム１では、Delay_Responseメッセージに遅延量SM_Qを格納するためのフィールドを設けることなく、第１実施形態における通信システム１と同程度の精度で時刻同期処理を実行することが可能となる。したがって、標準フォーマットのDelay Responseメッセージを用いることが可能となる。そのため、例えば通信システム１を実装する際のコストの低減や時間の削減を行うことが可能となるとの効果を奏する。
【０１１７】
［第３実施形態］
上述した第１実施形態及び第２実施形態では、マスタノード３００及びスレーブノード４００が遅延量MS_Q及びSM_Qの計測を行なうことによって、既存の中継ノードのままで、マスタ／スレーブ間の双方向の遅延の非対称性を考慮した高精度の時刻同期を実現した。これに対し、第３実施形態では、マスタノード３００及びスレーブノード４００それぞれの前段に各遅延量を計測するノード（以下、「エミュレーションノード」という。）を配置することによって、全ての中継ノードを置き換えることなく、IEEE1588v2 w/TCを実現する。
【０１１８】
図２４は、第３実施形態における通信システム１のシステム構成図である。第３実施形態における通信システム１は、マスタノード３００、スレーブノード４００（４００ａ〜４００ｃ）、エミュレーションノード８００（８００ａ〜８００ｄ）、パケットネットワークＰＮを備える。エミュレーションノード８００ａ〜８００ｄは、それぞれスレーブノード４００ａ〜４００ｃ及びマスタノード３００の前段に配置される。なお、エミュレーションノード８００は、パケットネットワークＰＮの中継ノードの機能として実装されても良いし、パケットネットワークＰＮの中継ノードとは異なる装置として実装されても良い。エミュレーションノード８００は、中継ノードとは異なる装置として実装される場合には、例えば単一の装置として実装され、マスタノード３００やスレーブノード４００に対して接続される。以下、通信システム１の第３実施形態について、第１実施形態と異なる点を中心に説明する。
【０１１９】
〔マスタノード〕
図２５は第３実施形態におけるマスタノード３００の機能構成を表す機能ブロック図である。第３実施形態におけるマスタノード３００は、IEEE1588v2 w/TCに基づいて動作する。具体的には、第３実施形態におけるマスタノード３００は、パケット生成部３０３に代えてパケット生成部３０３ｂを備える点、遅延計測部３０６を備えない点で、第１実施形態におけるマスタノード３００と異なり、その他の構成は同じである。
【０１２０】
パケット生成部３０３ｂは、Delay_Responseメッセージに関する処理がパケット生成部３０３と異なり、他の構成は同じである。パケット生成部３０３ｂは、Delay_Requestメッセージの受信に応じて、Delay受信時刻Tm(1)を取得すると共に、Delay_Requestメッセージ内からCF_SM値を抽出する。そして、パケット生成部３０３ｂは、Delay受信時刻Tm(1)及びCF_SM値を格納したDelay_Responseメッセージを生成する。
【０１２１】
〔スレーブノード〕
図２６は、第３実施形態におけるスレーブノード４００の機能構成を表す機能ブロック図である。第３実施形態におけるスレーブノード４００は、IEEE1588v2 w/TCに基づいて動作する。具体的には、第３実施形態におけるスレーブノード４００は、時刻同期制御部４０５に代えて時刻同期制御部４０５ｂを備える点、遅延計測部４０３を備えない点で第１実施形態におけるスレーブノード４００と異なり、その他の構成は同じである。
【０１２２】
時刻同期制御部４０５ｂは、遅延量SM_Q及び遅延量MS_Qに代えて、CF値（CF_MS、CF_SM）を用いてOffsetを求める点で時刻同期制御部４０５と異なり、他の構成は同じである。
【０１２３】
図２７は、時刻同期制御部４０５ｂの詳細な機能構成を表す機能ブロック図である。時刻同期制御部４０５ｂは、パケット解析部７０１に代えてパケット解析部７０１ｂを備える点、オフセット計算部７０３に代えてオフセット計算部７０３ｂを備える点で時刻同期制御部４０５と異なり、その他の構成は同じである。
【０１２４】
パケット解析部７０１ｂは、Syncメッセージ及びDelay_Responseメッセージに関する処理がパケット解析部７０１と異なる。具体的には、パケット解析部７０１ｂは、Syncメッセージを受信すると、スレーブクロック部４０４を参照しSync受信時刻Ts(0)を取得すると共に、SyncメッセージからCF値CF_MSを抽出する。そして、パケット解析部７０１ｂは、抽出されたSync受信時刻Ts(0)及びCF値CF_MSを、オフセット計算部７０３ｂに通知する。また、パケット解析部７０１ｂは、Delay_Responseメッセージを受信すると、格納されるDelay受信時刻Tm(1)及びCF値CF_SMを抽出し、オフセット計算部７０３ｂに通知する。
【０１２５】
オフセット計算部７０３ｂは、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と同じ値である。したがって、オフセット計算部７０３ｂは、上記の式１４においてMS_Q及びSM_Qの値をそれぞれCF_MS及びCF_SMに置き換えることによって、Offsetの値を算出する。
【０１２６】
〔エミュレーションノード〕
図２８は、第３実施形態におけるエミュレーションノード８００の機能構成を表す機能ブロック図である。エミュレーションノード８００は、パケット受信部８０１と、ＰＬＬ部４０２と、遅延計測部８０３と、クロック部８０４と、ＴＣ処理部８０５と、パケット送信部８０６とから構成される。ＰＬＬ部４０２は、第１実施形態におけるスレーブノード４００が備えるＰＬＬ部４０２と同じ構成である。クロック部８０４は、第１実施形態におけるスレーブクロック部４０４と同じ構成である。なお、エミュレーションノード８００は、例えばバスで接続されたＣＰＵ、メモリ、補助記憶装置、通信インタフェース等を備え、時刻同期用プログラムを実行することによって上記各機能部を備える装置として構成されても良い。
【０１２７】
遅延計測部８０３は、マスタノード３００ｂの前段に配置されるエミュレーションノード８００ｄと、スレーブノード４００ｂの前段に配置されるエミュレーションノード８００ａ〜ｃとでは、その構成が異なる。エミュレーションノード８００ｄの遅延計測部８０３は、第１実施形態におけるマスタノード３００の遅延計測部３０６と同じ構成である。一方、エミュレーションノード８００ａ〜８００ｃの遅延計測部８０３は、第１実施形態におけるスレーブノード４００の遅延計測部４０３と同じ構成である。いずれの場合も、遅延計測部８０３は、計測結果をＴＣ処理部８０５に通知する。
【０１２８】
パケット受信部８０１は、Syncメッセージ又はDelay_Requestメッセージを受信すると、受信されたメッセージをＴＣ処理部８０５に転送すると共に、クロック部８０４を参照して各メッセージの受信時刻を取得する。そして、パケット受信部８０１は、各メッセージの受信時刻をパケット送信部８０６に通知する。また、パケット受信部８０１は、Follow_upメッセージ又はDelay_Responseメッセージを受信すると、そのままパケット送信部８０６に転送する。
【０１２９】
遅延計測部８０３は、エミュレーションノード８００にメッセージが至るまでのキューイング遅延の遅延量（以下、「予備遅延量」という。）MS_Q2及びSM_Q2を計測する。なお、上述したように、遅延計測部８０３の構成は、第１実施形態におけるスレーブノード４００の遅延計測部４０３と同じ構成であり、遅延計測部４０３と同じ処理によって算出された結果の遅延量が予備遅延量を表す。
【０１３０】
ＴＣ処理部８０５は、パケット受信部８０１から受信するSyncメッセージ及びDelay_RequestメッセージのCorrection Fieldに、予備遅延量MS_Q2及びSM_Q2を、それぞれCF値CF_MS及びCF_SMとして記録し、パケット送信部８０６に転送する。
【０１３１】
パケット送信部８０６は、ＴＣ処理部８０５からSyncメッセージ又はDelay_Requestメッセージを送信すると、クロック部８０４を参照して送信時刻を取得する。そして、パケット送信部８０６は、送信時刻と、パケット受信部８０１から通知された受信時刻と、に基づいてノード内滞在時間を計算する。ノード内滞在時間とは、自装置内にパケットが滞在していた時間を表す。そして、パケット送信部８０６は、Correction Fieldに格納されているCF値にノード内滞在時間を加算し、パケットネットワークＰＮ又は宛先となる各ノード（マスタノード３００又はスレーブノード４００）に転送する。CF値である予備遅延量MS_Q2及びSM_Q2にノード内滞在時間が加算されることによって、加算後のCF値は遅延量MS_Q及びSM_Qと同じ値となる。また、パケット送信部８０６は、Follow_upメッセージ及びDelay_Responseメッセージについては、そのままパケットネットワークＰＮ又は宛先となる各ノード（マスタノード３００又はスレーブノード４００）に転送する。
【０１３２】
〔動作〕
次に、第3実施形態における通信システム１の各装置の処理の流れについて説明する。ただし、マスタ第１処理は、第１実施形態における処理（図１０）と同じであるため説明を省略する。
【０１３３】
図２９は、第３実施形態におけるスレーブ第１処理の流れを表すフローチャートである。図２９において、図１１と同じ処理については同じ符号を付して表し説明を省略する。第３実施形態では、ステップＳ３０２の処理の後、スレーブノード４００が、受信されたSyncメッセージからCF_MSを抽出する（ステップＳ３２１）。具体的には、時刻同期制御部４０５ｂのパケット解析部７０１ｂが、受信されたSyncメッセージからCF_MSを抽出し、CF_MSをオフセット計算部７０３ｂに通知する。そして、ステップＳ３１１の処理の後は、スレーブノード４００はＳ３０３〜Ｓ３０６の処理を実行する。
【０１３４】
図３０は、第３実施形態におけるマスタ第２処理の流れを表すフローチャートである。図３０において、図１２と同じ処理については同じ符号を付して表し説明を省略する。第３実施形態では、ステップＳ４０２の後、マスタノード３００が、受信されたDelay_RequestメッセージからCF_SMを抽出する（ステップＳ４２１）。具体的には、パケット生成部３０３ｂが、受信されたDelay_RequestメッセージからCF_SMを抽出し、Delay_Requestメッセージの送信元である各スレーブノード４００のノード情報と共に保持する。
【０１３５】
次に、マスタノード３００が、CF値CF_SM及びDelay受信時刻Tm(1)が格納されたDelay_Responseメッセージを、各スレーブノード４００ａ〜４００ｃに対して送信する（ステップＳ４２２）。具体的には、パケット生成部３０３ｂが、各スレーブノード４００ａ〜４００ｃに対応するCF値CF_SM及び時刻情報Tm(1)を格納したDelay_Responseメッセージを生成し、パケット送信部３０４に転送する。そして、パケット送信部３０４がスレーブノード４００ａ〜４００ｃに対して、各Delay_Responseメッセージをユニキャスト送信する。
【０１３６】
図３１は、第３実施形態におけるスレーブ第２処理の流れを表すフローチャートである。図３１において、図１３と同じ処理については同じ符号を付して表し説明を省略する。第３実施形態では、ステップＳ５０１の後、スレーブノード４００が、受信されたDelay_ResponseメッセージからCF値CF_SM及びDelay受信時刻Tm(1)を抽出し記録する（ステップＳ５２１）。具体的には、時刻同期制御部４０５ｂのパケット解析部７０１ｂが、Delay_Responseメッセージの受信に応じて、Delay_Responseメッセージのペイロード部に格納されたCF値CF_SM及びDelay受信時刻Tm(1)を抽出し取得する。そして、パケット解析部７０１ｂが、取得されたCF値CF_SM及びDelay受信時刻Tm(1)をオフセット計算部７０３ｂに通知する。
【０１３７】
次に、スレーブノード４００が、時刻差MS_Diff及び時刻差SM_Diffの値を算出する（ステップＳ５２２）。具体的には、オフセット計算部７０３ｂが以下の二つの式（式２１及び式２２）に基づいて、時刻差MS_Diff及び時刻差SM_Diffの値を算出し、保持する。
MS_Diff = (Ts(0) - CF_MS) - Tm(0)  ・・・式２１
SM_Diff = (Tm(1) - CF_SM) - Ts(1)  ・・・式２２
【０１３８】
次に、スレーブノード４００がOffsetを算出する（ステップＳ５２３）。具体的には、オフセット計算部７０３ｂが、時刻差MS_Diff及び時刻差SM_Diffに基づいて、以下の式２３によりOffsetを算出する。そして、オフセット計算部７０３ｂが、算出されたOffsetの値を時刻調整部７０４に通知する。
【０１３９】
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  ・・・式２３
【０１４０】
なお、式２３は以下のようにして求められる。まず、時刻差MS_Diffは以下のような式２４により表される。
MS_Diff = Propagation_Delay + Offset  ・・・式２４
また、時刻差SM_Diffは以下のような式２５により表される。
SM_Diff = Propagation_Delay - Offset  ・・・式２５
そして、式２４及び式２５から、上記の式２３が求められる。式２４及び式２５におけるpropagation_Delayは、マスタノード３００とスレーブノード４００との間の伝播遅延の遅延量を表す。
【０１４１】
なお、オフセット計算部７０３ｂは、CF_SM及びCF_MSをそれぞれSM_Q及びMS_Qに置き換えることによって、第１実施形態と同様に式１２〜式１４を用いてOffsetを算出するように構成されても良い。
【０１４２】
図３２は、第３実施形態におけるエミュレーションノード８００による処理の流れを表すフローチャートである。まず、エミュレーションノード８００が1588メッセージを受信する（ステップＳ６０１）。具体的には、パケット受信部８０１が1588パケットを受信する。受信された1588メッセージがSyncメッセージ又はDelay_Requestメッセージである場合には、エミュレーションノード８００がキューイング遅延の予備遅延量を計測する（ステップＳ６０２）。具体的には、遅延計測部８０３の遅延算出部６０４が、予備遅延量MS_Q2及びSM_Q2を算出する。
【０１４３】
次に、エミュレーションノード８００が、予備遅延量MS_Q2及びSM_Q2をCF値として記録する（ステップＳ６０３）。具体的には、ＴＣ処理部８０５が、Syncメッセージ又はDelay_RequestメッセージのCorrection Fieldに、予備遅延量MS_Q2及びSM_Q2を、それぞれCF値CF_MS及びCF_SMとして記録する。次に、エミュレーションノード８００が、ノード内滞在時間を計測する（ステップＳ６０４）。具体的には、パケット送信部８０６が、Syncメッセージ又はDelay_Requestメッセージの受信時刻及び送信時刻に基づいて、ノード内滞在時間を計算する。次に、エミュレーションノード８００が、CF値に対してノード内滞在時間を加算する（ステップＳ６０５）。具体的には、パケット送信部８０６が、Correction Fieldに格納されているCF値にノード内滞在時間を加算する。そして、エミュレーションノード８００が1588メッセージを送信する（ステップＳ６０６）。具体的には、パケット送信部８０６が、ノード内滞在時間が加算された後のSyncメッセージ又はDelay_Requestメッセージを、パケットネットワークＰＮ又は宛先となる各ノード（マスタノード３００又はスレーブノード４００）に転送する。
【０１４４】
一方、ステップＳ６０１において受信された1588メッセージがSyncメッセージ及びDelay_Requestメッセージ以外のメッセージである場合には、エミュレーションノード８００がこの1588メッセージを送信する（ステップＳ６０７）。具体的には、パケット送信部８０６が、受信されたメッセージを、パケットネットワークＰＮ又は宛先となる各ノード（マスタノード３００又はスレーブノード４００）に転送する。
【０１４５】
図３３は、第３実施形態における通信システム１による時刻同期処理の具体例を表すシーケンス図である。図３３では、マスタノード３００に対するスレーブノード４００ａのOffsetが“４”、マスタノード３００とスレーブノード４００ａとの間の伝播遅延の遅延量Propagation_Delayが“３”、マスタノード３００からスレーブノード４００ａへのキューイング遅延の遅延量MS_Qが“２”、スレーブノード４００ａからマスタノード３００へのキューイング遅延の遅延量SM_Qが“３”である。
【０１４６】
マスタ第１処理においてSync送信時刻Tm(0)は、“４”である。スレーブ第１処理において、Sync受信時刻Ts(0)は“１３”であり、Delay送信時刻Ts(1)は“１７”である。マスタ第２処理において、Delay受信時刻Tm(1)は“１９”である。
【０１４７】
エミュレーションノード８００ａは、Syncメッセージに対してマスタノード３００からエミュレーションノード８００ａまでの間で付加されたキューイング遅延（予備遅延量）MS_Q2を計測する。また、エミュレーションノード８００ａは、自装置におけるノード内滞在時間Ts_syncを予備遅延量MS_Q2に加算し、CF_MS=2としてSyncメッセージに格納する。そして、エミュレーションノード８００ａは、Syncメッセージをスレーブノード４００ａに転送する。
【０１４８】
エミュレーションノード８００ｄは、Delay_Requestメッセージに対してスレーブノード４００ａからエミュレーションノード８００ｄまでの間で付加されたキューイング遅延（予備遅延量）SM_Q2を計測する。また、エミュレーションノード８００ｄは、自装置におけるノード内滞在時間Ts_dreqを予備遅延量SM_Q2に加算し、CF_SM=3としてDelay_Requestメッセージに格納する。そして、エミュレーションノード８００ｄは、Delay_Requestメッセージをマスタノード３００に転送する。
【０１４９】
スレーブノード４００ａのオフセット計算部７０３ｂは、スレーブ第２処理において、以上の各値に基づいて以下の通りOffsetの値を“４”と算出する。
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
【０１５０】
なお、図３３は、Offsetが“４”となる条件下でのシーケンスであり、実施例3の時刻同期制御方式により、エミュレーションノード８００が中継ノードのTC機能を代替し、IEEE1588v2 w/TCでOffsetを求める場合でも上記のように通信システム１の時刻同期処理によってOffsetを正確に算出することが可能となっている。
【０１５１】
このように構成された第３実施形態における通信システム１では、マスタノード３００及びスレーブノード４００の前段に配置されたエミュレーションノード８００が、他方のノードから自装置までのキューイング遅延の合計値である予備遅延量を計測して1588メッセージのCorrection Fieldに格納する。そのため、中継ノードに対してTC機能を実装しなくとも、エミュレーションノード８００がCorrection Field に格納すべき遅延量を正確に計測する。したがって、IEEE1588v2 w/TCを実装する場合に、パケットネットワークＰＮにおける中継ノード全てに対してTC機能を実装する必要が無い。そのため、IEEE1588v2 w/TCによる時刻同期制御を実装する際のコストの低減や時間の削減を行うことが可能となるとの効果を奏する。
【０１５２】
以上、この発明の実施形態について図面を参照して詳述してきたが、具体的な構成はこの実施形態に限られるものではなく、この発明の要旨を逸脱しない範囲の設計等も含まれる。
【符号の説明】
【０１５３】
３００…マスタノード，  ３０１…クロック生成部，  ３０２…マスタクロック部，  ３０３…パケット生成部（通知部），  ３０４…パケット送信部（送信部、通知部），  ３０５…パケット受信部，  ３０６…遅延計測部（第一遅延計測部），  ４００…スレーブノード，  ４０１…パケット受信部，  ４０２…ＰＬＬ部，  ４０３…遅延計測部（第二遅延計測部），  ４０４…スレーブクロック部，  ４０５…時刻同期制御部，  ４０６…パケット送信部（送信部），  ４０７…位相比較器，  ４０８…ＬＰＦ，  ４０９…ＰＩ制御器，  ４１０…ＶＣＯ，  ４１１…カウンタ，  ５０１…パケットカウンタ，  ５０２…カウンタ最大値モニタ部，  ５０３…到着時カウンタ値モニタ部，  ５０４…遅延算出部，  ６０１…パケットカウンタ，  ６０２…カウンタ最大値モニタ部，  ６０３…到着時カウンタ値モニタ部，  ６０４…遅延算出部，  ７０１…パケット解析部，  ７０２…パケット生成部，  ７０３…オフセット計算部，  ７０４…時刻調整部，  ８００…エミュレーションノード（中継装置），  ８０１…パケット受信部，  ８０３…遅延計測部，  ８０４…クロック部，  ８０５…ＴＣ処理部，  ８０６…パケット送信部 
【図１】
0005515735.tif 000002
【図２】
0005515735.tif 000003
【図３】
0005515735.tif 000004
【図４】
0005515735.tif 000005
【図５】
0005515735.tif 000006
【図６】
0005515735.tif 000007
【図７】
0005515735.tif 000008
【図８】
0005515735.tif 000009
【図９】
0005515735.tif 000010
【図１０】
0005515735.tif 000011
【図１１】
0005515735.tif 000012
【図１２】
0005515735.tif 000013
【図１３】
0005515735.tif 000014
【図１４】
0005515735.tif 000015
【図１５】
0005515735.tif 000016
【図１６】
0005515735.tif 000017
【図１７】
0005515735.tif 000018
【図１８】
0005515735.tif 000019
【図１９】
0005515735.tif 000020
【図２０】
0005515735.tif 000021
【図２１】
0005515735.tif 000022
【図２２】
0005515735.tif 000023
【図２３】
0005515735.tif 000024
【図２４】
0005515735.tif 000025
【図２５】
0005515735.tif 000026
【図２６】
0005515735.tif 000027
【図２７】
0005515735.tif 000028
【図２８】
0005515735.tif 000029
【図２９】
0005515735.tif 000030
【図３０】
0005515735.tif 000031
【図３１】
0005515735.tif 000032
【図３２】
0005515735.tif 000033
【図３３】
0005515735.tif 000034