(57)【要約】【課題】マスタ装置とイベント発生タイミングを同期させることを目的とする。【解決手段】本発明の一態様に従った通信装置において、イベント発生部は、計時手段に基づき、イベントの発生時間間隔を指定したイベント間隔情報に従って、イベントを発生させ、記憶部は、前記イベント発生部でイベントが発生した時刻を表す第１タイムスタンプを記憶し、受信部は、一定時間間隔でイベントを発生させるマスタ装置から、前記マスタ装置で発生したイベントの時刻を表した第２タイムスタンプを記載したフレームを受信し、イベント間隔補正部は、前記第１タイムスタンプと、前記第２タイムスタンプと、あらかじめ取得した前記計時手段と前記マスタ装置との時刻差に基づき、前記イベント発生部のイベントの発生タイミングを前記マスタ装置に近づけるように、前記イベント間隔情報を補正する。【選択図】図２
2014236443.tif 000002
【特許請求の範囲】
【請求項１】
一定時間間隔でイベントを発生させるマスタ装置と、ネットワークを介して通信する通信装置であって、
時刻を計時する計時手段と、
前記計時手段に基づき、イベントの発生時間間隔を指定したイベント間隔情報に従って、イベントを発生させるイベント発生部と、
前記イベント発生部でイベントが発生した時刻を表す第１タイムスタンプを記憶する記憶部と、
前記マスタ装置から、前記マスタ装置で発生したイベントの時刻を表した第２タイムスタンプを記載したフレームを受信する受信部と、
前記第１タイムスタンプと、前記第２タイムスタンプと、あらかじめ取得した前記計時手段と前記マスタ装置との時刻差に基づき、前記イベント発生部のイベントの発生タイミングを前記マスタ装置に近づけるように、前記イベント間隔情報を補正するイベント間隔補正部と
を備えた通信装置。
【請求項２】
前記イベント発生部で発生したイベントの１つである第１のイベントの発生時刻を表す前記第１タイムスタンプと、前記第２タイムスタンプと、前記時刻差とに基づき、前記第１のイベントと前記マスタ装置で発生した前記イベントの発生のタイミング差である第１タイミング差を計算し、
前記第１タイミング差と前記一定時間間隔の値に基づき、前記第１のイベントに対して前記マスタ装置で最も時間的に近く発生したまたは発生する予定のイベントと前記第１のイベントとのタイミング差である第２タイミング差を計算する
タイミング差計算部をさらに備え、
前記イベント間隔補正部は、前記第２タイミング差に基づき、前記イベント間隔情報を補正する
請求項１に記載の通信装置。
【請求項３】
前記イベント間隔補正部は、前記第２タイミング差を０または０へ向けて小さくするイベント間隔情報の値を決定し、前記決定した値に前記イベント間隔情報の値がイベント発生ごとに徐々に近づくように、前記イベント間隔情報をイベント発生ごとに補正する、
請求項１または２に記載の通信装置。
【請求項４】
時刻差計算部と、
前記マスタ装置に第１フレームを複数回送信する送信部をさらに備え、
前記受信部は、前記マスタ装置から前記第１フレームごとに第２フレームを受信し、前記第２フレームは、前記マスタ装置が前記第１フレームを受信した時刻を表す受信タイムスタンプと、前記マスタ装置が前記第２フレームを送信した時刻を表す送信タイムスタンプとを含み、
前記時刻差計算部は、
前記マスタ装置が前記第１フレームを受信した時刻と前記第１フレームを前記マスタ装置に送信した時刻との差分の最小値である第１最小値を求め、
前記第２フレームを前記受信部が受信した時刻と前記マスタ装置が第２フレームを送信した時刻との差分の最小値である第２最小値を求め
前記第1および第２最小値に基づき、前記マスタ装置との間の通信の遅延時間を計算し、前記遅延時間を利用して、前記時刻差を計算する
請求項１ないし３のいずれか一項に記載の通信装置。
【請求項５】
前記時刻差計算部は、前記マスタ装置が送信した第２フレームのうち前記第２最小値が得られたときの第２フレームを前記マスタ装置が送信した時刻と、当該第２フレームを前記フレーム受信部が受信した時刻と、前記遅延時間とに基づき、前記時刻差を計算する
請求項４に記載の通信装置。
【請求項６】
一定時間間隔でイベントを発生させるマスタ装置と、ネットワークを介して通信する通信装置であって、
時刻を計時する計時手段と、
イベントの発生時間間隔を指定したイベント間隔情報を計算する時間計算手段と、
前記計時手段に基づき、前記時間計算手段で計算されたイベント間隔情報に従ってイベントを発生させるイベント発生部と、
前記イベント発生部でイベントが発生した時刻を表す第１タイムスタンプを記憶する記憶部と、
前記マスタ装置から、前記マスタ装置でイベントが発生した時刻を表す第２タイムスタンプを記載したフレームを受信する受信部と、
前記第１タイムスタンプと、前記第２タイムスタンプと、あらかじめ取得した前記イベント発生部と前記マスタ装置のイベントの発生のタイミング差とに基づき、前記計時手段と前記マスタ装置との時刻差を計算する時刻差計算部と、
を備え、
前記時間計算手段は、前記時刻差計算部で計算された時刻差に基づき、前記イベント間隔情報を計算する
を備えた通信装置。
【請求項７】
前記時刻差計算部は、複数の第１タイムスタンプと、複数の第２タイムスタンプに基づき、前記時刻差を複数計算し、計算した複数の時刻差を用いて、前記マスタ装置と前記計時手段間での時刻の進みの速さの比率を計算し、
前記時間計算部は、前記時刻差計算部により計算された時刻差と、前記比率に基づき、前記イベント間隔情報を計算する
請求項７に記載の通信装置。
【請求項８】
前記イベント発生部でイベントが発生すると、第１フレームを前記マスタ装置に送信する送信部と、
タイミング差計算部をさらに、備え、
前記受信部は、前記マスタ装置で前記第１フレームが受信された後に前記マスタ装置から送信される第２フレームを受信し、
前記第２フレームは、前記マスタ装置で前記第１フレームを受信した時刻と、前記第１フレームの受信前に前記マスタ装置で発生したイベントの時刻との差分を特定するための情報を含み、
前記タイミング差計算部は、前記第２フレームを受信した時刻と前記第２フレームの受信前に前記イベント発生部で発生したイベントの時刻との差分と、前記第２フレームに記載された前記情報とに基づき、前記イベント発生部と前記マスタ装置のイベント発生のタイミング差を計算する、
請求項６または７に記載の通信装置。
【請求項９】
前記タイミング差計算部は、前記計算したタイミング差と前記一定時間間隔の値に基づき、前記イベント発生部で発生したイベントに対して前記マスタ装置で最も時間的に近く発生したまたは発生する予定のイベントと前記イベント発生部で発生したイベントとのタイミング差を求める
請求項８に記載の通信装置。
【請求項１０】
前記時間計算手段は、前記計算したイベント間隔情報の値へ向けてイベント発生ごとに段階的に前記イベント間隔情報の値が近づくように、前記イベント間隔情報の値をイベント発生ごとに変更する、
請求項６ないし９のいずれか一項に記載の通信装置。
【請求項１１】
請求項１ないし１０のいずれか一項に記載の通信装置と、
前記マスタ装置と
を備えた通信システム。
【請求項１２】
前記通信システムは保護リレーシステムである
請求項１１に記載の通信システム。
【請求項１３】
一定時間間隔でイベントを発生させるマスタ装置と、ネットワークを介して通信する通信方法であって、
時刻を計時する計時手段に基づき、イベントの発生時間間隔を指定したイベント間隔情報に従って、イベントを発生させるイベント発生ステップと、
前記イベント発生ステップでイベントが発生した時刻を表す第１タイムスタンプを記憶装置に記憶するステップと、
前記マスタ装置から、前記マスタ装置で発生したイベントの時刻を表した第２タイムスタンプを記載したフレームを受信する受信ステップと、
前記第１タイムスタンプと、前記第２タイムスタンプと、あらかじめ取得した前記計時手段と前記マスタ装置との時刻差に基づき、前記イベント発生部のイベントの発生タイミングを前記マスタ装置に近づけるように、前記イベント間隔情報を補正する補正ステップと
を備えた通信方法。
【請求項１４】
一定時間間隔でイベントを発生させるマスタ装置と、ネットワークを介して通信する通信装置であって、
イベントの発生時間間隔を指定したイベント間隔情報を計算する時間計算手段と、
時刻を計時する計時手段に基づき、前記時間計算手段で計算されたイベント間隔情報に従ってイベントを発生させるイベント発生部と、
前記イベント発生部でイベントが発生した時刻を表す第１タイムスタンプを記憶装置に記憶するステップと、
前記マスタ装置から、前記マスタ装置でイベントが発生した時刻を表す第２タイムスタンプを記載したフレームを受信する受信ステップと、
前記第１タイムスタンプと、前記第２タイムスタンプと、あらかじめ取得した前記イベント発生部と前記マスタ装置のイベントの発生のタイミング差を表す情報とに基づき、前記計時手段と前記マスタ装置との時刻差を計算する時刻差計算ステップと、
を備え、
前記時間計算ステップは、前記時刻差計算ステップで計算された時刻差に基づき、前記イベント間隔情報を計算する
を備えた通信方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明の実施形態とは、通信装置、通信システムおよび通信方法に関する。
【背景技術】
【０００２】
従来の時刻同期システムには、スレーブとマスタの時刻の差を高確度に推定し、時刻の差がなくなるように、スレーブの時刻を調整するものがあった。しかし、このシステムは、スレーブとマスタのそれぞれの定期的なイベントの発生タイミングを同期する目的に対して適用した場合、補正する時刻の差が、イベントの間隔より大きいと、同期完了までに過度な時間を要することがある。
【０００３】
また、マスタにおけるインベント発生タイミングから、マスタからの同期フレーム受信までの時間を利用し、スレーブのイベント発生タイミングを、基準となるマスタに合わせるものがあった。しかし、スレーブとマスタのイベント発生タイミングを高確度に合わせることはできなかった。
【０００４】
このように、従来では、スレーブとマスタのイベント発生タイミングを短時間かつ高確度に合わせることはできないという問題があった。
【先行技術文献】
【特許文献】
【０００５】
【特許文献１】特開２００９‐１８２６５９号公報
【特許文献２】特表２０１１‐５２５３０８号公報
【発明の概要】
【発明が解決しようとする課題】
【０００６】
本発明の実施形態は、マスタ装置に対しイベント発生タイミングを高確度に合わせることを目的とする。
【課題を解決するための手段】
【０００７】
本発明の一態様としての通信装置は、一定時間間隔でイベントを発生させるマスタ装置と、ネットワークを介して通信する通信装置であって、計時手段と、イベント発生部と、記憶部と、受信部と、イベント間隔補正部とを備える。
【０００８】
前記計時手段は時刻を計時する。
【０００９】
前記イベント発生部は、前記計時手段に基づき、イベントの発生時間間隔を指定したイベント間隔情報に従って、イベントを発生させる。
【００１０】
前記記憶部は、前記イベント発生部でイベントが発生した時刻を表す第１タイムスタンプを記憶する。
【００１１】
前記受信部は、前記マスタ装置から、前記マスタ装置で発生したイベントの時刻を表した第２タイムスタンプを記載したフレームを受信する。
【００１２】
前記イベント間隔補正部は、前記第１タイムスタンプと、前記第２タイムスタンプと、あらかじめ取得した前記計時手段と前記マスタ装置との時刻差に基づき、前記イベント発生部のイベントの発生タイミングを前記マスタ装置に近づけるように、前記イベント間隔情報を補正する。
【図面の簡単な説明】
【００１３】
【図１】第１の実施形態に係わるネットワーク構成図。
【図２】第１の実施形態に係るスレーブの構成を示すブロック図。
【図３】第１の実施形態に係るマスタの構成を示すブロック図。
【図４】第１の実施形態に係るスレーブの同期フレーム送信処理のフローチャート。
【図５】第１の実施形態に係るスレーブの同期フレーム受信処理のフローチャート。
【図６】第１の実施形態に係るスレーブとマスタのイベント生成のフローチャート。
【図７】第１の実施形態に係るマスタの同期フレーム受信処理のフローチャート。
【図８】第１の実施形態に係る同期フレームのシーケンス。
【図９】第１の実施形態に係る時刻差とイベントタイミング差の関係を示す図。
【図１０】第１の実施形態に係る近接するスレーブとマスタのイベントの関係を示す図。
【図１１】第１の実施形態に係る近接するスレーブとマスタのイベントタイミング差の推定処理のフローチャート。
【図１２】第２の実施形態に係るスレーブの構成を示すブロック図。
【図１３】第２の実施形態に係るスレーブの同期フレーム受信処理のフローチャート。
【図１４】第２の実施形態に係る同期フレームのシーケンス図。
【発明を実施するための形態】
【００１４】
以下、図面を参照しながら、本発明の実施形態について説明する。
【００１５】
（第１の実施形態）
図１は、第１の実施形態に係わる通信システムの全体構成の一例を示す。
【００１６】
この通信システムは、複数のスレーブ装置（以下、スレーブと呼ぶ）１１と、マスタ装置（以下、マスタと呼ぶ）１３とを具備する同期システムである。スレーブ１１およびマスタ１３は、通信ネットワーク１２を介して接続され、相互間でフレームを送受信可能な通信装置である。
【００１７】
スレーブ１１およびマスタ１３では、それぞれイベントが発生し、相互にイベントに係る情報を通知し合う。マスタ１３は、一定の時間間隔でイベントを発生させる。スレーブ１１は、イベントの発生時間間隔を指定したイベント間隔情報に従って、イベントを発生させる。スレーブ１１は、マスタ１３とイベントの発生タイミングを高確度に同期させるように、マスタ１３と同期処理を行って、イベント間隔情報を適宜補正する機能を有する。
【００１８】
本同期システムは、例えば保護リレーシステムに適用される同期システムである。この場合、イベントは、電気量（電流・電圧値）を計測し、保護リレー（スレーブ、マスタ）同士で通知し合うことを指す。ただし、本実施形態は、保護リレーシステムに限定されるものではない。本実施形態は、発生させるイベントのタイミングが複数の装置で同期している必要があるシステム全般に適用可能である。
【００１９】
また、スレーブの台数は１台の場合から複数台の場合がある。マスタの台数も１台とは限らず、バックアップのために２台以上接続されている場合もある。
【００２０】
通信ネットワーク１２は、無線ネットワークまたは有線ネットワークであることを問わない。また、通信ネットワーク１２で使用する物理層やリンク層のプロトコルは、特定のものに限定されない。
【００２１】
図２は、第１の実施形態に関わるスレーブのブロック図である。
【００２２】
このスレーブは、ネットワーク処理部１０１と、プロトコル処理部１０２と、時刻差計算部１０３と、タイミング差計算部１０４と、イベント間隔補正部１０５と、タイマー１０６、イベント生成部１０７、イベント間隔記憶部１０８と、タイムスタンプ記憶部１０９とを備えている。
【００２３】
ネットワーク処理部１０１は、通信ネットワークに対してフレームの送受信を行うインタフェースである。フレームには、イベントの内容（たとえば電気量の値）を通知するイベント用フレームや、同期フレームがある。その他の種類のフレームがあってもよい。
【００２４】
タイマー１０６は、水晶発振器を有し、水晶発振器の出力信号の周期をカウントすることで、時刻を計時する計時手段を含む。１カウント毎に、時刻が１進むとする。
【００２５】
ネットワーク処理部１０１は、同期フレームの送信時の時刻を表すタイムスタンプ、同期フレームの受信時の時刻を表すタイムスタンプを記録する機能を備える。タイムスタンプは、その時の計時手段が示す時刻を表す。
【００２６】
プロトコル処理部１０２は、同期システムを構成する装置が互いに送受信する共通の情報の形式、および送受信の手順を処理する。また、プロトコル処理部１０２は、マスタから受信した同期フレームに記載されているタイムスタンプ（後述）を、時刻差計算部１０３に渡す機能を持つ。
【００２７】
イベント間隔記憶部１０８は、イベントの発生時間間隔を表すイベント間隔情報を記憶する。デフォルト値として、たとえばマスタと同じイベント間隔の値が記憶されている。
【００２８】
タイマー１０６は、あらかじめ設定された時間が経過すると、イベントの発生タイミングを通知するシグナルを発生させ、シグナルをイベント生成部１０７に伝える。シグナルを発生すると、そのときのイベント間隔記憶部１０８に記憶されているイベント間隔情報の値が次のイベント発生までの時間として設定され、その設定された時間が経過すると、シグナルを発生させる。タイマー１０６への設定は、イベント生成部１０７がタイマー１０６からシグナルを受けた時点で、イベント間隔記憶部１０８の値を読み込んで次のイベント発生までの時間として設定してもよいし、タイマー１０６自身がシグナルを出力後に、イベント間隔記憶部１０８から値を読み込んで自律的に設定を行ってもよい。なお、マスタとスレーブは、それぞれの水晶発振器間に誤差があるため、それぞれの時刻の進みの速度は異なる。
【００２９】
イベント生成部１０７は、タイマー１０６からシグナルを受信すると、イベントを発生させる。保護リレーシステムの場合、図示しない測定手段により測定した電気量の値をイベント用フレームに記載し、ネットワーク処理部１０１に当該イベント用フレームを渡す。
【００３０】
また、タイマー１０６は、同期フレームの送信タイミングを通知するシグナルを発生させ、当該シグナルをプロトコル処理部１０２に送る。タイマー１０６は、たとえばプロトコル処理部１０２から、シグナルを発生させるまでの時間を設定され、設定からその時間が経過したら、プロトコル処理部１０２にシグナルを出力する。
【００３１】
同期フレームの送信タイミングは、任意の方法で定めることができる。たとえばイベント発生タイミングのシグナルを発生させた後、一定時間後に同期フレームの送信タイミングのシグナルを発生させるようにしてもよい。または、マスタからの送信指示を受けることにより、同期フレームの送信タイミングのシグナルを発生させるようにしてもよい。または、あらかじめ定めた一定の時間間隔で、同期フレームの送信タイミングのシグナルを発生させるようにしてもよい。
【００３２】
プロトコル処理部１０２は、タイマー１０６からシグナルを受けると、同期フレームを生成して、ネットワーク処理部１０１を介してマスタに同期フレームを送信する。同期フレームを送信した時刻（カウント値）を表すタイムスタンプ（以下、スレーブ送信タイムスタンプ）を、当該同期フレームに追加してもよい。また、スレーブにおいてイベントが発生した時刻を表すタイムスタンプ（以下、スレーブイベント発生タイムスタンプ）を当該同期フレームに含めてもよい。この場合のイベント発生時刻は、たとえば同期フレームを送信する前の最新のイベントが発生した時刻でもよい。
【００３３】
タイムスタンプ記憶部１０９は、スレーブイベント発生タイムスタンプ、スレーブ送信タイムスタンプ、マスタから同期フレームを受信した時刻を表すタイムスタンプ（スレーブ受信タイムスタンプ）を記憶する。また、マスタがスレーブから同期フレームを受信した時刻を表すタイムスタンプ（マスタ受信タイムスタンプ）、マスタがスレーブに同期フレームを送信した時刻を表すタイムスタンプ（マスタ送信タイムスタンプ）を記憶してもよく、これらのタイムスタンプの取得方法は後述する。
【００３４】
スレーブイベント発生タイムスタンプは、イベント生成部１０７によって電気量の値が記載されたイベント用フレームをネットワーク処理部１０１が送信する時刻を表すものとする。ただし、別の方法として、イベント生成部１０７でイベントのシグナルを受けたタイミングの時刻、または電気量の値をイベント用フレームに記載するタイミングの時刻でもよい。その場合、イベント生成部１０７が、当該タイムスタンプを生成する。
【００３５】
また、スレーブ送信タイムスタンプ、およびスレーブ受信タイムスタンプは、ネットワーク処理部１０１が同期フレームを送信する直前の時刻、および同期フレームを受信した直後の時刻を表し、ネットワーク処理部１０１がこれらのタイムスタンプを取得するものとする。または、スレーブ送信タイムスタンプ、およびスレーブ受信タイムスタンプは、プロトコル処理部１０２で、送信フレーム（同期フレーム）および受信フレーム（同期フレーム）を処理する時刻でもよく、この場合、プロトコル処理部１０２が当該タイムスタンプを取得する。
【００３６】
後述するように、マスタから受信した同期フレームには、マスタが本スレーブからの同期フレームを受信した時刻を表すタイムスタンプ（マスタ受信タイムスタンプ）、マスタでイベントが発生した時刻を表すタイムスタンプ（マスタイベント発生タイムスタンプ）、マスタから同期フレームを本スレーブに送信する時刻を表すタイムスタンプ（マスタ送信タイムスタンプ）を含む。マスタがスレーブから受信した同期フレームに、スレーブ送信タイムスタンプや、スレーブイベント発生タイムスタンプが含まれる場合は、当該タイムスタンプを、マスタがスレーブに送信する同期フレームに転記する。
【００３７】
時刻差計算部１０３は、プロトコル処理部１０２から渡されるタイムスタンプ（マスタ受信タイムスタンプ、マスタ送信タイムスタンプ）と、タイムスタンプ記憶部のタイムスタンプ（スレーブ送信タイムスタンプ、スレーブ受信タイムスタンプ）を利用して、スレーブとマスタの時刻差を計算する。時刻差計算部１０３は、スレーブとマスタの時刻差を、タイミング差計算部１０４に渡す。なお、スレーブ送信タイムスタンプは、プロトコル処理部１０２から受け取る構成もあり得る。スレーブ受信タイムスタンプも同様、プロトコル処理部１０２から受け取る構成もあり得る（詳細は後述）。
【００３８】
タイミング差計算部１０４は、時刻差計算部１０３から受けたスレーブとマスタのタイマーの時刻差と、マスタイベント発生タイムスタンプ（マスタからの同期フレームに記載されている）と、スレーブイベント発生タイムスタンプを利用して、スレーブのイベント発生からマスタのイベント発生までの時間（スレーブとマスタのイベントの発生のタイミング差）を計算する。
【００３９】
スレーブイベント発生タイムスタンプおよび、スレーブ送信タイムスタンプ、およびスレーブ受信タイムスタンプは、スレーブのタイムスタンプ記憶部１０９に記憶したものを利用すればよい。
【００４０】
ただし、スレーブ送信タイムスタンプ、またはスレーブイベント発生タイムスタンプについて、スレーブがマスタに対して送信する同期フレームに当該タイムスタンプを記載した場合は、マスタから受信した同期フレームから当該タイムスタンプを読み出してもよい。これは、マスタがスレーブに送信する同期フレームに当該タイムスタンプを転記するためである。また、スレーブ受信タイムスタンプは、マスタから同期フレームを受信した時に、当該同期フレームの所定フィールドに追加されてプロトコル処理部１０２から渡される構成も可能であり、この場合も、タイムスタンプ記憶部からの読み出しは不要である。
【００４１】
イベント間隔補正部１０５は、タイミング差計算部１０６から受けたスレーブとマスタのイベントタイミング差を０に、あるいは小さくするように、イベント間隔情報を補正する。補正後のイベント間隔情報で、イベント間隔記憶部１０８の値を更新する。
【００４２】
タイマー１０６のタイムアウトによりタイマー１０６からイベントシグナルが出力されると、イベント間隔記憶部１０８内の更新された値の時間がタイマー１０６に新たに設定される。この新たに設定された時間が経過するとタイマー１０６からイベントシグナルが出力され、イベント発生部１０７でイベントが発生する。よって、マスタと高確度でイベント発生を同期させることができる。更新された時間がタイマー１０６に設定された時点で、イベント間隔記憶部内の値をデフォルトのイベント間隔値（マスタと同じイベント間隔値）に戻してもよい。これにより、同期処理の頻度が少ない場合でも、高確度でマスタと同期し続けることが可能となる。また、イベント間隔情報を補正する際は、一度に補正する他、複数回のイベントに分けて段階的に細かく補正することも可能である。すなわち、算出したイベント間隔の値にイベント間隔情報の値がイベント発生ごとに徐々に近づくように、イベント間隔情報をイベント発生ごとに補正することも可能である。
【００４３】
図３は第１の実施形態に関わるマスタのブロック図である。
【００４４】
このマスタは、ネットワーク処理部２０１と、プロトコル処理部２０２と、タイマー２０３と、イベント生成部２０４と、タイムスタンプ記憶部２０５とを備えている。
【００４５】
ネットワーク処理部２０１は、通信ネットワーク１２に対してフレームの送受信を行うインタフェースである。フレームの種類には、同期フレームおよび、イベント用フレームがある。その他の種類のフレームがあってもよい。
【００４６】
プロトコル処理部２０２は、同期システムを構成する装置が互いに送受信する共通の情報の形式、および送受信の手順を処理する。
【００４７】
タイマー２０３は、一定時間が経過するごとに、イベントの発生タイミングを通知するシグナルを発生させ、シグナルをイベント生成部２０４に伝える。なお、タイマー２０３は、水晶発振器と、水晶発振器の出力信号の周期をカウントすることにより時刻を計時する計時手段を含んでいる。本実施形態では、カウント値が時刻を表すとして説明を行う。
【００４８】
イベント生成部２０４は、タイマー２０３からシグナルを受信して、イベントを発生させる。保護リレーシステムの場合、図示しない測定手段により測定された電気量の値をフレーム（イベント用フレーム）に記載し、ネットワーク処理部２０１にフレームを渡す。ネットワーク処理部２０１は、当該フレームを、予め指定された他の保護リレー装置に送信する。
【００４９】
タイムスタンプ記憶部２０５は、スレーブからの同期フレームを受信した時刻を表すタイムスタンプ（マスタ受信タイムスタンプ）、同期フレームをスレーブに送信した時刻を表すタイムスタンプ（マスタ送信タイムスタンプ）、および、イベント生成部２０４でイベントが発生した時刻を表すタイムスタンプ（マスタイベント発生タイムスタンプ）を記憶する。
【００５０】
マスタイベント発生タイムスタンプは、イベント生成部２０４によって電気量の値が記載されたイベント用フレームをネットワーク処理部２０１が送信する直前の時刻を表す。この場合、ネットワーク処理部２０１が当該タイムスタンプを取得する。別の方法として、マスタイベント発生タイムスタンプは、イベント生成部２０４でイベントのシグナルを受けたタイミング、または電気量の値をイベント用フレームに記載するタイミングの時刻でもよく、この場合、イベント生成部２０４が当該タイムスタンプを取得する。
【００５１】
また、マスタ受信タイムスタンプ、マスタ送信タイムスタンプは、ネットワーク処理部２０４による同期フレームを受信直後または送信直前の時刻を表すとし、この場合、ネットワーク処理部２０４が当該タイムスタンプを取得する。または、マスタ受信タイムスタンプ、マスタ送信タイムスタンプは、プロトコル処理部２０２で、受信フレーム（同期フレーム）または送信フレーム（同期フレーム）を処理した時刻もよく、この場合、プロトコル処理部２０２が、当該タイムスタンプを取得する。
【００５２】
プロトコル処理部２０２は、スレーブから同期フレームを受信すると、当該スレーブへ返信する同期フレームを生成する。スレーブへ送信する同期フレームには、マスタイベント発生タイムスタンプ（たとえば最新のイベント発生時刻のタイムスタンプ）、マスタ受信タイムスタンプ、マスタ送信タイムスタンプを記載する。スレーブから受信した同期フレームに、スレーブ送信タイムスタンプ、またはスレーブイベント発生タイムスタンプ等が記述されているとき、これらのタイムスタンプを、スレーブに送信する同期フレームに転記する。プロトコル処理部２０２は、このように生成した同期フレームをスレーブに送信する。
【００５３】
図８を用いて、スレーブとマスタの間での同期フレームのやりとりのシーケンスを説明する。
【００５４】
t1は、スレーブ送信タイムスタンプ、t2はマスタ受信タイムスタンプ、t3はマスタ送信タイムスタンプ、t4はスレーブ受信タイムスタンプを表す。これらのタイムスタンプを、同期フレームを介して、スレーブとマスタがやりとりする。
【００５５】
タイムスタンプt1は、前述したように、スレーブが送信する同期フレームに記載されて送信されて、マスタの送信する同期フレームに転記され、スレーブに再度届けられてもよい。あるいは、マスタへ送信する同期フレームに記載することなく、スレーブのタイムスタンプ記憶部１０９に記憶させてもよい。
【００５６】
タイムスタンプt2とt3については、t2とt3がマスタの送信する同期フレームに記載される。別の方法として、t3-t2が、同期フレームに記載される方法もある。なお、「-」は減算を表す。
【００５７】
図示のシーケンスは、スレーブが先に同期フレームを送信し、その同期フレームにマスタが応答して、同期フレームを送信するというシーケンスである。ただし、本実施形態はこれに限定されず、別のシーケンスも可能である。例えば、マスタがスレーブに同期フレームの送信を促すフレームを送り、その後、図８に示すシーケンスが開始される方法でもよい。または、スレーブとマスタがそれぞれ独立したタイミングに従って、同期フレームを送り合う方法もある。
【００５８】
同期フレームのシーケンスは1回のみに限らず、定期的、もしくは不定期に複数回繰り替えされる。
【００５９】
以下、図２に示したスレーブの動作について詳細に説明する。
【００６０】
図４は、スレーブによる同期フレームの送信時の動作を示すフローチャートである。
【００６１】
まず、プロトコル処理部１０２は、同期フレームの送信周期が到来したことを知らせるシグナルを、タイマー１０６から受信するまで待機する（ステップS101）。
【００６２】
次に、プロトコル処理部１０２は、タイマー１０６からシグナルを受信すると、マスタ宛ての同期フレームを生成して、ネットワーク処理部１０１に同期フレームを渡す（ステップS102）。このとき、プロトコル処理部１０２は、次の同期フレーム生成のための時間をタイマー１０６に設定してもよい。
【００６３】
次に、ネットワーク処理部１０１は、同期フレームを送信する時刻を表すタイムスタンプ（スレーブ送信タイムスタンプ）t1を、タイムスタンプ記憶部１０９に記録する（ステップS103）。または、タイムスタンプ記憶部１０９に記録するのではなく、送信する同期フレームに、当該タイムスタンプt1を記載してもよい。タイムスタンプの生成は、プロトコル処理部１０２が、同期フレームの生成時に行ってもよい。スレーブイベント発生タイムスタンプを同期フレームに記載してもよい。
【００６４】
次に、ネットワーク処理部１０１は、同期フレームをマスタに送信する（ステップS104）。
【００６５】
図５は、スレーブによる同期フレームの受信時の動作を示すフローチャートである。
【００６６】
まず、ネットワーク処理部１０１は、フレームを受信し、受信したフレームをプロトコル処理部１０２に渡す。このとき、フレームを受信した時刻を表すタイムスタンプ（スレーブ受信タイムスタンプ）t4を、タイムスタンプ記憶部１０９に記録する（ステップS201）。当該タイムスタンプt4を、タイムスタンプ記憶部１０９に記録するのではなく、受信したフレームの所定フィールドに追記する構成も可能である。
【００６７】
次に、プロトコル処理部１０２は、受信したフレームが同期フレームであるか否かを判断する（ステップS202）。同期フレームでなければ、そのフレームの種類に応じた処理を行い、再度、フレーム受信の待機に戻る。この場合、タイムスタンプ記憶部１０９に記録したタイムスタンプt4を消去してもよい。フレームにタイムスタンプt4を追記した場合は、当該フレームの処理では、タイムスタンプt4は無視すればよい。
【００６８】
マスタから受信したフレームが同期フレームであれば、同期フレームに記載されている複数のタイムスタンプを読み出して、時刻差計算部１０３に渡す。また、これらのタイムスタンプを、タイムスタンプ記憶部１０９に記憶してもよい。
【００６９】
マスタから受信した同期フレームに記載されているタイムスタンプは、マスタ受信タイムスタンプt2と、マスタ送信タイムスタンプt3と、マスタイベント発生タイムスタンプを含む。タイムスタンプt2,t3の代わりに、タイムスタンプの差t3-t2が記載されている場合は、タイムスタンプt2,t3の代わりに、t3-t2の値を、時刻差計算部１０３に渡す。t3-t2の値をタイムスタンプ記憶部１０９に記憶してもよい。また、マスタから受信した同期フレームに、スレーブ送信タイムスタンプt1やスレーブイベント発生タイムスタンプが含まれる場合は、当該タイムスタンプも時刻差計算部１０３に渡す。
【００７０】
次に、時刻差計算部１０３は、タイムスタンプt1,t2,t3,t4を利用して、スレーブとマスタの時刻差を計算する（ステップS203）。タイムスタンプt1,t4は、プロトコル処理部１０２から受けない場合は、タイムスタンプ記憶部１０９から読み出すことにより取得する。スレーブとマスタの時刻差の計算方法は後述する。
【００７１】
時刻差計算部１０３は、計算した時刻差と、プロトコル処理部１０２から渡されたマスタイベント発生タイムスタンプを、タイミング差計算部１０４に渡す。
【００７２】
なお、時刻差計算部１０３は、タイムスタンプt3-t2の結果を渡される場合、タイムスタンプt1,t4の代わりに、t4-t1の結果をプロトコル処理部１０２から受け取って、これを利用して時刻差を計算することも可能である。プロトコル処理部１０２ではなく、タイムスタンプ記憶部１０９にアクセス可能な任意の処理部から、t4-t1の結果を受け取る形態も可能である。
【００７３】
ここで、ステップS203における、スレーブとマスタの時刻差の計算方法について詳細に説明する。
【００７４】
まず、マスタおよびスレーブ間の通信遅延を計算し、その通信遅延とタイムスタンプt3を用いて、マスタの現在時刻（スレーブの時刻がt4のときのマスタの時刻）を計算する。さらに、スレーブの現在時刻（タイムスタンプt4）から、計算したマスタの現在時刻を差し引いた値を、スレーブとマスタの時刻差とする。例えば、以下のような計算を行う。
【数１】
2014236443.tif 000003
【００７５】
上述した通信遅延の計算例は、差（t2-t1）と差（t4-t3）を足すことで、往復時間を求め、それを半分にすることで、片道の通信遅延とした例である。タイムスタンプt1,t2,t3,t4の意味は、図８を用いて前述した通りである。t1,t2,t3,t4を利用した方法であれば、計算方法は問わない。
【００７６】
さらに正確性の高い通信遅延、およびスレーブとマスタの時刻差を計算する方法を示す。例えば、過去N回の同期フレームのやりとりのシーケンスに基づき、以下のように計算できる。
【数２】
2014236443.tif 000004
【００７７】
min（t2j-t1j）(jは１〜Nのいずれか)は、過去N回スレーブからマスタへ送信した同期フレームのt2-t1を比較し、最も値の小さいものである。min（t4i-t3i）(iは１〜Nのいずれか)は、過去N回のマスタからスレーブへ送信した同期フレームのt4-t3を比較し、最も値の小さいものである。
【００７８】
それぞれ最小の値を選択することで、スレーブからマスタ、マスタからスレーブの両方向の同期フレームのそれぞれの中で、最も通信遅延の小さいものを選択することになる。
【００７９】
両方向とも通信遅延が低いことは、すなわち両方向の通信遅延が同じまたは非常に近い可能性が高いということである。
【００８０】
できるだけ等しい通信遅延を持つ同期フレームの往復遅延の半分を求めることで、計算した片道の通信遅延を、マスタおよびスレーブ間の真実の通信遅延に近づけることができる。
【００８１】
そして、スレーブとマスタの時刻差は、t4-t3が最小値を与えるときのt3argmin(t4i-t3i)と、t4-t3が最小値を与えるときのt4argmin(t4i-t3i)用いて、上記のように計算できる。
【００８２】
なお、通信遅延の計算結果の正確性の許容度によっては、過去N回の最も小さい値ではなく、例えば、2番目に小さい値まで選択可能とするなど、許容される範囲で選択する余地を与えてもよい。
【００８３】
次に、図５のステップS204において、タイミング差計算部１０４は、時刻差計算部１０３から渡されたスレーブとマスタの時刻差と、マスタイベント発生タイムスタンプと、タイムスタンプ記憶部１０９に記憶されているスレーブイベント発生タイムスタンプと、を用いて、スレーブのイベント発生からマスタのイベント発生までの時間（スレーブとマスタのイベントの発生のタイミング差）を計算する。なお、スレーブイベント発生タイムスタンプはプロトコル処理部１０２から時刻差計算部１０３を介して受け取る構成も可能である。タイミング差計算部１０４は、計算したスレーブとマスタのイベントタイミング差を、イベント間隔補正部１０５へ渡す。
【００８４】
以下、スレーブとマスタのイベントタイミング差の計算方法を説明する。図９は、スレーブとマスタの時刻差と、スレーブとマスタのイベントタイミング差の違いを説明する図である。
【００８５】
tはマスタ基準時での任意の時刻を表す。st(t)は、マスタ基準時での時刻tのときのスレーブ基準時での時刻を表す。×はイベント発生を表す。
【００８６】
temは、マスタ基準時でのマスタのイベント発生時刻を表す。
【００８７】
tesは、マスタ基準時でのスレーブのイベント発生時刻を表す。
【００８８】
st(tes)は、スレーブ基準時でのスレーブのイベント発生時刻を表す。
【００８９】
この時、マスタイベント発生タイムスタンプはtem、スレーブイベント発生タイムスタンプはst(tes)に該当する。また、マスタ基準時での時刻がtesの時のスレーブとマスタの時刻差は、tes-st(tes)となる。この時刻差が、時刻差計算部１０３から受け取る値に該当する。
【００９０】
次に、マスタ基準時に基づく、スレーブとマスタのイベントのタイミング差はtes-temである。ただし、tesは、マスタ基準時でのスレーブのイベント発生時の時刻であるため、実測できない値である。そこで、前述したスレーブとマスタの時刻差(=tes-st(tes))の値を用いて、スレーブのイベント発生からマスタのイベント発生までの時間（スレーブとマスタのイベントのタイミング差）は、以下のように表せる。
【００９１】
スレーブのイベント発生からマスタのイベント発生までの時間= st(tes)−tem−（スレーブとマスタの時刻差）
以上がスレーブとマスタのイベントタイミング差の計算方法である。
【００９２】
次に、ステップS205において、イベント間隔補正部１０５は、スレーブのイベント発生からマスタのイベント発生までの時間（スレーブとマスタのイベントのタイミング差）から、イベント間隔の補正を行う。
【００９３】
イベント間隔の補正は、スレーブのイベント発生からマスタのイベント発生までの時間（スレーブとマスタのイベントのタイミング差）を小さくするように、たとえば0にするように、イベント間隔記憶部１０８に現在設定されているイベント間隔の値を補正する。たとえば、スレーブとマスタのイベントのタイミング差がx（もしくは-x）であれば、イベント間隔をx縮める(もしくは伸ばす)。または、数回のイベント発生を経てイベント間隔が合計でx縮まる（伸びる）ように、複数回に分けてイベント間隔を縮めて（伸ばして）もよい。
【００９４】
次に、イベント間隔補正部１０５は、補正したイベント間隔をイベント間隔記憶部１０８に保存する（ステップS206）。タイマー１０６は、現在自身に設定されている値でタイムアウトしたら、次にイベント間隔記憶部１０８における補正後のイベント間隔の値が設定される。当該補正後の値が設定された後、イベント間隔記憶部１０８の値を、デフォルトのイベント間隔の値（マスタに設定されているのと同じイベント間隔の値）に設定してもよい。これにより、同期処理の頻度が少ない場合も、マスタと高い確度で同期させ続けることができる。
【００９５】
ここで、上述したステップS204において計算するスレーブとマスタのイベントのタイミング差は、スレーブのイベントに対して、最も時間的に近接するマスタのイベントとの時間であることが望ましい。ここで言うスレーブのイベントは、たとえばマスタに同期フレームを送信する前に発生した直前のイベント、あるいは、マスタからの同期フレームを受信する直前に発生した最新イベントなど、任意のイベントを用いることができる。スレーブのイベントに近接するマスタのイベントは、発生済みのイベントではなく、将来に発生するマスタのイベントの場合もありうる。
【００９６】
同期フレームから得られたマスタイベント発生タイムスタンプtem（図９参照）は、スレーブのイベントに対して最近接するマスタのイベント発生時刻を示していない可能性もある。そこで、以下、スレーブのイベントに対して最近接するマスタのイベントとの間の時間（タイミング差）の求め方を示す。
【００９７】
まず、図１０を使って、スレーブのイベントに対して最近接するマスタのイベントについて説明する。
【００９８】
スレーブのイベント1に対して、マスタの先発のイベントAと、後発のイベントBがある。マスタにおける先発のイベントAは、後発のイベントBよりもイベント1との時刻差が短く、先発のイベントAを、スレーブのイベント１に対して最近接するマスタのイベントとする。
【００９９】
逆に、マスタにおける後発のイベントBの方が、イベント1との時刻差が短い場合は、後発のイベントが、イベント1に対して最近接するマスタのイベントとなる。
【０１００】
当然ながら、マスタにおける先発のイベントAの前に発生したイベントと、後発のイベントBの後に発生したイベントも、スレーブのイベント1に対して最近接するマスタのイベントとはならない。
【０１０１】
ここで、同期フレームから得られたタイムスタンプtem（図９参照）のマスタのイベントは、スレーブのイベントに対して最近接のイベントの時刻を示さない可能性がある。これは、同期フレームにマスタイベント発生タイムスタンプが記載されてから、スレーブが同期フレームを受信するまでに時間が経過するためである。従って、同期フレームに記載されたマスタイベント発生タイムスタンプは、スレーブにおけるどのイベントと最近接するのかわからない。ステップS204の説明で示した計算方法で得られるイベントタイミング差は、スレーブのイベント発生から、マスタで複数のイベントを隔てた時間となる可能性がある。
【０１０２】
図１１を用いて、スレーブのイベントに対して最近接するマスタのイベントとのイベントのタイミング差の推定方法を説明する。この処理を、図５のステップS204の処理の中で適用することができる。
【０１０３】
まず、上述したステップS204の説明で示した計算方法で得られたスレーブとマスタのイベントのタイミング差をパラメータZに与え（ステップS500）、パラメータZと、デフォルトのイベント間隔（マスタと同じ値）を比較する（ステップS501）。
【０１０４】
次に、パラメータZが、当該イベント間隔より大きい場合は、パラメータZを、当該イベント間隔で割った余りを求め、求めた余りをパラメータZに入力する（ステップS502）。
【０１０５】
ステップS501でパラメータZが当該イベント間隔以下である場合、またはステップS502を経過した後、パラメータZを、イベント間隔の2分の1の値と比較する（ステップS503）。
【０１０６】
パラメータZの方が、イベント間隔の2分の1よりも大きい場合は、パラメータZから当該イベント間隔を減算し、減算後の値をパラメータZに入力する（ステップS504）。
【０１０７】
ステップS503でパラメータZがイベント間隔の2分の1以下であると判断された場合、またはステップS504を経由した後、パラメータZの値を、スレーブのイベントに対して最近接するマスタのイベントとのイベントのタイミング差として決定する（ステップS505）。
【０１０８】
以上の処理を行うことで、スレーブのイベントに対して最近接するマスタのイベントとの間で、スレーブのイベント発生からマスタのイベント発生までの時間（スレーブとマスタのイベントのタイミング差）を推定できる。
【０１０９】
図６は、図２に示したスレーブ、および図３に示したマスタのイベント生成時の動作を示すフローチャートである。
【０１１０】
まず、イベント生成部１０７、２０４は、タイマー１０６、２０３からのシグナルを受信するまで待機する（ステップS301）。
【０１１１】
次に、イベント生成部１０７、２０４は、タイマー１０６、２０３からのシグナルを受信すると、イベント処理を実施する（ステップS302）。本実施形態で想定する保護リレーの場合、イベント処理は、電気量（電流・電圧値）の値を取得し、イベント用フレームに記載する。なお、イベント生成部１０７、２０４は、タイマー１０６、２０３からのシグナルを受けたら、次のイベントまでの時間をタイマー１０６、２０３に設定してもよい。スレーブは、イベント間隔記憶部１０６に記憶されている値を設定し、マスタは所定のイベント間隔値を設定する。
【０１１２】
次に、ネットワーク処理部１０１、２０１は、イベント発生時のタイムスタンプ（スレーブイベント発生タイムスタンプ、マスタイベント発生タイムスタンプ）を生成し、当該タイムスタンプをイベント用フレームに記載する（ステップS303）。そして、イベント用フレームをネットワーク処理部１０１、２０１に渡す。
【０１１３】
次に、ネットワーク処理部１０１、２０１は、イベント用フレームを通信ネットワーク１０２に送信する（ステップS304）。イベント用フレームに記載する宛先は事前に与えられており、イベント生成部またはネットワーク処理部でイベント用フレームに追加する。
【０１１４】
図７は、図３に示したマスタの同期フレーム受信時の動作を示すフローチャートである。
【０１１５】
まず、ネットワーク処理部２０１は、通信ネットワーク１０２からフレームを受信し、受信したフレームをプロトコル処理部２０２に渡す。このとき、フレーム受信時のタイムスタンプ（マスタ受信タイムスタンプ）t2をタイムスタンプ記憶部２０５に記録する。または、マスタ受信タイムスタンプをフレームの所定フィールドに追記してもよい（ステップS401）。
【０１１６】
次に、プロトコル処理部２０２は、受信したフレームが、同期フレームであるか否かを判断する（ステップS402）。
【０１１７】
同期フレームでなければ、そのフレームの種類に応じた処理を行い、再度、フレーム受信の待機に戻る。この場合、タイムスタンプ記憶部２０５に記録したタイムスタンプt2を消去してもよい。フレームにタイムスタンプt2を追記した場合は、当該フレームの処理では、タイムスタンプt2は無視すればよい。
【０１１８】
プロトコル処理部２０２は、受信したフレームが同期フレームであれば、スレーブ宛てに送信する同期フレームを生成する（ステップS403）。宛先のスレーブは、同期フレームの送信元アドレスを参照して特定すればよい。
【０１１９】
次に、プロトコル処理部２０２は、タイムスタンプ記憶部２０５から、マスタイベント発生タイムスタンプを取得し、当該タイムスタンプを同期フレームに追記する（ステップS404）。タイムスタンプを生成するイベントは、マスタで発生した最新のイベントであるとするが、これに限定されず、それより前のイベントであってもよい。
【０１２０】
次に、プロトコル処理部２０２は、マスタイベント発生タイムスタンプ、マスタ受信タイムスタンプt2、マスタ送信タイムスタンプt3を、スレーブ宛てに送信する同期フレームに記載する（ステップS404、S405）。タイムスタンプt3,t2の代わりに、上記2つのタイムスタンプの差t3-t2が記載されていてもよい。タイムスタンプt3は、ネットワーク処理部２０１が送信直前の時刻であることが望ましいが、プロトコル処理部２０４が、同期フレームを生成した時の時刻でもよい。
【０１２１】
また、マスタがスレーブから受信した同期フレームに、スレーブ送信タイムスタンプt1やスレーブイベント発生タイムスタンプが含まれる場合があり、この場合、当該タイムスタンプも、スレーブ宛の同期フレームに記載する。
【０１２２】
次に、ネットワーク処理部２０１は、スレーブ宛の同期フレームを送信する（ステップS406）。
【０１２３】
以上、第１の実施形態によれば、スレーブとマスタの時刻差に基づきスレーブとマスタのイベントの発生のタイミング差を求め、当該タイミング差を小さくするように、スレーブのイベント間隔情報を補正することにより、マスタに対しイベント発生のタイミングを高確度で同期させることが可能となる。特に、スレーブのイベントに対して時間的に最近接するマスタのイベントとのイベントのタイミング差を求めることで、短時間かつ高確度で、マスタに対しイベント発生を同期させることが可能となる。
【０１２４】
（第２の実施形態）
第1の実施形態では、スレーブとマスタの時刻差からスレーブとマスタのイベントのタイミング差を求め、当該イベントのタイミング差からイベント間隔を補正したが、第2の実施形態では、スレーブとマスタのイベントのタイミング差からスレーブとマスタの時刻差を求め、当該時刻差から、時刻パラメータを決定し、さらにイベント間隔を決定することを特徴とする。
【０１２５】
図１２は、第２の実施形態に係わるスレーブのブロック図である。
【０１２６】
このスレーブは、ネットワーク処理部１０１と、プロトコル処理部１０２と、タイミング差計算部１１１と、時刻差計算部１１２と、タイムスタンプ記憶部１０９と、タイマー１０６と、イベント生成部１０７と、時刻パラメータ記憶部１１４と、時間計算部（イベント間隔計算部）１１５を備えている。第1の実施形態との主な差異は、第１の実施形態に係る時刻差計算部１０３、タイミング差計算部１０４、イベント間隔補正部１０５、イベント間隔記憶部１０８が除去され、タイミング差計算部１１１と、時刻差計算部１１２と、時刻パラメータ記憶部１１４と、時間計算部１１５が追加された点である。以下、第１の実施形態と重複する処理については、変更または拡張された処理を除き、重複する説明を省略する。
【０１２７】
タイミング差計算部１１１は、プロトコル処理部１０２から渡されるタイムスタンプ（マスタイベント発生タイムスタンプ、マスタ受信タイムスタンプ）と、タイムスタンプ記憶部１０９のタイムスタンプ（スレーブ受信タイムスタンプ、スレーブイベント発生タイムスタンプ）を利用して、スレーブのイベント発生からマスタのイベント発生までの時間（スレーブとマスタのイベントのタイミング差）を計算する。第１の実施形態と同様、タイムスタンプ記憶部１０９のタイムスタンプは、プロトコル処理部１０２から取得する構成もあり得る。タイミング差計算部１１１は、計算したイベントタイミング差を、時刻差計算部１１２に渡す。
【０１２８】
時刻差計算部１１２は、タイミング差計算部１１１から受けたスレーブとマスタのイベントのタイミング差と、マスタイベント発生タイムスタンプと、タイムスタンプ記憶部１０９に記憶されているスレーブイベント発生タイムスタンプとを利用して、スレーブとマスタの時刻差を計算する。
【０１２９】
また、スレーブイベント発生タイムスタンプおよび、スレーブ送信タイムスタンプは、スレーブのタイムスタンプ記憶部１０９に記録したものを利用してもよいが、スレーブがマスタに対して送信する同期フレームに前記２つのタイムスタンプを記載し、マスタがスレーブに同期フレームを送信する際に、前記２つのタイムスタンプを転記し、スレーブが受信したものを利用してもよい。
【０１３０】
時刻差計算部１１２は、スレーブとマスタの時刻差を、クロックオフセットとして得る。また、必要に応じて、スレーブの時刻に対するマスタの時刻の進みの速さの比率を表すクロックレートを計算する。クロックオフセットとクロックレートを総称して時刻パラメータと呼ぶ。クロックレートを計算しない構成も可能で有り、この場合は、クロックレートの値を１として以降の処理を行えばよい。
【０１３１】
クロックレートは、スレーブとマスタとで水晶発振器間の発振周波数の違いから生じる。クロックレートは、同期処理（図８参照）をたとえば２回行って、スレーブの時刻ｔ４（１）、ｔ４（２）と、そのときのマスタの時刻ｔ４’（１）、ｔ４’（２）を取得する。ｔ４’（１）、ｔ４’（２）は、同期処理で時刻差計算部１１２により求めた時刻差（１）、（２）をそれぞれスレーブの時刻ｔ４（１）、ｔ４（２）から減算することで得られる。そして、｛ｔ４’（１）−ｔ４’（２）｝／｛ｔ４（１）−ｔ４（２）｝によりクロックレートを計算できる。なお、上記のクロックオフセットは、これら２回の同期処理の２回目の方を用いて取得してもよいし、１回目の方を用いて取得してもよいし、当該２回の同期処理より後の同期処理で取得してもよい。
【０１３２】
時間計算部１１５は、時刻パラメータ記憶部１１４に記憶された時刻パラメータ（クロックオフセット、クロックレート）に基づき、タイマー１０６に設定するための時間（イベント間隔）を、以下の式で計算する。  
タイマーへ設定する時間（イベント間隔）＝デフォルトのイベント間隔×クロックレート＋クロックオフセット
【０１３３】
クロックレートを算出しない場合は、クロックレートを１として、デフォルトのイベント間隔＋クロックオフセットにより、イベント間隔を計算すればよい。
【０１３４】
タイマー１０６が、タイムアウトによりイベント生成部１０７にシグナルを出力すると、時間計算部１１５が上記式によりイベント間隔を計算し、計算した値を、次のイベント発生までの時間として、タイマー１０６に設定する。タイマー１０６は、設定された時間が経過すると、タイムアウトし、イベント生成部１０７にシグナルを出力する。この後、時刻パラメータ記憶部１１４が更新されない間は、時刻パラメータ記憶部１１４に記憶されている値が、次のタイマー処理でも、適用される。以降、同期処理を複数回繰り返し行って、時刻パラメータの値を逐次更新していくことで、マスタに対しイベント発生のタイミングをより近づけ、高確度でイベント発生を同期させることができる。
【０１３５】
図１４は、第2の実施形態に係わる同期フレームの送受信シーケンスである。スレーブはイベントの発生をトリガとして同期フレームを送信し、マスタもイベントの発生をトリガとして同期フレームを送信する。同期フレームのやり取りの間に、それぞれイベントが２回発生している。
【０１３６】
rmはマスタにおける同期フレームの受信時の時刻を表すタイムスタンプ（マスタ受信タイムスタンプ）、rsはスレーブにおける同期フレームの受信時の時刻を表すタイムスタンプ（スレーブ受信タイムスタンプ）である。タイムスタンプrmとマスタにおいてrmの直前に発生したイベントのタイムスタンプ（またはこれらのタイムスタンプの差分）は、rmの後にマスタで発生したイベントに応じてマスタから送信される同期フレームに記載されて、スレーブに送信される。
【０１３７】
なお遅延時間dはスレーブからマスタへの同期フレーム送信、マスタからスレーブへの同期フレーム送信で同じである場合をここでは示している。なお、dは現実では、必ず同じになるとはいえず、その差は、算出するΔtと現実のΔtとの誤差となる。またΔｔは、スレーブのイベント発生からマスタのイベント発生までの時間を表し、２つとも同じ大きさである場合をここでは示している。なお、Δtも現実では必ず同じになるとはいえず、その差は、算出するΔtと現実のΔtとの誤差となる。tmはマスタイベント発生タイムスタンプと、マスタ受信タイムスタンプrmの差を、tsはスレーブ受信タイムスタンプrsとスレーブイベント発生タイムスタンプの差を表している。詳細は後述する。
【０１３８】
図１３は、第２の実施形態に係わるスレーブの同期フレーム受信時の動作を示すフローチャートである。
【０１３９】
まず、ネットワーク処理部１０１は、マスタからのフレームを受信し、プロトコル処理部１０２に渡す。このとき、フレームを受信した時刻を表すタイムスタンプ（スレーブ受信タイムスタンプ）rsをタイムスタンプ記憶部１０９に記録する。または、当該スレーブ受信タイムスタンプを同期フレームに追記してもよい（ステップS601）。
【０１４０】
次に、プロトコル処理部１０２は、受信したフレームが同期フレームであるか否かを判断する（ステップS602）。同期フレームである場合は、同期フレームに記載されたマスタ受信タイムスタンプrmと、マスタイベント発生タイムスタンプをタイミング差計算部１１１に渡す。
【０１４１】
次に、タイミング差計算部１１１は、プロトコル処理部１０２から受けたタイムスタンプと、スレーブ受信タイムスタンプと、スレーブイベント発生タイムスタンプを利用して、スレーブとマスタのイベントのタイミング差を計算する（ステップS604）。計算したイベントのタイミング差と、マスタイベント発生タイムスタンプを時刻差計算部１１２に渡す。
【０１４２】
ここで、スレーブとマスタのイベントのタイミング差は、図１４に示したように、マスタイベント発生タイムスタンプと、マスタ受信タイムスタンプrmの差をtm、スレーブ受信タイムスタンプrsとスレーブイベント発生タイムスタンプの差をtsとしたとき、以下のような計算式で求められる。
【数３】
2014236443.tif 000005
【０１４３】
ここで、タイミング差は近接するスレーブとマスタのイベントのタイミング差ではない場合がある。そこで、第1の実施形態にて図１０で示したのと同様の変換処理を、上記式で計算されたタイミング差について行うことで、近接するスレーブとマスタのイベントのタイミング差を推定することができる。
【０１４４】
次に、時刻差計算部１１２は、タイミング差計算部１１１から渡されたタイミング差と、マスタイベント発生タイムスタンプと、タイムスタンプ記憶部１０９から渡されたスレーブイベント発生タイムスタンプ、を用いて、スレーブとマスタの時刻差を計算する。そして、時刻差をクロックオフセットとして、時刻パラメータ記憶部１１４に格納する（ステップS604）。また必要に応じて、クロックレートを算出し、時刻パラメータ記憶部１１４に格納する。クロックレートの算出方法は前述した通りである。
【０１４５】
スレーブとマスタの時刻差の計算を、図９を用いて説明する。図９はスレーブとマスタの時刻差と、タイミング差を説明する図である。図に示される各変数の定義は、前述した通りである。
【０１４６】
図９において、マスタイベント発生タイムスタンプはtem、スレーブイベント発生タイムスタンプはst(tes)に該当する。タイミング差計算部１１１から受け取るイベントタイミング差はtes-temの値に相当する。スレーブとマスタの時刻差がイベント周期の2分の1以内に収まるという前提を置くと、st(tes)のときのスレーブとマスタの時刻差はtes-st(tes)である。ただし、tesはスレーブでイベントが発生した時のマスタ基準時での時刻に相当するため、実測できない。そこで、前述のイベントタイミング差=tes-temを用いると、スレーブとマスタ時刻差は、以下のように表せる。  
スレーブとマスタの時刻差 = tem − st(tes) + タイミング差
【０１４７】
以上がスレーブとマスタの時刻差の計算方法である。
【０１４８】
時間計算部１１５は、時刻パラメータ記憶部１１４内の時刻パラメータに基づき、タイマー１０６に設定する時間（イベント間隔）を計算し、計算した値をタイマー１０６に設定する（ステップS605）。イベント間隔の計算のタイミングは、タイマー１０６が直前にタイムアウトした時点でもよいし、それより前に計算して内部のバッファまたは別途の記憶部に記憶しておき、タイマー１０６がタイムアウトしたら、バッファしておいた値を読み出してタイマー１０６に設定してもよい。タイマー１０６は、当該設定されたイベント間隔が経過したら、シグナルを発生させる。
【０１４９】
このように、第２の実施形態によれば、スレーブとマスタのイベントのタイミング差から、スレーブとマスタの時刻差を求め、当該時刻差から時刻パラメータ（クロックオフセット（時刻差そのものに一致）、クロックレート）を求め、当該パラメータに基づき、次のイベント間隔を決定する。このような処理を繰り返し行うことで、マスタのイベントタイミングに徐々に近づけることができ、よって高確度にマスタとイベント発生を同期させることができる
さらに、イベントのタイミング差から時刻差を算出することで、イベント同期だけでなく、通信遅延測定や同期すべき他のアプリケーションなどへの当該時刻差の情報の転用も可能になる。
【０１５０】
また、第1の実施形態で述べた種々のバリエーションは、第２の実施形態に組み合わせることも可能である。たとえば第１の実施形態ではイベント間隔を複数のイベントを経て段階的に調整する例を示したが、第２の実施形態においてもイベント間隔を複数のイベントを経て段階的に小さくするようにしてもよい。時間計算部は、計算したイベント間隔情報の値へ向けてイベント発生ごとに段階的にイベント間隔情報の値が近づくように、イベント間隔情報の値をイベント発生ごとに変更してもよい。
【０１５１】
このように種々のバリエーションを適用することで、ネットワーク環境に合わせた様々な同期方式を提供することができる。
【０１５２】
なお、上述した各実施形態に係るスレーブまたはマスタは、例えば、汎用のコンピュータ装置を基本ハードウェアとして用いることでも実現することが可能である。すなわち、スレーブおよびマスタが備える各処理部は、上記のコンピュータ装置に搭載されたプロセッサにプログラムを実行させることにより実現することができる。このとき、スレーブおよびマスタは、上記のプログラムをコンピュータ装置にあらかじめインストールすることで実現してもよいし、ＣＤ−ＲＯＭなどの記憶媒体に記憶して、あるいはネットワークを介して上記のプログラムを配布して、このプログラムをコンピュータ装置に適宜インストールすることで実現してもよい。また、スレーブまたはマスタが備える記憶部は、上記のコンピュータ装置に内蔵あるいは外付けされたメモリ、ハードディスクもしくはＣＤ−Ｒ、ＣＤ−ＲＷ、ＤＶＤ−ＲＡＭ、ＤＶＤ−Ｒなどの記憶媒体などを適宜利用して実現することができる。
【０１５３】
本発明のいくつかの実施形態を説明したが、これらの実施形態は、例として提示したものであり、発明の範囲を限定することは意図していない。これら新規な実施形態は、その他の様々な形態で実施されることが可能であり、発明の要旨を逸脱しない範囲で、種々の省略、置き換え、変更を行うことができる。これら実施形態やその変形は、発明の範囲や要旨に含まれるとともに、特許請求の範囲に記載された発明とその均等の範囲に含まれる。
【図１】
2014236443.tif 000006
【図２】
2014236443.tif 000007
【図３】
2014236443.tif 000008
【図４】
2014236443.tif 000009
【図５】
2014236443.tif 000010
【図６】
2014236443.tif 000011
【図７】
2014236443.tif 000012
【図８】
2014236443.tif 000013
【図９】
2014236443.tif 000014
【図１０】
2014236443.tif 000015
【図１１】
2014236443.tif 000016
【図１２】
2014236443.tif 000017
【図１３】
2014236443.tif 000018
【図１４】
2014236443.tif 000019