(57)【要約】  送受信されるＰＤＵの送信時または受信時にタイムスタンプを生成するタイムスタンプ生成部１４２，２４３と、送信データ格納部１２，２２と、受信データ格納部１３，２３と、他のノードに対してデータのリフレッシュ指示、送信データ格納部１２，２２中の周期送信データ、およびタイムスタンプ生成部１４２，２４３から取得したフレーム送信時刻を含むＰＤＵを生成し、他のノードからのＰＤＵを受信すると、該ＰＤＵに含まれる周期送信データを受信データ格納部１３，２３に格納するフレーム処理部１４３，２４４と、ＰＤＵを受信すると前回のＰＤＵを受信してから第１遅延許容時間内につぎのＰＤＵを受信したか、また第１遅延許容時間内につぎのＰＤＵを受信した場合に、該ＰＤＵの他のノードから自ノードまでの伝送時間が第２遅延許容時間内であるかによって、他のノードからのＰＤＵの遅延の発生の有無を判定する片道遅延検出部１４５，２４７と、を備える。
2012035629.tif 000002
【特許請求の範囲】
【請求項１】
伝送路を介して接続された他の通信装置との間で周期通信を行う通信装置において、
時間を計測するクロックと、
通信フレームを送受信する通信手段と、
自通信装置で送受信される前記通信フレームの送信時または受信時に、前記クロックを用いてタイムスタンプを生成するタイムスタンプ生成手段と、
周期的に送信される前記通信フレーム中に格納する周期送信データを格納する送信データ格納手段と、
周期的に受信する前記通信フレーム中の周期送信データを格納する受信データ格納手段と、
前記他の通信装置に対してデータのリフレッシュ指示、前記送信データ格納手段中の前記周期送信データ、および前記タイムスタンプ生成手段から取得した送信タイミングのタイムスタンプであるフレーム送信時刻を含むリフレッシュ指示フレームを生成し、前記他の通信装置からのリフレッシュ指示フレームを受信すると、該リフレッシュ指示フレームに含まれる周期送信データを前記受信データ格納手段に格納するフレーム処理手段と、
前記リフレッシュ指示フレームを受信すると前回の前記リフレッシュ指示フレームを受信してから第１遅延許容時間内につぎのリフレッシュ指示フレームを受信したか、また前記第１遅延許容時間内に前記つぎのリフレッシュ指示フレームを受信した場合に、該リフレッシュ指示フレームの前記他の通信装置から自通信装置までの伝送時間が第２遅延許容時間内であるかによって、前記他の通信装置から送信される通信フレームに遅延が生じているかを判定する片道遅延検出手段と、
を備えることを特徴とする通信装置。
【請求項２】
前記片道遅延検出手段は、前記伝送時間として、前記リフレッシュ指示フレームの受信時に前記タイムスタンプ生成手段から取得したフレーム受信時刻と、前記リフレッシュ指示フレーム内に格納されている前記フレーム送信時刻との差を用いることを特徴とする請求項１に記載の通信装置。
【請求項３】
周期通信時以外に前記他の通信装置に要求フレームを送信し、前記要求フレームを送信してから往復遅延許可時間内に前記要求フレームに対応する応答フレームを受信しない場合に遅延が発生していると判定する往復遅延検出手段を、さらに備えることを特徴とする請求項１または２に記載の通信装置。
【請求項４】
前記リフレッシュ指示フレームを受信すると、前記タイムスタンプ生成手段から今回フレーム受信時刻を取得し、前記今回フレーム受信時刻と、前回の前記リフレッシュ指示フレーム受信時に前記タイムスタンプ生成手段から取得した前回フレーム受信時刻との差を、通信フレームの喪失を示す喪失評価時間と比較して、前記通信フレームの喪失を判定する喪失検出手段をさらに備えることを特徴とする請求項１〜３のいずれか１つに記載の通信装置。
【請求項５】
前記喪失検出手段は、送信する通信フレームのフレーム送信時刻を記憶し、
前記通信手段は、前記リフレッシュ指示フレームを送信する場合に、前回の前記フレーム送信時刻から、前記喪失評価時間の１／２が経過した後につぎのリフレッシュ指示フレームを送信することを特徴とする請求項４に記載の通信装置。
【請求項６】
前記フレーム処理部は、周期通信の開始から所定の間隔で、前記リフレッシュ指示フレームにクロックオフセットの計測指示を含めて送信し、
前記計測指示を含む前記リフレッシュ指示フレームに対する応答フレームを受信すると、クロックオフセットの算出指示と、前記応答フレームの受信タイミングを示すフレーム受信時刻と、を前記リフレッシュ指示フレームに含めて送信する機能をさらに有することを特徴とする請求項１〜５のいずれか１つに記載の通信装置。
【請求項７】
前記通信フレーム中の前記フレーム送信時刻を格納する領域がａビットであり、前記クロックの幅がｂビット（＞ａ）の場合に、
前記フレーム処理手段は、
前記他の通信装置とのコネクション確立時に、前記クロックの上位（ｂ−ａ）ビットを、上位ビット情報として記憶するとともに、コネクション確立要求時に前記上位ビット情報を通信フレームに含めて送信する機能と、周期通信中には前記タイムスタンプ生成手段から得られるタイムスタンプの下位ａビットを、前記フレーム送信時刻を格納する領域に格納したリフレッシュ指示フレームを生成する機能と、を有し、
前記片道遅延検出手段は、前記リフレッシュ指示フレーム中の前記フレーム送信時刻の値を、前記上位ビット情報を用いてｂビットの値にして、片道遅延検出を行うことを特徴とする請求項１または２に記載の通信装置。
【請求項８】
前記通信フレーム中の前記フレーム送信時刻を格納する領域がａビットであり、前記クロックの幅がｂビット（＞ａ）の場合に、
前記フレーム処理手段は、
前記他の通信装置とのコネクション確立時に、前記クロックの上位（ｂ−ａ）ビットを、上位ビット情報として記憶するとともに、コネクション確立要求時に前記上位ビット情報を通信フレームに含めて送信する機能と、
周期通信中には前記タイムスタンプ生成手段から得られるタイムスタンプの下位ａビットを、前記フレーム送信時刻を格納する領域に格納したリフレッシュ指示フレームを生成する機能と、を有し、
前記喪失検出手段は、前記リフレッシュ指示フレーム中の前記フレーム送信時刻の値を、前記上位ビット情報を用いてｂビットの値にして、リフレッシュ指示フレームの喪失検出を行うことを特徴とする請求項４または５に記載の通信装置。
【請求項９】
前記フレーム処理手段は、
前記リフレッシュ指示フレームを送信する場合には、前記フレーム送信時刻の上位（ｂ−ａ）ビット、前記リフレッシュ指示フレームのヘッダ部および前記送信データを格納するデータ部からチェックコードを生成し、前記リフレッシュ指示フレームに含める機能と、
前記リフレッシュ指示フレームを受信する場合には、前記リフレッシュ指示フレームの自装置での受信時刻の下位ａビットと、前記リフレッシュ指示フレーム中のａビットの前記フレーム送信時刻との大小に基づいて前記上位ビット情報を補正し、補正した前記上位ビット情報、受信した前記通信フレームの前記ヘッダ部および前記データ部からチェックコードを生成し、受信した前記リフレッシュ指示フレーム中のチェックコードと一致するかを判定する機能と、を有することを特徴とする請求項７または８に記載の通信装置。
【請求項１０】
前記他の通信装置の有するクロックに対する自通信装置の前記クロックの時刻のずれであるクロックオフセットを記憶するクロックオフセット記憶手段をさらに備え、
前記タイムスタンプ生成手段は、自通信装置で送受信される前記リフレッシュ指示フレームの送信時または受信時に、前記クロックから得られる時刻を前記クロックオフセットで補正したタイムスタンプを生成することを特徴とする請求項１または２に記載の通信装置。
【請求項１１】
前記リフレッシュ指示フレームを受信すると、前記タイムスタンプ生成手段から今回フレーム受信時刻を取得し、前記今回フレーム受信時刻と、前回の前記リフレッシュ指示フレーム受信時に前記タイムスタンプ生成手段から取得した前回フレーム受信時刻との差を、通信フレームの喪失を示す喪失評価時間と比較して、前記通信フレームの喪失を判定する喪失検出手段をさらに備えることを特徴とする請求項１０に記載の通信装置。
【請求項１２】
前記喪失検出手段は、送信する通信フレームのフレーム送信時刻を記憶し、
前記通信手段は、前記リフレッシュ指示フレームを送信する場合に、前回の前記フレーム送信時刻から、前記喪失評価時間の１／２が経過した後につぎのリフレッシュ指示フレームを送信することを特徴とする請求項１１に記載の通信装置。
【請求項１３】
前記他の通信装置から、クロックオフセットの計測指示を含む前記リフレッシュ指示フレームを受信すると、前記計測指示を含むリフレッシュ指示フレームに含まれる前記フレーム送信時刻をマスタ送信時刻として記憶し、前記計測指示を含むリフレッシュ指示フレームの受信タイミングをスレーブ受信時刻として記憶し、前記計測指示を含むリフレッシュ指示フレームに対する応答フレームの送信タイミングをスレーブ送信時刻として記憶する機能と、前記他の通信装置からクロックオフセットの算出指示を含む前記リフレッシュ指示フレームを受信すると、前記算出指示を含むリフレッシュ指示フレームに格納されている前記応答フレームの受信タイミングを示すフレーム受信時刻をマスタ受信時刻として記憶し、前記マスタ送信時刻、前記スレーブ受信時刻、前記スレーブ送信時刻および前記マスタ受信時刻を用いて、前記クロックオフセットを算出するクロックオフセット算出手段をさらに備えることを特徴とする請求項１０〜１２のいずれか１つに記載の通信装置。
【請求項１４】
前記クロックオフセット算出手段は、前記マスタ送信時刻をTm_sndとし、前記スレーブ受信時刻をTs_rcvとし、前記スレーブ送信時刻をTs_sndとし、前記マスタ受信時刻をTm_rcvとすると、次式（１）によって前記クロックオフセットts_offsetを算出することを特徴とする請求項１３に記載の通信装置。
ts_offset＝［Tm_rcv＋Tm_snd−（Ts_rcv＋Ts_snd）］／２  ・・・（１）
【請求項１５】
前記通信フレーム中の前記フレーム送信時刻を格納する領域がａビットであり、前記クロックの幅がｂビット（＞ａ）の場合に、
前記フレーム処理手段は、
前記他の通信装置とのコネクション確立時に、前記他の通信装置から送信される通信フレーム内に格納されている前記他の通信装置のクロックの上位（ｂ−ａ）ビットを上位ビット情報として記憶する機能を有し、
周期通信中には前記タイムスタンプ生成手段から得られるタイムスタンプの下位ａビットを、前記フレーム送信時刻を格納する領域に格納したリフレッシュ指示フレームを生成する機能を有し、
前記片道遅延検出手段は、前記リフレッシュ指示フレーム中の前記フレーム送信時刻の値を、前記上位ビット情報を用いてｂビットの値にして、片道遅延検出を行うことを特徴とする請求項１０に記載の通信装置。
【請求項１６】
前記通信フレーム中の前記フレーム送信時刻を格納する領域がａビットであり、前記クロックの幅がｂビット（＞ａ）の場合に、
前記フレーム処理手段は、
前記他の通信装置とのコネクション確立時に、前記他の通信装置から送信される通信フレーム内に格納されている前記他の通信装置のクロックの上位（ｂ−ａ）ビットを上位ビット情報として記憶する機能を有し、
周期通信中には前記タイムスタンプ生成手段から得られるタイムスタンプの下位ａビットを、前記フレーム送信時刻を格納する領域に格納したリフレッシュ指示フレームを生成する機能を有し、
前記喪失検出手段は、前記リフレッシュ指示フレーム中の前記フレーム送信時刻の値を、前記上位ビット情報を用いてｂビットの値にして、通信フレームの喪失検出を行うことを特徴とする請求項１１または１２に記載の通信装置。
【請求項１７】
前記通信フレーム中の前記フレーム送信時刻を格納する領域がａビットであり、前記クロックの幅がｂビット（＞ａ）の場合に、
前記フレーム処理手段は、
前記他の通信装置とのコネクション確立時に、前記他の通信装置から送信される通信フレーム内に格納されている前記他の通信装置のクロックの上位（ｂ−ａ）ビットを上位ビット情報として記憶する機能を有し、
周期通信中には前記タイムスタンプ生成手段から得られるタイムスタンプの下位ａビットを、前記フレーム送信時刻を格納する領域に格納したリフレッシュ指示フレームを生成する機能を有し、
前記オフセット算出手段は、前記マスタ送信時刻、前記スレーブ受信時刻、前記スレーブ送信時刻および前記マスタ受信時刻を、前記上位ビット情報を用いてｂビットの値にして、クロックオフセットの算出を行うことを特徴とする請求項１３または１４に記載の通信装置。
【請求項１８】
前記フレーム処理手段は、
前記通信フレームを送信する場合には、前記フレーム送信時刻の上位（ｂ−ａ）ビット、前記通信フレームのヘッダ部および前記送信データを格納するデータ部からチェックコードを生成し、前記通信フレームに含める機能と、
前記通信フレームを受信する場合には、前記通信フレーム中のａビットの前記フレーム送信時刻と、前回受信した前記フレーム中のａビットの前記フレーム送信時刻との大小に基づいて前記上位ビット情報を補正し、補正した前記上位ビット情報、受信した前記通信フレームの前記ヘッダ部および前記データ部からチェックコードを生成し、受信した前記通信フレーム中のチェックコードと一致するかを判定する機能と、をさらに有することを特徴とする請求項１５〜１７のいずれか１つに記載の通信装置。
【請求項１９】
伝送路を介して接続される２台の通信装置間で周期通信が行われる通信システムでの前記通信装置による遅延検出方法において、
周期通信が開始されるとタイマーを起動する第１タイマー起動工程と、
前記タイマーの起動から所定の時間内に、他の通信装置からのリフレッシュ指示を含むリフレッシュ指示フレームを受信するかを判定する第１片道遅延判定工程と、
前記第１判定工程で前記リフレッシュ指示フレームを受信した場合に、前記リフレッシュ指示フレームの受信タイミングのフレーム受信時刻を取得するフレーム受信時刻取得工程と、
前記リフレッシュ指示応答フレームに格納されている前記他の通信装置による前記リフレッシュ指示フレームの送信時刻であるフレーム送信時刻を取得するフレーム送信時刻取得工程と、
前記フレーム受信時刻と前記フレーム送信時刻とを用いて、遅延発生の有無を判定する第２片道遅延判定工程と、
前記第２片道遅延判定工程の後に、前記タイマーを再起動させるタイマー再起動工程と、
を含むことを特徴とする遅延検出方法。
【請求項２０】
周期通信を行う前に、前記他の通信装置に要求フレームを送信し、前記タイマーを起動する第２タイマー起動工程と、
前記通信装置から前記要求フレームに対する応答フレームを、所定の時間内に受信したかを判定する往復遅延判定工程と、
をさらに含むことを特徴とする請求項１９に記載の遅延検出方法。
【請求項２１】
リフレッシュ準備完了を示す通信フレームを前記他の通信装置から受信すると、前記通信フレームに格納されている該通信フレームのフレーム送信時刻を前回フレーム送信時刻として取得する前回フレーム送信時刻取得工程と、
つぎに前記他の通信装置から前記リフレッシュ指示フレームを受信すると、前記リフレッシュ指示フレームに格納されている該リフレッシュ指示フレームのフレーム送信時刻を今回フレーム送信時刻として取得する今回フレーム送信時刻取得工程と、
前記今回フレーム送信時刻と前記前回フレーム送信時刻との差が、通信フレームの喪失であると判定されない喪失評価時間内に収まっているかを判定するフレーム喪失判定工程と、
をさらに含むことを特徴とする請求項１９または２０に記載の遅延検出方法。
【請求項２２】
前記フレーム喪失判定工程で前記通信フレームの喪失が発生していないと判定された場合に、前記今回フレーム送信時刻の値を前記前回フレーム送信時刻に設定する前回フレーム送信時刻再設定工程をさらに含み、
前記今回フレーム送信時刻取得工程からの処理を繰り返し実行することを特徴とする請求項２１に記載の遅延検出方法。
【請求項２３】
前記２台の通信装置のうち基準となるクロックを有する通信装置であるマスタ局が、他の通信装置であるスレーブ局のクロックの前記マスタ局のクロックに対する時刻のずれであるクロックオフセットの算出のタイミングになると、前記スレーブ局に対するデータのリフレッシュ指示、周期送信する周期送信データ、および該フレームのフレーム送信時刻を含み、周期的に送信されるリフレッシュ指示フレームに、前記クロックオフセットの測定指示を含めた第１リフレッシュ指示要求フレームを、前記スレーブ局に送信するクロックオフセット測定指示工程と、
前記スレーブ局は、前記第１リフレッシュ指示要求フレームを受信すると、前記第１リフレッシュ指示要求フレームに含まれるフレーム送信時刻をマスタ送信時刻として記憶し、前記第１リフレッシュ指示要求フレームの受信タイミングをスレーブ受信時刻として記憶する要求フレーム受信処理工程と、
前記スレーブ局は、前記マスタ局へのデータのリフレッシュ指示、および周期送信データを含み、周期的に送信されるリフレッシュ指示フレームに、前記第１リフレッシュ指示要求フレームに対する応答の機能を持たせたリフレッシュ指示応答フレームを、前記マスタ局に送信するとともに、前記リフレッシュ指示応答フレームの送信時刻をスレーブ送信時刻として記憶する応答フレーム送信工程と、
前記マスタ局は、前記リフレッシュ指示応答フレーム受信すると、該リフレッシュ指示応答フレームの受信時刻をマスタ受信時刻として取得し、前記スレーブ局に対するデータのリフレッシュ指示、周期送信する周期送信データ、および前記マスタ受信時刻を含み、周期的に送信されるリフレッシュ指示フレームに、前記クロックオフセットの算出指示を含めた第２リフレッシュ指示要求フレームを、前記スレーブ局に送信するクロックオフセット算出指示工程と、
前記スレーブ局は、前記第２リフレッシュ指示要求フレームを受信すると、前記スレーブ受信時刻を取得した後、前記マスタ送信時刻、前記スレーブ受信時刻、前記スレーブ送信時刻および前記マスタ受信時刻を用いて、前記スレーブ局の前記クロックオフセットを算出するクロックオフセット算出工程と、
をさらに含むことを特徴とする請求項１９〜２２のいずれか１つに記載の遅延検出方法。
【発明の詳細な説明】
【技術分野】
【０００１】
この発明は、通信装置および遅延検出方法に関するものである。
【背景技術】
【０００２】
ネットワーク、特にＦＡ（Factory  Automation）システムで用いられるリアルタイム性が要求されるネットワークで通信を行う際、通信遅延が所定の時間以内であることと同時に、情報の欠損がないことが望まれる。【０００３】
一般的に、遅延の測定には、測定を行う２つのノード間で、往復の遅延時間を測定する方法と、片道の遅延時間を測定する方法と、がある。片道による遅延時間測定では、受信側で通信フレームを受信した時点で遅延の判定ができるため、往復遅延時間を測定する方法と比べて、遅延の測定にかかる時間が短縮できるという利点がある。反面、片道による遅延時間測定を行うには、両ノード間でクロックが同期されていること、または両ノード間でのクロックのずれ時間が算出されていることが必要である。【０００４】
片道による遅延時間の測定は、特許文献１では以下のようにして行われる。まず、クロックのずれ時間を算出し、ついで、送信側のノードでは、送信するパケットに送信時刻のタイムスタンプを付与し、パケットを送信する。その後、受信側のノードでは、パケットの受信時刻のタイムスタンプを記録する。そして、受信側のノードが、両ノード間のクロックのずれ時間、送信時刻のタイムスタンプおよび受信時刻のタイムスタンプを用いて、遅延を算出している。【０００５】
また、クロックのずれ時間の算出は、以下のようにして行われる。ここで、各ノードは時間算出機能を有しているものとする。まず、第１のノードが第２のノードに対し、第１のノードの時計から取得した送信時刻のタイムスタンプを付与したずれ時間算出用のパケットを送信する。ついで、第２のノードは、受信したパケットに、第１のノードからのパケット受信時刻と、第１のノードへパケットを返送する際の送信時刻を追記し、第１のノードへ返送する。そして、第１のノードは、返送されたパケットの受信時刻を記録し、４つの時刻を基に、ずれ時間を算出していた。【０００６】
一方、２つのノード間のクロック同期は、特許文献２では以下のようにして行われる。まず、第１のノードが、送信する時刻を第１のペイロードに入れた測定パケットを作成し、第２のノード宛に送信する。ついで、第２のノードは、第１のノードから測定パケットを受信すると、第１のペイロードに測定パケットの送信時刻、第２のペイロードに測定パケットの受信時刻、および第３のペイロードに返信パケットの送信時刻を入れた返信パケットを作成して第１のノードに送信する。そして、返信パケットを受信した第１のノードは、返信パケットの返信パケットの受信時刻を記録し、４つの時刻を基にしてクロックの補正を行っていた。【０００７】
また、情報（パケット）の欠損について、たとえば特許文献１では、ノードにパケットロス率算出機能を設け、送信パケットにシーケンス番号を付与し、シーケンス番号の欠落によって、パケットのロス数をカウントしていた。
【先行技術文献】
【特許文献】
【０００８】
【特許文献１】特開２００４−２８９７４８号公報
【特許文献２】特開２００７−２７９８５号公報
【発明の概要】
【発明が解決しようとする課題】
【０００９】
しかしながら、特許文献１に記載のずれ時間の算出方法では、ずれ時間算出用のパケットを、通常の通信に使用するパケットと並行して送受信している。このような方法を、組込みシステムのような周期的な動作を行うノードに適用した場合には、通常の通信以外に、ずれ時間算出用のパケットの送受信処理を不定期（異なる周期）で行う必要が生じ、周期的な動作を維持することが困難であるという問題点があった。【００１０】
また、特許文献２に記載のクロック同期方法では、返信パケットのペイロードに時刻情報を３つ入れる必要があるため、時刻情報のデータサイズが大きくなる。そのため、ペイロードサイズが限定された状況では、通常のデータを運ぶための領域が損なわれてしまうという問題点があった。【００１１】
さらに、遅延の検出にあたって、パケットに遅延検出に使用される時刻をすべて保持するようにしているので、パケットに格納する時間情報が大きくなってしまうという問題点もあった。また、パケットの欠損については、シーケンス番号の欠落によって検出していたが、送信されるパケットが１つの場合など、欠損の検出が難しいという問題点もあった。【００１２】
この発明は上記に鑑みてなされたもので、周期的な動作を行うノードがネットワークで接続された通信システムで、周期的な動作を維持し、かつ通常のデータを格納するための領域を圧迫することなく各ノード間のクロックのずれを算出するための情報を送信するとことができる通信装置および遅延検出方法を得ることを目的とする。
【課題を解決するための手段】
【００１３】
上記目的を達成するため、この発明にかかる通信装置は、伝送路を介して接続された他の通信装置との間で周期通信を行う通信装置において、時間を計測するクロックと、通信フレームを送受信する通信手段と、自通信装置で送受信される前記通信フレームの送信時または受信時に、前記クロックを用いてタイムスタンプを生成するタイムスタンプ生成手段と、周期的に送信される前記通信フレーム中に格納する周期送信データを格納する送信データ格納手段と、周期的に受信する前記通信フレーム中の周期送信データを格納する受信データ格納手段と、前記他の通信装置に対してデータのリフレッシュ指示、前記送信データ格納手段中の前記周期送信データ、および前記タイムスタンプ生成手段から取得した送信タイミングのタイムスタンプであるフレーム送信時刻を含むリフレッシュ指示フレームを生成し、前記他の通信装置からのリフレッシュ指示フレームを受信すると、該リフレッシュ指示フレームに含まれる周期送信データを前記受信データ格納手段に格納するフレーム処理手段と、前記リフレッシュ指示フレームを受信すると前回の前記リフレッシュ指示フレームを受信してから第１遅延許容時間内につぎのリフレッシュ指示フレームを受信したか、また前記第１遅延許容時間内に前記つぎのリフレッシュ指示フレームを受信した場合に、該リフレッシュ指示フレームの前記他の通信装置から自通信装置までの伝送時間が第２遅延許容時間内であるかによって、前記他の通信装置から送信される通信フレームに遅延が生じているかを判定する片道遅延検出手段と、を備えることを特徴とする。
【発明の効果】
【００１４】
この発明によれば、周期通信中に２つのノード間でやり取りされる通信フレームに、送信するデータに加えて、遅延の検出に使用されるタイムスタンプを格納し、この周期通信される通信フレームに格納されているタイムスタンプと、通信フレームの受信時刻とからネットワーク内での通信フレームの遅延を検出するようにした。これによって、遅延検出のために新たな通信フレームを周期通信中にやり取りされる通信フレームのほかに送信する必要がなく、かつ通信フレームに含める時刻情報が該通信フレームの送信時刻だけでよく、通信フレームのサイズも変わらないため、シーケンス制御を行うプログラマブルコントローラのように所定の処理周期で動作する装置に適用すると、定期データ処理に影響を与えずに、通信フレームの遅延検出を行うことができるという効果を有する。
【図面の簡単な説明】
【００１５】
【図１】図１は、この発明の実施の形態１による通信システムが適用されるネットワークの一例を模式的に示す図である。
【図２】図２は、ＰＤＵの構成の一例を模式的に示す図である。
【図３】図３は、通信システムを構成する通信ノードの構成を模式的に示す図である。
【図４】図４は、周期通信の開始前のマスタ局とスレーブ局との間のクロックオフセット算出処理におけるＰＤＵのやり取りを示すシーケンス図である。
【図５】図５は、周期通信時のマスタ局とスレーブ局との間のクロックオフセット算出処理におけるＰＤＵのやり取りを示すシーケンス図である。
【図６】図６は、マスタ局のクロックオフセット算出時の動作処理手順の一例を示すフローチャートである。
【図７】図７は、スレーブ局のクロックオフセット算出時の動作処理手順の一例を示すフローチャートである。
【図８】図８は、実施の形態１による片道遅延検出処理の手順の一例を示すフローチャートである。
【図９】図９は、実施の形態１によるマスタ局での往復遅延検出処理の手順の一例を示すフローチャートである。
【図１０】図１０は、実施の形態１によるＰＤＵ喪失検出処理の手順の一例を示すフローチャートである。
【図１１】図１１は、実施の形態２によるスレーブ局のＰＤＵ送信時のチェックコード設定処理の手順の一例を示すフローチャートである。
【図１２】図１２は、実施の形態２による片道遅延検出処理の手順の一例を示すフローチャートである。
【図１３】図１３は、マスタ局による４８ビットＰＤＵ送信時刻と４８ビットＰＤＵ受信時刻の生成処理の手順の一例を示すフローチャートである。
【図１４】図１４は、スレーブ局による４８ビットＰＤＵ送信時刻と４８ビットＰＤＵ受信時刻の生成処理の手順の一例を示すフローチャートである。
【図１５】図１５は、実施の形態２による喪失検出処理の手順の一例を示すフローチャートである。
【図１６】図１６は、マスタ局による４８ビットＰＤＵ送信時刻と４８ビットＰＤＵ受信時刻の生成処理の手順の一例を示すフローチャートである。
【図１７】図１７は、スレーブ局による４８ビットＰＤＵ送信時刻と４８ビットＰＤＵ受信時刻の生成処理の手順の一例を示すフローチャートである。
【発明を実施するための形態】
【００１６】
以下に添付図面を参照して、この発明にかかる通信装置および遅延検出方法の好適な実施の形態を詳細に説明する。なお、これらの実施の形態によりこの発明が限定されるものではない。
【００１７】
実施の形態１．
図１は、この発明の実施の形態１による通信システムが適用されるネットワークの一例を模式的に示す図である。この図に示されるように、通信システムは、２つのノード１，２がイーサネット（登録商標）などの伝送路３を介して接続された構成を有している。ノード１は、ノード２に対するクロックオフセットの算出指示などの機能を有するマスタ遅延喪失検知手段１４を有し、ノード２は、ノード１のマスタ遅延喪失検知手段１４からの指示に従ってクロックオフセットの算出処理などを行うスレーブ遅延喪失検知手段２４を有する。
【００１８】
この実施の形態１では、通信は、予め決められたマスタ遅延喪失検知手段１４とスレーブ遅延喪失検知手段を有するペアのノード１，２間で行われる。つまり、ノード１は、周期的な通信を行っているときに、ペアの対象であるノード２に対して、所定の周期でクロックオフセットの測定／算出を指示し、ノード２は、周期的な通信を行っているときに、ペアの対象であるノード１からの指示に従ってクロックオフセットを算出するための測定およびクロックオフセットの算出を行う機能を有する。また、ノード１のマスタ遅延喪失検知手段１４とノード２のスレーブ遅延喪失検知手段２４は、周期通信中での通信フレームの遅延や喪失を周期通信で利用される通信フレームを用いて検知する機能もする。
【００１９】
以下では、クロックオフセットの算出を指示するノード１の方をマスタ局とし、マスタ局１からの指示に基づいてクロックオフセットの算出処理を行うノード２の方をスレーブ局とする。
【００２０】
なお、図１の例では、２つのノード１，２がネットワークに接続される場合を示しているが、３つ以上のノードがネットワークに接続されてもよい。また、１つのノードが複数の遅延喪失検知手段を備え、それぞれの遅延喪失検知手段とペアとなる遅延喪失検知手段を有する複数のノードと通信が行われるようにしてもよい。たとえば、第１のノード（マスタ局）１が第１と第２のマスタ遅延喪失検知手段を有し、第１のマスタ遅延喪失検知手段が第２のノード（スレーブ局）２のスレーブ遅延喪失検知手段とペアを組み、第２のマスタ遅延喪失検知手段が第３のノード（スレーブ局）のスレーブ遅延喪失検知手段とペアを組むようにして通信を行うことができる。
【００２１】
ここで、この通信システムでやり取りされる通信フレームのデータ部に格納されるプロトコル・データ・ユニット（以下、ＰＤＵという）の構成について説明する。図２は、ＰＤＵの構成の一例を模式的に示す図である。ＰＤＵ３０は、ヘッダ部（Header）３１と、データ部（Data）３２と、トレイラ部（Trailer）３３と、を含む。
【００２２】
ヘッダ部３１は、ＰＤＵ３０のヘッダ情報を有し、ＣＴＲＬ３１１，ＣＩＤ３１２，ＴＳ３１３およびＯＢＬ３１４を含む。ＣＴＲＬ３１１は、ＰＤＵ３０の種別を表す種別情報、要求／応答を表すビットを含む要求／応答情報、オフセット算出に用いるＰＤＵ３０の関連付けを表すビットを含むＰＤＵ関連付け情報を含む。
【００２３】
ＰＤＵ３０の種別として、実施の形態１では、リフレッシュ処理の準備完了とオフセット計測の通知を行うRefreshReady、リフレッシュ処理とオフセット計測の通知を行うRefreshMO、リフレッシュ処理とオフセット生成の通知を行うRefreshGO、リフレッシュ処理の通知を行うRefreshの４種類が使用される。
【００２４】
要求／応答情報は、種別情報で表したＰＤＵ３０が要求であるのか、それに対する応答であるのかを表すためのビットであり、要求と応答はそれぞれビットを反転した関係となるように決定しておく。
【００２５】
ＰＤＵ関連付け情報は、初期状態から、オフセット算出を行う都度反転し、オフセット算出に使用するＰＤＵ３０の組を特定するために使用される。つまり、１回のオフセットの算出処理の間でやり取りされるRefreshMOまたはRefreshReady（計測指示）とRefreshGO（算出指示）のＰＤＵ３０に関しては、ＰＤＵ関連付け情報は同じビット（値）を有し、つぎのオフセットの算出処理の間でやり取りされるRefreshMOとRefreshGOのＰＤＵ３０は、前回のＰＤＵ関連付け情報を反転させたものとなる。たとえば、マスタ局１から出されるRefreshReady要求、スレーブ局２から出されるRefreshReady応答、マスタ局１から出されるRefreshGO要求、スレーブ局２から出されるRefreshGO応答の一連の処理に関して、ＰＤＵ関連付け情報は同じビット（値）、たとえば「０」となる。また、そのつぎにマスタ局１から出されるRefreshMO要求、スレーブ局２から出されるRefreshMO応答、マスタ局１から出されるRefreshGO要求、スレーブ局２から出されるRefreshGO応答の一連の処理に関して、ＰＤＵ関連付け情報は同じビットであり、かつ前回のＰＤＵ関連付け情報とは異なるビット、ここでは「１」となる。さらに、そのつぎにマスタ局１から出されるRefreshMO要求、スレーブ局２から出されるRefreshMO応答、マスタ局１から出されるRefreshGO要求、スレーブ局２から出されるRefreshGO応答の一連の処理に関して、ＰＤＵ関連付け情報は同じビットであり、かつ前回のＰＤＵ関連付け情報とは異なるビット、ここでは「０」となる。このようにして、ＰＤＵ関連付け情報が設定される。
【００２６】
ＣＩＤ３１２は、ＰＤＵ３０を、通信を行うペアであるマスタ局１のマスタ遅延喪失検知手段１４とスレーブ局２のスレーブ遅延喪失検知手段２４と紐付けする識別情報である。ＣＩＤ３１２に格納される識別情報は、通信を行うマスタ遅延喪失検知手段１４およびスレーブ遅延喪失検知手段２４のペアごとに異なり、ネットワーク内で一意となるように生成される。ＣＩＤ３１２に格納する識別情報の生成規則の一例として、マスタ局１のアドレスとスレーブ局２のアドレスを連接するという方法を例示することができる。しかし、マスタ局１に第２のマスタ遅延喪失検知手段を設け、スレーブ局２に第２のスレーブ遅延喪失検知手段を設け、第２のマスタ遅延喪失検知手段と第２のスレーブ遅延喪失検知手段を第２のペアとして、マスタ局１とスレーブ局２の間で第２の通信を行う場合には、上記の識別情報の生成規則では重複が生じてしまう。そこで、第２のペアが通信を行う場合に用いる識別情報の生成規則として、上記の識別情報生成規則での連接順序を逆転し、スレーブ局２のアドレスとマスタ局１のアドレスを連接するという方法を例示することができる。
【００２７】
ＴＳ３１３は、ＰＤＵ３０の送信タイミングに関するタイムスタンプを格納する領域である。具体的には、周期通信中では、マスタ遅延喪失検知手段１４またはスレーブ遅延喪失検知手段２４がＰＤＵ３０を送信するタイミングのタイムスタンプを格納する。また、周期通信中以外では、マスタ遅延喪失検知手段１４によって要求を表すＰＤＵ３０が送信されるタイミングのタイムスタンプを格納し、マスタ遅延喪失検知手段１４からの要求に対する応答を表すＰＤＵ３０がスレーブ遅延喪失検知手段２４によって送信される際に、その応答に対応する要求を表すＰＤＵ３０のＴＳ３１３に格納されていた値（すなわち、応答に対応する要求の送信タイミングを示すタイムスタンプ）を格納する。なお、周期通信で送信されるＰＤＵ３０の主な種別は、RefreshMO，RefreshGO，Refreshである。
【００２８】
ＯＢＬ３１４は、クロックのオフセットを算出する際に使用する情報を格納する領域である。具体的には、ＣＴＲＬ３１１の種別情報がRefreshGOで、要求／応答情報が要求である場合、すなわちＰＤＵ３０がRefreshGO要求である場合に、RefreshGO要求を生成する基となるRefreshReady応答またはRefreshMO応答の受信タイミングを示すタイムスタンプの値が格納される。
【００２９】
データ部３２は、周期通信されるデータなどのデータ格納領域である。また、トレイラ部３３は、ＰＤＵ３０の破損を検知する際に使用されるチェックコードの格納領域である。チェックコードとして、ＣＲＣ（Cyclic  Redundancy  Check）巡回冗長コードなどを使用することができる。
【００３０】
以上のように、ＴＳ３１３は、マスタ局１からスレーブ局２へまたはスレーブ局２からマスタ局１へ送信されるＰＤＵ３０の遅延／喪失の検知に用いられる当該ＰＤＵ３０の送信時刻を格納する。しかし、この実施の形態１では、このＴＳ３１３に加えて、クロックオフセットの算出に必要なマスタ局１でのＰＤＵ３０の受信時刻を格納するＯＢＬ３１４を設けることによって、スレーブ局２側でマスタ局１を基準としたクロックオフセットの算出が可能な構成としている。なお、これらの情報を用いた遅延／喪失の検知処理やクロックオフセットの算出処理について後述する。
【００３１】
図３は、通信システムを構成する通信ノードの構成を模式的に示す図であり、（ａ）はマスタ局の構成を模式的に示すブロック図であり、（ｂ）はスレーブ局の構成を模式的に示すブロック図である。
【００３２】
マスタ局１は、図３（ａ）に示されるように、クロック１１と、送信データ格納部１２と、受信データ格納部１３と、マスタ遅延喪失検知手段１４と、フレーム送信部１５と、フレーム受信部１６と、を備える。
【００３３】
クロック１１は、マスタ局１が使用する時刻情報を生成する。送信データ格納部１２は、たとえば周期通信で他のノードに送信する周期送信データを格納し、受信データ格納部１３は、たとえば周期通信で受信したＰＤＵのデータ部に格納されているデータ（周期受信データ）を格納する。送信データ格納部１２に格納される周期送信データは、自装置に接続される図示しない処理装置によって行われる、他のノード（スレーブ局２）に接続される図示しない入出力機器などに設定する値の演算に利用される。また、受信データ格納部１３に格納される周期受信データは、他のノードに接続される入出力機器からの出力値などであり、処理装置での演算に使用される。
【００３４】
マスタ遅延喪失検知手段１４は、相手ノード（スレーブ局２）との間でやり取りを行うＰＤＵを生成するとともに、周期通信されるＰＤＵを用いてＰＤＵの遅延や喪失を検知する機能を有する。また、スレーブ局２のクロックオフセットの算出に必要な情報をＰＤＵに格納して送信し、スレーブ局２に対してクロックオフセットの測定／算出を指示する機能を有する。
【００３５】
フレーム送信部１５は、マスタ遅延喪失検知手段１４によって生成されたＰＤＵを、イーサネット（登録商標）フレームなどの通信フレームのデータ部に格納してネットワークへ送出する。また、フレーム受信部１６は、ネットワーク上に流れるイーサネット（登録商標）フレームなどの通信フレームのヘッダを参照して自ノード宛の通信フレームを受信し、データ部に格納されているＰＤＵを取り出す。
【００３６】
ここで、マスタ遅延喪失検知手段１４のさらに詳細な構成について説明する。マスタ遅延喪失検知手段１４は、コネクション確立要求部１４１と、タイムスタンプ生成部１４２と、フレーム処理部１４３と、タイムスタンプ記憶部１４４と、片道遅延検出部１４５と、往復遅延検出部１４６と、喪失検出部１４７と、を有する。
【００３７】
コネクション確立要求部１４１は、ペアとなるノード（スレーブ局２）との間でコネクション確立処理を行う。
【００３８】
タイムスタンプ生成部１４２は、フレーム処理部１４３によって送信（生成）されるＰＤＵのクロック１１を基準とした送信時の時刻であるタイムスタンプを生成し、フレーム処理部１４３に渡す。また、他のノードからＰＤＵを受信した時点でもタイムスタンプを生成する。
【００３９】
フレーム処理部１４３は、処理状況に応じてスレーブ局２に送信するＰＤＵを生成する機能を有する。たとえば、コネクション確立処理が完了した場合には、RefreshReady要求を生成する。また、RefreshReady応答またはRefreshMO応答を受信し、送信データ格納部１２内に周期送信データがある場合には、RefreshGO要求を生成する。さらに、RefreshGO応答を受信し、送信データ格納部１２内に周期送信データがある場合には、RefreshMO要求を生成する。そして、周期通信中のその他の場合には、Refresh要求を生成する。
【００４０】
これらの場合において、フレーム処理部１４３は、送信データ格納部１２内に格納されている周期送信データをデータ部３２に格納したり、タイムスタンプ生成部１４２から渡されたタイムスタンプを各ＰＤＵのＴＳに格納したりするなど、所定の情報を各格納領域に格納する。また、RefreshGO要求を生成する場合には、RefreshGO要求を生成する基となるRefreshReady応答またはRefreshMO応答の受信時のタイムスタンプをＯＢＬに格納する。
【００４１】
さらに、フレーム処理部１４３は、受信したＰＤＵのデータ部に格納されているデータを取得して、受信データ格納部１３に格納したり、ＴＳからタイムスタンプを読み出してＰＤＵ送信時刻としてタイムスタンプ記憶部１４４に保持したりして、各処理部で必要な情報を取り出す機能も有する。
【００４２】
タイムスタンプ記憶部１４４は、受信したＰＤＵのＴＳに格納されている値と、所定のＰＤＵを受信したときにタイムスタンプ生成部で生成されたタイムスタンプと、を記憶する。ここでは、遅延検出用およびクロックオフセット算出用として、受信したRefresh要求，RefreshMO応答またはRefreshGO応答のＴＳに格納されている値を、ＰＤＵ送信時刻T_sndとして記憶し、Refresh要求，RefreshMO応答またはRefreshGO応答の受信時にタイムスタンプ生成部１４２によって生成されたタイムスタンプをＰＤＵ受信時刻T_rcvとして記憶する。また、喪失検出用として、RefreshReady応答、Refresh要求，RefreshMO応答またはRefreshGO応答のＴＳに格納されている値を、前回ＰＤＵ送信時刻T_psndとして記憶し、上記ＰＤＵの直後に受信するRefresh要求，RefreshMO応答またはRefreshGO応答のＴＳに格納されている値を、今回ＰＤＵ送信時刻T_nsndとして記憶する。
【００４３】
片道遅延検出部１４５は、スレーブ局２から受け取るＰＤＵを用いて、ＰＤＵの遅延の発生を検知する。ここでは、ＰＤＵを周期的に受信しているか否かと、相手ノードから自ノードまでにＰＤＵが到達するのにかかる時間によって遅延判定を行う。具体的には、周期通信の開始と同時にまたは前回ＰＤＵの受信時にタイマーを起動させ、所定の時間（第１遅延許容時間r_interval）内にRefresh要求，RefreshMO応答またはRefreshGO応答を受信しなかった場合に、許容遅延超過と判定する。また、所定の時間内にRefresh要求、RefreshMO応答、RefreshGO応答を受信した場合でも、タイムスタンプ記憶部１４４中のＰＤＵ送信時刻T_sndとＰＤＵ受信時刻T_rcvとを用い、次式（１）によって許容遅延超過を判定する。ここで、第２遅延許容時間をd_allowedとし、（１）式を満たす場合には、遅延は発生しておらず、（１）式を満たさない場合には、遅延が発生していると判定する。なお、第１遅延許容時間r_intervalと第２遅延許容時間d_allowedとは、同じ値に設定されてもよいし、異なる値に設定されてもよい。
T_rcv−T_snd＜d_allowed  ・・・（１）
【００４４】
往復遅延検出部１４６は、スレーブ局２との間の要求応答シーケンスで、往復遅延が許容遅延以内であるかを検出する。具体的には、要求応答シーケンスのうちの要求ＰＤＵを送信するとタイマーを起動し、所定の時間（往復遅延許可時間rtt_allowed）内に要求に対する応答ＰＤＵを受信していない場合に、許容遅延超過と判定する。要求応答シーケンスとは、要求を示すＰＤＵをスレーブ局２に送信すると、その応答を示すＰＤＵがスレーブ局２から返される処理をいい、たとえばオフセット算出前の要求応答シーケンス、オフセット算出に使用するRefreshReady要求と応答、RefreshMO要求と応答、RefreshGO要求と応答、周期通信以外の通信での要求応答シーケンスを例示することができる。ここでは、周期通信が行われていないときに往復遅延検出部１４６による往復遅延検出処理が行われるものとする。
【００４５】
なお、往復遅延検出部１４６は、受信した応答ＰＤＵが、送信した要求ＰＤＵに対応する応答ＰＤＵであることを確認する。具体的には、自ノードが送信した要求ＰＤＵがオフセット算出前に送信する要求ＰＤＵ、RefreshReady要求、および周期通信以外の通信での要求ＰＤＵである場合には、送信した要求ＰＤＵのＴＳと受信した応答ＰＤＵのＴＳとが一致するかを確認する。また、自ノードが送信した要求ＰＤＵがRefreshMO要求およびRefreshGO要求である場合には、送信した要求ＰＤＵのＣＴＲＬ中のＰＤＵ関連付け情報と、相手ノードから受け取る応答ＰＤＵのＣＴＲＬ中のＰＤＵ関連付け情報とが一致するかを比較する。そして、両者が一致する場合に、受信した応答ＰＤＵが、送信した要求ＰＤＵに対応する応答ＰＤＵであることを確認している。
【００４６】
喪失検出部１４７は、ネットワーク上でのＰＤＵの喪失を検出する。具体的には、タイムスタンプ記憶部中の前回ＰＤＵ送信時刻T_psndと今回ＰＤＵ送信時刻T_nsndとを用い、次式（２）によってＰＤＵの喪失を判定する。ここで、許容受信間隔を意味する喪失評価時間をtrns_intervalとし、（２）式を満たす場合には喪失は発生しておらず、（２）式を満たさない場合には喪失が発生していると判定する。
T_psnd−T_nsnd＜trns_interval  ・・・（２）
【００４７】
また、喪失検出部１４７は、（２）式による判定で喪失なしと判定した場合には、タイムスタンプ記憶部１４４中の今回ＰＤＵ送信時刻の値T_nsndを、新たな前回ＰＤＵ送信時刻T_psndに設定し、今回ＰＤＵ送信時刻の値を削除する処理を行う。これによって、周期的に受信するRefresh要求，RefreshMO応答またはRefreshGO応答に対して、喪失検出処理を行うことができる。
【００４８】
スレーブ局２は、図３（ｂ）に示されるように、クロック２１と、送信データ格納部２２と、受信データ格納部２３と、スレーブ遅延喪失検知手段２４と、フレーム送信部２５と、フレーム受信部２６と、を備える。ここで、クロック２１、送信データ格納部２２、受信データ格納部２３、フレーム送信部２５およびフレーム受信部２６は、マスタ局１のものと同様の機能を有するので、その説明を省略する。
【００４９】
スレーブ遅延喪失検知手段２４は、マスタ局１との間でやり取りを行うＰＤＵを生成するとともに、周期通信されるＰＤＵを用いてＰＤＵの遅延や喪失を検知する機能を有する。また、相手ノードからクロックオフセットの算出に必要な情報をＰＤＵから取得し、クロックオフセットを算出する機能も有する。このような機能を有するスレーブ遅延喪失検知手段２４は、コネクション確立応答部２４１と、クロックオフセット記憶部２４２と、タイムスタンプ生成部２４３と、フレーム処理部２４４と、タイムスタンプ記憶部２４５と、クロックオフセット算出部２４６と、片道遅延検出部２４７と、喪失検出部２４８と、を有する。
【００５０】
コネクション確立応答部２４１は、ペアとなるマスタ局１との間でコネクション確立処理を行う。クロックオフセット記憶部２４２は、マスタ局１のクロック１１を基準としたスレーブ局２のクロック２１のずれの値であるクロックオフセットを記憶する。
【００５１】
タイムスタンプ生成部２４３は、フレーム処理部２４４によって送信（生成）されるＰＤＵに関してマスタ局１のクロック１１を基準とした送信時刻であるタイムスタンプを生成し、フレーム処理部２４４に渡す。また、他のノードからＰＤＵを受信した時点でもタイムスタンプを生成する。タイムスタンプ生成部２４３は、クロック２１から得られる時刻（値）と、クロックオフセット記憶部２４２中のクロックオフセットとの和に基づいて、タイムスタンプを生成する。
【００５２】
フレーム処理部２４４は、処理状況に応じてペアとなるマスタ局１に送信するＰＤＵを生成する機能を有する。たとえば、RefreshReady要求、RefreshMO要求およびRefreshGO要求を受信し、送信データ格納部２２に周期送信データが格納されている場合には、それぞれRefreshReady応答、RefreshMO応答およびRefreshGO応答を生成する。また、周期通信中で上記ＰＤＵを受信しないで前回ＰＤＵを受信してから所定の時間が経過した場合には、Refresh要求を生成する。
【００５３】
これらの場合において、フレーム処理部２４４は、送信データ格納部２２内に格納されている周期送信データをＰＤＵのデータ部に格納したり、周期通信中にタイムスタンプ生成部２４３から渡されたタイムスタンプをＴＳに格納したり、周期通信以外の場合に受信したＰＤＵのＴＳに格納されている値を、受信ＰＤＵに対する応答ＰＤＵのＴＳに格納したりするなど所定の情報を各格納領域に格納する。
【００５４】
また、フレーム処理部２４４は、受信したＰＤＵのデータ部に格納されているデータを取得して受信データ格納部２３に格納したり、ＴＳからタイムスタンプを読み出してＰＤＵ送信時刻としてタイムスタンプ記憶部２４５に格納したりして、受信したＰＤＵから各処理部で必要な情報を取り出す機能も有する。
【００５５】
タイムスタンプ記憶部２４５は、受信したＰＤＵのＴＳに格納されている値と、所定の種類のＰＤＵを受信したときにタイムスタンプ生成部２４３で生成されたタイムスタンプと、を記憶する。ここでは、遅延検出用として、受信したRefresh要求，RefreshMO要求またはRefreshGO要求のＴＳに格納されている値を、ＰＤＵ送信時刻T_sndとして記憶し、Refresh要求，RefreshMO要求またはRefreshGO要求の受信時のタイムスタンプをＰＤＵ受信時刻T_rcvとして記憶する。また、喪失検出用として、RefreshReady要求、Refresh要求，RefreshMO要求またはRefreshGO要求のＴＳに格納されている値を、前回ＰＤＵ送信時刻T_psndとして記憶し、上記ＰＤＵの直後に受信するRefresh要求，RefreshMO要求またはRefreshGO要求のＴＳに格納されている値を、今回ＰＤＵ送信時刻T_nsndとして記憶する。
【００５６】
さらに、クロックオフセット算出用として、マスタ局１から受信したオフセット測定指示を含むＰＤＵ中のＴＳに格納されている値を測定用ＰＤＵマスタ送信時刻Tm_sndとして記憶し、オフセット測定指示を含むＰＤＵを受信した際にタイムスタンプ生成部２４３から取得したタイムスタンプを、測定用ＰＤＵスレーブ受信時刻Ts_rcvとして記憶する。また、オフセット測定指示を含むＰＤＵに対応する応答のＰＤＵを送信した際にタイムスタンプ生成部２４３から取得したタイムスタンプを測定用ＰＤＵスレーブ送信時刻Ts_sndとして記憶する。さらに、マスタ局１から受信したオフセット算出指示を含むＰＤＵのＯＢＬ内の値を測定用ＰＤＵマスタ受信時刻Tm_rcvとして記憶する。なお、オフセット測定指示を含むＰＤＵとして、RefreshReady要求またはRefreshMO要求を例示することができ、オフセット測定指示を含むＰＤＵに対応する応答のＰＤＵとして、RefreshReady応答またはRefreshMO応答を例示することができ、オフセット算出指示を含むＰＤＵとして、RefreshGO要求を例示することができる。
【００５７】
クロックオフセット算出部２４６は、タイムスタンプによる片道遅延測定を行う際に必要となるマスタ局１のクロック１１と自ノードのクロック２１との間のオフセット（クロックオフセット）を算出する。具体的には、オフセット算出指示を含むＰＤＵを受信すると、タイムスタンプ記憶部２４５から測定用ＰＤＵマスタ送信時刻Tm_snd、測定用ＰＤＵスレーブ受信時刻Ts_rcv、測定用ＰＤＵスレーブ送信時刻Ts_snd、および測定用ＰＤＵマスタ受信時刻Tm_rcvから、次式（３）を用いてクロックオフセットts_offsetを算出する。
ts_offset＝［Tm_rcv＋Tm_snd−（Ts_rcv＋Ts_snd）］／２  ・・・（３）
【００５８】
片道遅延検出部２４７は、マスタ局１から受け取るＰＤＵを用いて、ＰＤＵの遅延の発生を検知する。具体的には、周期通信の開始と同時にまたは前回ＰＤＵ受信時にタイマーを起動させ、所定の時間（第１片道遅延許容値r_interval）内にRefresh要求，RefreshMO要求またはRefreshGO要求を受信しなかった場合に、許容遅延超過と判定する。また、所定の時間内にRefresh要求、RefreshMO要求、RefreshGO要求を受信した場合でも、タイムスタンプ記憶部２４５中のＰＤＵ送信時刻T_sndとＰＤＵ受信時刻T_rcvとから上記（１）式を用いて許容遅延超過を判定する。
【００５９】
喪失検出部２４８は、ネットワーク上でのＰＤＵの喪失を検出する。具体的には、タイムスタンプ記憶部２４５中の前回ＰＤＵ送信時刻T_psndと今回ＰＤＵ送信時刻T_nsndとを用い、上記（２）式によってＰＤＵの喪失を判定する。
【００６０】
以下に、このような構成の通信システムでのクロックオフセット算出方法、片道遅延検出方法、往復遅延検出方法および喪失検出方法について説明する。最初に、クロックオフセット算出方法の説明を行う。図４は、周期通信の開始前のマスタ局とスレーブ局との間のクロックオフセット算出処理におけるＰＤＵのやり取りを示すシーケンス図であり、図５は、周期通信時のマスタ局とスレーブ局との間のクロックオフセット算出処理におけるＰＤＵのやり取りを示すシーケンス図である。
【００６１】
図４に示されるように、周期通信開始前では、マスタ局１からスレーブ局２に対して、リフレッシュ準備完了通知とオフセット計測指示を含むRefreshReady要求が出され（ＳＱ１１）、これに対する応答であるRefreshReady応答がスレーブ局２から出される（ＳＱ１２）。ここで、マスタ局１からRefreshReady要求が出されたときのタイムスタンプTm_snd、スレーブ局２でRefreshReady要求を受信したときのタイムスタンプTs_rcv、スレーブ局２でRefreshReady応答が出されたときのタイムスタンプTs_snd、およびマスタ局１でRefreshReady応答を受信したときのタイムスタンプTm_rcvが各ノードのタイムスタンプ生成部で生成される。
【００６２】
ついで、マスタ局１からクロックオフセットの算出を指示するRefreshGO要求が送信される（ＳＱ１３）。スレーブ局２は、RefreshGO要求を受信すると、取得したタイムスタンプTm_snd，Ts_rcv，Ts_snd，Tm_rcvを用いてクロックオフセットの算出処理を開始する。また、RefreshGO要求の受信を契機として、スレーブ局２では、周期通信が開始される。スレーブ局２は、RefreshGO要求に対する応答であるRefreshGO応答を送信し（ＳＱ１４）、マスタ局１では、RefreshGO応答の受信を契機として、周期通信が開始される。
【００６３】
その後、マスタ局１は、所定の時間経過後にRefresh要求を送信し（ＳＱ１５）、またスレーブ局２でも所定の時間経過後にRefresh要求を送信する（ＳＱ１６）。マスタ局１では、RefreshGO要求を送信してからつぎのRefresh要求を送信するまでの時間が周期Ｔ１となる。また、スレーブ局２では、RefreshGO応答を送信してからつぎのRefresh要求を送信するまでの時間が周期Ｔ２となる。
【００６４】
一方、図５に示されるように、周期通信中では、周期的にリフレッシュ処理を指示する要求／応答がマスタ局１およびスレーブ局２から出されている（ＳＱ３１〜ＳＱ３９）。また、周期通信が開始されてから所定の時間間隔で、マスタ局１は、クロックオフセットの測定とリフレッシュ処理とを指示するRefreshMO要求を送信し（ＳＱ３２）、スレーブ局２は、これに対する応答であるRefreshMO応答を送信する（ＳＱ３７）。ここで、マスタ局１からRefreshMO要求が出されたときのタイムスタンプTm_snd、スレーブ局２でRefreshMO要求を受信したときのタイムスタンプTs_rcv、スレーブ局２でRefreshMO応答が出されたときのタイムスタンプTs_snd、マスタ局１でRefreshMO応答を受信したときのタイムスタンプTm_rcvが各ノードのタイムスタンプ生成部によって生成される。
【００６５】
ついで、マスタ局１からクロックオフセットの算出とリフレッシュ処理とを指示するRefreshGO要求が送信される（ＳＱ３４）。スレーブ局２は、RefreshGO要求を受信すると、取得したタイムスタンプTm_snd，Ts_rcv，Ts_snd，Tm_rcvを用いてクロックオフセットの算出処理を行い、算出したクロックオフセットを新たなクロックオフセットとして更新する。また、スレーブ局２は、RefreshGO要求に対する応答であるRefreshGO応答を送信する（ＳＱ３９）。
【００６６】
このように、周期通信中では、マスタ局１でもスレーブ局２でも、Refresh要求が周期的に送信されるが、クロックオフセットの測定指示や算出指示、およびこれらの指示に対する応答は、Refresh要求とは別のタイミングで送信されるのではなく、Refresh要求に含めて送信される。
【００６７】
マスタ局１では、Refresh要求やRefreshGO要求、RefreshMO要求などのリフレッシュ処理の指示を含むリフレッシュ指示ＰＤＵを送信してからつぎのリフレッシュ指示ＰＤＵを送信するまでの時間が周期Ｔ１となる。同様に、スレーブ局２では、リフレッシュ指示ＰＤＵ（Refresh要求／RefreshGO応答／RefreshMO応答）を送信してからつぎのリフレッシュ指示ＰＤＵを送信するまでの時間が周期Ｔ２となる。
【００６８】
図６は、マスタ局のクロックオフセット算出時の動作処理手順の一例を示すフローチャートであり、図７は、スレーブ局のクロックオフセット算出時の動作処理手順の一例を示すフローチャートである。これらのフローチャートでは、マスタ局１とスレーブ局２での初期化処理とリフレッシュ処理とを含めて示している。ここでは、処理の流れに合わせて、図６と図７とを交互に引用しながら処理の流れを説明する。
【００６９】
まず、マスタ局１のコネクション確立要求部１４１とスレーブ局２のコネクション確立応答部２４１は、マスタ局１とスレーブ局２との間のコネクション確立処理を行う（図６のステップＳ１１、図７のステップＳ５１）。コネクション確立処理では、マスタ局１のコネクション確立要求部１４１は、コネクション確立要求をスレーブ局２のコネクション確立応答部２４１へ送信し、スレーブ局２のコネクション確立応答部２４１からの応答を受信し、その後、マスタ遅延喪失検知手段１４とスレーブ遅延喪失検知手段２４で必要なパラメータの設定や確認を行う。
【００７０】
コネクション確立処理が完了すると、図６に示されるように、マスタ局１のフレーム処理部１４３は、タイムスタンプ生成部１４２から送信タイミングのタイムスタンプを受取り、スレーブ局２に対してリフレッシュの準備完了の通知とともに、クロックオフセットの計測を指示するRefreshReady要求を生成する。このとき、受取ったタイムスタンプをRefreshReady要求のＴＳに格納する。そして、フレーム送信部１５は生成されたRefreshReady要求をスレーブ局２へと送信する（ステップＳ１２）。これは、図４のシーケンスで、ＳＱ１１に相当し、オフセット算出の開始タイミングとなる。
【００７１】
ついで、図７に示されるように、スレーブ局２のフレーム処理部２４４は、フレーム受信部２６でRefreshReady要求を受信すると、タイムスタンプ生成部２４３から受信タイミングのタイムスタンプを受取り、受取ったタイムスタンプを測定用ＰＤＵスレーブ受信時刻Ts_rcvとしてタイムスタンプ記憶部２４５に格納する。また、受信したRefreshReady要求のＴＳ内の値を測定用ＰＤＵマスタ送信時刻Tm_sndとして、タイムスタンプ記憶部２４５に格納する（ステップＳ５２）。
【００７２】
その後、スレーブ局２のフレーム処理部２４４は、受信したRefreshReady要求に対する応答として、RefreshReady要求のＴＳに格納されている値を、ＴＳに格納したRefreshReady応答を生成する。そして、フレーム送信部２５からRefreshReady応答を送信する。このとき、フレーム処理部２４４は、RefreshReady応答送信時のタイムスタンプ生成部２４３から受け取ったタイムスタンプを測定用ＰＤＵスレーブ送信時刻Ts_sndとして、タイムスタンプ記憶部２４５に格納する（ステップＳ５３）。これは図４のシーケンスで、ＳＱ１２に相当する。
【００７３】
ついで、図６に示されるように、マスタ局１のフレーム受信部１６は、RefreshReady応答を受信する。フレーム処理部１４３は、タイムスタンプ生成部１４２から受信タイミングのタイムスタンプを受取って、一時的に記憶し（ステップＳ１３）、送信データ格納部１２に周期通信で送信するデータ（以下、周期送信データという）が新たに存在するか判定する（ステップＳ１４）。周期送信データが格納されていない場合（ステップＳ１４でＮｏの場合）には、送信データ格納部１２に周期送信データが格納されるまで待ち状態となる。そして、周期送信データが格納されると（ステップＳ１４でＹｅｓの場合）、フレーム処理部１４３は、タイムスタンプ生成部１４２から送信タイミングのタイムスタンプを受け取り、受取ったタイムスタンプをＴＳに格納し、周期送信データをデータ部に格納し、ステップＳ１３で一時的に記憶したRefreshReady応答の受信タイミングのタイムスタンプをＯＢＬに格納したRefreshGO要求を作成する。そして、フレーム送信部１５からRefreshGO要求をスレーブ局２へと送信する（ステップＳ１５）。これは図４のシーケンスで、ＳＱ１３に相当する。
【００７４】
その後、図７に示されるように、スレーブ局２は、フレーム受信部２６でRefreshGO要求を受信すると、フレーム処理部２４４は、RefreshGO要求のＯＢＬに格納されているタイムスタンプを測定用ＰＤＵマスタ受信時刻Tm_rcvとしてタイムスタンプ記憶部２４５に格納する。ついで、クロックオフセット算出部２４６は、RefreshGO要求を受信したので、タイムスタンプ記憶部２４５に格納されているTm_snd，Ts_rcv，Ts_snd，Tm_rcvから上記（３）式を用いて、マスタ局１のクロック１１に対するスレーブ局２のクロック２１のクロックオフセットを算出する。クロックオフセット算出部２４６は、算出したクロックオフセットを、それまでクロックオフセット記憶部２４２に記憶されていたクロックオフセットの値に加算したものを新たなクロックオフセットとしてクロックオフセット記憶部２４２に記憶する（ステップＳ５４）。なお、通信が開始される前のクロックオフセットは０であるものとする。
【００７５】
その後、スレーブ局２のフレーム処理部２４４は、送信データ格納部２２に周期送信データが新たに格納されているかを判定する（ステップＳ５５）。周期送信データが格納されていない場合（ステップＳ５５でＮｏの場合）には、送信データ格納部２２に周期送信データが格納されるまで待ち状態となる。そして、周期送信データが格納されると（ステップＳ５５でＹｅｓの場合）、フレーム処理部２４４は、タイムスタンプ生成部２４３から送信タイミングのタイムスタンプを受取り、受取ったタイムスタンプをＴＳに格納し、周期送信データをデータ部に格納したRefreshGO応答を作成する。そして、フレーム送信部２５からマスタ局１へとRefreshGO応答が送信される（ステップＳ５６）。これは図４のシーケンスで、ＳＱ１４に相当する。
【００７６】
ついで、図６に示されるように、マスタ局１は、フレーム受信部１６でRefreshGO応答を受信すると（ステップＳ１６）、フレーム処理部１４３は、送信データ格納部１２に周期送信データが新たに格納されているか判定する（ステップＳ１７）。周期送信データが新たに格納されていない場合（ステップＳ１７でＮｏの場合）には、送信データ格納部２２に送信データが格納されるまで待ち状態となる。そして、周期送信データが新たに格納されると（ステップＳ１７でＹｅｓの場合）、フレーム処理部１４３は、クロックオフセット算出のタイミングであるかを判定する（ステップＳ１８）。クロックオフセット算出は、ステップＳ１２で最初のクロックオフセット算出を開始した後、所定の時間間隔で実施されるので、クロック１１を用いた計測によって、前回のクロックオフセット算出から所定の時間が経過しているかを判定することによって行われる。
【００７７】
クロックオフセット算出のタイミングでない場合（ステップＳ１８でＮｏの場合）には、フレーム処理部１４３は、タイムスタンプ生成部１４２から送信タイミングのタイムスタンプを受け取り、受取ったタイムスタンプをＴＳに格納し、周期送信データをデータ部に格納したRefresh要求を作成し、フレーム送信部１５からスレーブ局２へと送信する（ステップＳ１９）。これは図４のシーケンスでＳＱ１５と、図５のシーケンスでＳＱ３１に相当する。そして、ステップＳ１７へと処理が戻る。
【００７８】
一方、ステップＳ１８で、クロックオフセット算出のタイミングであると判定された場合（ステップＳ１８でＹｅｓの場合）には、フレーム処理部１４３は、タイムスタンプ生成部１４２から送信タイミングのタイムスタンプを受け取り、受取ったタイムスタンプをＴＳに格納し、送信データ格納部１２に格納されている周期送信データをデータ部に格納したRefreshMO要求を作成し、フレーム送信部１５からスレーブ局２へと送信する（ステップＳ２０）。これは図５のシーケンスで、ＳＱ３２に相当する。
【００７９】
ついで、図７に示されるように、スレーブ局２は、フレーム受信部２６でRefreshMO要求を受信したかを判定する（ステップＳ５７）。RefreshMO要求を受信していない場合（ステップＳ５７でＮｏの場合）には、フレーム処理部２４４は、送信データ格納部２２に新たな周期送信データが格納されているかをさらに判定する（ステップＳ５８）。周期送信データが格納されていない場合（ステップＳ５８でＮｏの場合）には、ステップＳ５７へと戻る。また、周期送信データが格納されている場合（ステップＳ５８でＹｅｓの場合）には、フレーム処理部２４４は、タイムスタンプ生成部２４３から送信タイミングのタイムスタンプを受取り、受取ったタイムスタンプをＴＳに格納し、送信データ格納部２２に格納されている周期送信データをデータ部に格納したRefresh要求を生成し、フレーム送信部２５から送信し（ステップＳ５９）、ステップＳ５７へと処理が戻る。これは図４のシーケンスでＳＱ１６、図５のシーケンスで、ＳＱ３６に相当する。
【００８０】
一方、ステップＳ５７でRefreshMO要求を受信している場合（ステップＳ５７でＹｅｓの場合）には、フレーム処理部２４４は、タイムスタンプ生成部２４３からRefreshMO要求の受信タイミングのタイムスタンプを受取り、受取ったタイムスタンプを測定用ＰＤＵスレーブ受信時刻Ts_rcvとして、タイムスタンプ記憶部２４５に格納する。また、RefreshMO要求のＴＳ内の値を測定用ＰＤＵマスタ送信時刻Tm_sndとして、タイムスタンプ記憶部２４５に格納する（ステップＳ６０）。その後、フレーム処理部２４４は、送信データ格納部２２に新たな周期送信データが存在するか判定する（ステップＳ６１）。周期送信データが格納されていない場合（ステップＳ６１でＮｏの場合）には、送信データ格納部２２に周期送信データが格納されるまで待ち状態となる。そして、周期送信データが格納されると（ステップＳ６１でＹｅｓの場合）、フレーム処理部２４４は、タイムスタンプ生成部２４３から送信タイミングのタイムスタンプを受取り、受取ったタイムスタンプをＴＳに格納し、送信データ格納部２２中の周期送信データをデータ部に格納したRefreshMO応答を作成し、フレーム送信部２５からマスタ局１へと送信する。このとき、フレーム処理部２４４は、RefreshMO応答のＴＳに格納したタイムスタンプを測定用ＰＤＵスレーブ送信時刻Ts_sndとしてタイムスタンプ記憶部２４５に格納する（ステップＳ６２）。これは図５のシーケンスで、ＳＱ３７に相当する。
【００８１】
ついで、図６に示されるように、マスタ局１は、フレーム受信部１６でRefreshMO応答を受信したか判定する（ステップＳ２１）。RefreshMO応答を受信していない場合（ステップＳ２１でＮｏの場合）には、フレーム処理部１４３は、送信データ格納部２２に新たな周期送信データが格納されているかをさらに判定する（ステップＳ２２）。周期送信データが格納されていない場合（ステップＳ２２でＮｏの場合）には、ステップＳ２１へと戻る。また、周期送信データが格納されている場合（ステップＳ２２でＹｅｓの場合）には、フレーム処理部１４３は、タイムスタンプ生成部１４２から送信タイミングのタイムスタンプを受け取り、受取ったタイムスタンプをＴＳに格納し、送信データ格納部２２中の周期送信データをデータ部に格納したRefresh要求を作成し、フレーム送信部１５からスレーブ局２へと送信し（ステップＳ２３）、ステップＳ２１へと処理が戻る。これは図５のシーケンスで、ＳＱ３３に相当する。
【００８２】
一方、ステップＳ２１で、RefreshMO応答を受信している場合（ステップＳ２１でＹｅｓの場合）には、フレーム処理部１４３は、タイムスタンプ生成部１４２からRefreshMO応答の受信タイミングのタイムスタンプTm_rcvを受取り、一時的に記憶した上で、送信データ格納部２２に新たな周期送信データが格納されているかをさらに判定する（ステップＳ２４）。周期送信データが新たに格納されていない場合（ステップＳ２４でＮｏの場合）には、送信データ格納部１２に送信データが格納されるまで待ち状態となる。そして、周期送信データが新たに格納されると（ステップＳ２４でＹｅｓの場合）、フレーム処理部１４３は、タイムスタンプ生成部１４２から送信タイミングのタイムスタンプを受け取り、受取ったタイムスタンプをＴＳに格納し、送信データ格納部２２中の周期送信データをデータ部に格納し、ステップＳ２４で一時的に記憶したRefreshMO応答の受信タイミングのタイムスタンプTm_rcvをＯＢＬに格納したRefreshGO要求を生成し、フレーム送信部１５からスレーブ局２へと送信する（ステップＳ２５）。これは図５のシーケンスで、ＳＱ３４に相当する。
【００８３】
ついで、図７に示されるように、スレーブ局２は、フレーム受信部２６でRefreshGO要求を受信したか判定する（ステップＳ６３）。RefreshGO要求を受信していない場合（ステップＳ６３でＮｏの場合）には、フレーム処理部２４４は、送信データ格納部２２に新たな周期送信データが格納されているか判定する（ステップＳ６４）。周期送信データが格納されていない場合（ステップＳ６４でＮｏの場合）には、ステップＳ６３へと戻る。また、周期送信データが格納されている場合（ステップＳ６４でＹｅｓの場合）には、フレーム処理部２４４は、タイムスタンプ生成部２４３から送信タイミングのタイムスタンプを受取り、受取ったタイムスタンプをＴＳに格納し、送信データ格納部２２中の周期送信データをデータ部に格納したRefresh要求を生成し、フレーム送信部２５から送信する（ステップＳ６５）。これは図５のシーケンスで、ＳＱ３８に相当する。
【００８４】
一方、ステップＳ６３でRefreshGO要求を受信している場合（ステップＳ６３でＹｅｓの場合）には、フレーム処理部２４４は、受信したRefreshGO要求のＯＢＬに格納されている値を測定用ＰＤＵマスタ受信時刻Tm_rcvとしてタイムスタンプ記憶部２４５に格納する。その後、クロックオフセット算出部２４６は、RefreshGO要求を受信したので、タイムスタンプ記憶部２４５に格納されているTm_snd，Ts_rcv，Ts_snd，Tm_rcvから上記（３）式を用いて、マスタ局１のクロック１１に対するスレーブ局２のクロック２１のクロックオフセットを算出する。そして、クロックオフセット算出部２４６は、算出したクロックオフセットをそれまでクロックオフセット記憶部２４２に記憶されていたクロックオフセットの値に加算し、これを新たなクロックオフセットとしてクロックオフセット記憶部２４２に記憶する（ステップＳ６６）。
【００８５】
その後、スレーブ局２のフレーム処理部２４４は、周期送信データが送信データ格納部２２に新たに格納されているかを判定する（ステップＳ６７）。周期送信データが格納されていない場合（ステップＳ６７でＮｏの場合）には、送信データ格納部２２に周期送信データが格納されるまで待ち状態となる。そして、周期送信データが格納されると（ステップＳ６７でＹｅｓの場合）、フレーム処理部２４４は、タイムスタンプ生成部２４３から送信タイミングのタイムスタンプを受取り、受取ったタイムスタンプをＴＳに格納し、送信データ格納部２２中の周期送信データをデータ部に格納したRefreshGO応答を作成し、フレーム送信部２５から送信する（ステップＳ６８）。その後、ステップＳ５７に戻る。これは図５のシーケンスで、ＳＱ３９に相当する。
【００８６】
ついで、図６に示されるように、マスタ局１は、フレーム受信部１６でRefreshGO応答の受信を判定し（ステップＳ２６）、RefreshGO応答を受信した場合（ステップＳ２６でＹｅｓの場合）には、ステップＳ１７へと戻り、上記した処理を繰り返し実行する。また、RefreshGO応答を受信していない場合（ステップＳ２６でＮｏの場合）には、フレーム処理部１４３は、送信データ格納部１２に周期送信データが新たに格納されているかを判定する（ステップＳ２７）。周期送信データが格納されていない場合（ステップＳ２７でＮｏの場合）には、ステップＳ２６へと戻る。また、周期送信データが格納されている場合（ステップＳ２７でＹｅｓの場合）には、フレーム処理部１４３は、タイムスタンプ生成部１４２から送信タイミングのタイムスタンプを受け取り、受取ったタイムスタンプをＴＳに格納し、送信データ格納部１２中の周期送信データをデータ部に格納したRefresh要求を生成し、フレーム送信部１５から生成したRefresh要求を送信し（ステップＳ２８）、ステップＳ２６へと処理が戻る。これは図５のシーケンスで、ＳＱ３５に相当する。
【００８７】
以上のようにして、マスタ局１とスレーブ局２との間での周期通信中にやり取りされるリフレッシュ処理の指示を含む周期通信フレームに、クロックオフセットの測定指示や算出指示、オフセット生成情報を含めることで、周期通信中にクロックオフセットの算出を行うことが可能となる。
【００８８】
つぎに、遅延検出処理について説明する。この実施の形態１では、遅延検出処理として、マスタ局１では、スレーブ局２から送信されるＰＤＵを用いた片道遅延検出処理と、要求応答シーケンスでやり取りされるＰＤＵを用いた往復遅延検出処理を行い、スレーブ局２では、片道遅延検出処理を行うようにしている。
【００８９】
図８は、実施の形態１による片道遅延検出処理の手順の一例を示すフローチャートである。最初にマスタ局１での片道遅延検出処理について説明する。スレーブ局２との間での周期通信の開始を契機に、マスタ局１の片道遅延検出部１４５は、クロック１１を利用してタイマーを起動する（ステップＳ７１）。なお、マスタ局１での周期通信の開始は、図４のＳＱ１４のRefreshGO応答をスレーブ局２から受信したタイミングである。
【００９０】
ついで、フレーム受信部１６でRefresh要求、RefreshMO応答またはRefreshGO応答を受信したかを判定し（ステップＳ７２）、受信していない場合（ステップＳ７２でＮｏの場合）には、タイマー起動から所定期間（第１遅延許容時間）r_intervalが経過したかを判定する（ステップＳ７３）。所定期間が経過していない場合（ステップＳ７３でＮｏの場合）には、ステップＳ７２に戻る。また、所定期間が経過している場合（ステップＳ７３でＹｅｓの場合）には、許容する遅延を超過したと判定する（ステップＳ７７）。許容遅延超過と判定された場合には、コネクションを切断して通信が停止されるなどされ、処理が終了する。
【００９１】
一方、ステップＳ７２でRefresh要求、RefreshMO応答またはRefreshGO応答のうちのいずれかを受信した場合（ステップＳ７２でＹｅｓの場合）には、片道遅延検出部１４５は、Refresh要求、RefreshMO応答またはRefreshGO応答の受信タイミングのタイムスタンプをタイムスタンプ生成部１４２から受取り、タイムスタンプ記憶部１４４にそのタイムスタンプをＰＤＵ受信時刻T_rcvとして記憶する（ステップＳ７４）。また、受信したRefresh要求、RefreshMO応答またはRefreshGO応答のＴＳに格納された値をＰＤＵ送信時刻T_sndとして、タイムスタンプ記憶部１４４に格納する（ステップＳ７５）。
【００９２】
ついで、片道遅延検出部１４５は、ステップＳ７４，Ｓ７５でタイムスタンプ記憶部１４４に格納したＰＤＵ受信時刻T_rcvとＰＤＵ送信時刻T_sndとの差、すなわちリフレッシュ指示ＰＤＵがスレーブ局２から送信され、マスタ局１へと到達する時間が、予め設定された第２遅延許容時間d_allowedより小さいかを判定する（ステップＳ７６）。
【００９３】
判定の結果、ＰＤＵ受信時刻T_rcvとＰＤＵ送信時刻T_sndとの差が第２遅延許容時間d_allowed以上の場合（ステップＳ７６でＮｏの場合）には、許容遅延超過と判定し（ステップＳ７７）、処理が終了する。また、ＰＤＵ受信時刻T_rcvとＰＤＵ送信時刻T_sndとの差が第２遅延許容時間d_allowedより小さい場合（ステップＳ７６でＹｅｓの場合）には、許容遅延内と判定し（ステップＳ７８）、タイマーを再起動し（ステップＳ７９）、ステップＳ７２へと戻る。以上のようにして、マスタ局１での片道遅延検出処理が行われる。
【００９４】
つぎに、スレーブ局２での片道遅延検出処理について説明する。スレーブ局２での片道遅延検出処理も基本的にマスタ局１での片道遅延検出処理と同様であるが、以下の点がマスタ局１の場合と異なる。ステップＳ７１でタイマーを起動するタイミングである周期通信の開始は、図４のＳＱ４３のRefreshGO要求をマスタ局１から受信したタイミングである。また、ステップＳ７２では、Refresh要求、RefreshMO要求またはRefreshGO要求を受信したかを判定し、ステップＳ７４では、受信したRefresh要求、RefreshMO要求またはRefreshGO要求の受信タイミングのタイムスタンプをタイムスタンプ生成部２４３から受取ってＰＤＵ受信時刻T_rcvとしてタイムスタンプ記憶部２４５に格納する。さらに、ステップＳ７５では、受信したRefresh要求、RefreshMO要求またはRefreshGO要求のＴＳに格納された値をＰＤＵ送信時刻T_sndとしてタイムスタンプ記憶部２４５に格納する。
【００９５】
このように、片道遅延検出処理では、相手ノードによって送信された時刻のタイムスタンプが格納されたリフレッシュ処理の指示を含む周期通信フレームを用いて、片道での遅延検出処理を行うことができる。また、リフレッシュ処理の指示を含む周期通信フレームを受信するたびに遅延検出を行うので、遅延を速やかに検出することができる。
【００９６】
図９は、実施の形態１によるマスタ局での往復遅延検出処理の手順の一例を示すフローチャートである。まず、往復遅延検出部１４６は、フレーム送信部１５から要求ＰＤＵを送信すると（ステップＳ９１）、タイマーを起動する（ステップＳ９２）。ついで、往復遅延検出部１４６は、要求ＰＤＵに対応する応答ＰＤＵを受信したか判定し（ステップＳ９３）、応答ＰＤＵを受信している場合（ステップＳ９３でＹｅｓの場合）には、タイマーを停止し（ステップＳ９４）、許容遅延内と判定し（ステップＳ９５）、処理が終了する。
【００９７】
また、ステップＳ９３で応答ＰＤＵを受信していない場合（ステップＳ９３でＮｏの場合）には、往復遅延検出部１４６は、タイマー開始から所定時間（往復遅延許可時間）rtt_allowedが経過しているかを判定し（ステップＳ９６）、経過していない場合（ステップＳ９６でＮｏの場合）には、ステップＳ９３に戻る。一方、タイマー開始から所定時間が経過している場合（ステップＳ９６でＹｅｓの場合）には、タイマーを停止し（ステップＳ９７）、許容遅延超過であると判定する（ステップＳ９８）。許容遅延超過であると判定された場合には、コネクションを切断して通信が停止される。以上によって、処理が終了する。
【００９８】
なお、ステップＳ９３で往復遅延検出部１４６は、受信した応答ＰＤＵが、ステップＳ９１で送信した要求ＰＤＵに対応する応答ＰＤＵであるかを確認する。具体的には、ステップＳ９１で送信した要求ＰＤＵが、オフセット算出前に送信する要求ＰＤＵ、RefreshReady要求、および周期通信以外の通信での要求ＰＤＵである場合には、ステップＳ９１で送信した要求ＰＤＵのＴＳとステップＳ９３で受信した応答ＰＤＵのＴＳとが一致するかを確認する。一致していれば、対応した応答であると判断する。また、ステップＳ９１で送信した要求ＰＤＵが、RefreshMO要求およびRefreshGO要求である場合には、ステップＳ９１で送信した要求ＰＤＵのＣＴＲＬに含まれるＰＤＵ関連付け情報が、ステップＳ９３で受信した応答ＰＤＵのＣＴＬＲに含まれるＰＤＵ関連付け情報と一致するかを確認する。一致していれば、対応した応答であると判断する。
【００９９】
このように、マスタ局１が要求ＰＤＵをスレーブ局２に送信し、スレーブ局２が要求ＰＤＵに対する応答ＰＤＵをマスタ局１に送信するというシーケンスの場合に、往復遅延が許容遅延以内であるかどうかを検出することができる。また、周期通信時以外は往復遅延検出部１４６による往復遅延検出処理を行い、周期通信時は片道遅延検出部１４５による片道遅延検出処理を行うように、通信の種類によって遅延検出処理を切り替えることで、ネットワークでの通信のあらゆる場面で遅延検出を行うことができる。
【０１００】
つぎに、ＰＤＵ喪失検出処理について説明する。図１０は、実施の形態１によるＰＤＵ喪失検出処理の手順の一例を示すフローチャートである。最初にマスタ局１でのＰＤＵ喪失検出処理について説明する。フレーム受信部１６で、RefreshReady応答を受信すると（ステップＳ１１１）、喪失検出部１４７は、受信したRefreshReady応答のＴＳに格納された値を前回ＰＤＵ送信時刻T_psndとして、タイムスタンプ記憶部１４４に記憶する（ステップＳ１１２）。ついで、喪失検出部１４７は、Refresh要求、RefreshMO応答またはRefreshGO応答を受信したか判定する（ステップＳ１１３）。受信していない場合（ステップＳ１１３でＮｏの場合）には、Refresh要求、RefreshMO応答またはRefreshGO応答を受信するまで待ち状態となる。
【０１０１】
また、Refresh要求、RefreshMO応答またはRefreshGO応答を受信している場合（ステップＳ１１３でＹｅｓの場合）には、受信したRefresh要求、RefreshMO応答またはRefreshGO応答のＴＳに格納された値を今回ＰＤＵ送信時刻T_nsndとして、タイムスタンプ記憶部１４４に記憶する（ステップＳ１１４）。その後、タイムスタンプ記憶部１４４に記憶した今回ＰＤＵ送信時刻T_nsndと前回ＰＤＵ送信時刻T_psndの差が、許容受信間隔を意味する喪失評価時間trns_interval未満であるかを判定する（ステップＳ１１５）。
【０１０２】
判定の結果、今回ＰＤＵ送信時刻T_nsndと前回ＰＤＵ送信時刻T_psndの差が、喪失評価時間trns_interval以上である場合（ステップＳ１１５でＮｏの場合）には、ＰＤＵの喪失があると判定する（ステップＳ１１６）。そして、コネクションを切断して通信が停止されるなどの処理が行われ、処理が終了する。また、今回ＰＤＵ送信時刻T_nsndと前回ＰＤＵ送信時刻T_psndの差が、喪失評価時間trns_interval未満である場合（ステップＳ１１５でＹｅｓの場合）には、ＰＤＵの喪失がないと判定し（ステップＳ１１７）、ステップＳ１１４でタイムスタンプ記憶部１４４に記憶した今回ＰＤＵ送信時刻T_nsndを、新たな前回ＰＤＵ送信時刻T_psndとして保持する（ステップＳ１１８）。その後、ステップＳ１１３に戻り、上述した処理を繰返し実行する。
【０１０３】
つぎに、スレーブ局２での喪失検出処理について説明する。スレーブ局２での喪失検出処理も基本的にマスタ局１での喪失検出処理と同様であるが、ステップＳ１１１で、RefreshReady要求を受信する点と、ステップＳ１１３で、Refresh要求、RefreshMO要求またはRefreshGO要求を受信したか判定する点が、マスタ局１の場合とは異なる。
【０１０４】
このようにして、ＰＤＵ喪失検出処理では、相手ノードによって送信された時刻のタイムスタンプが格納されたリフレッシュ処理の指示を含む周期通信フレームを用いて、ＰＤＵ喪失検出処理を行うことができる。また、リフレッシュ処理の指示を含む周期通信フレームを受信するたびにＰＤＵ喪失検出処理を行うので、ＰＤＵ喪失を速やかに検出することができる。
【０１０５】
以上の遅延検出処理とＰＤＵ喪失検出処理において、マスタ局１の片道遅延検出部１４５、往復遅延検出部１４６が許容遅延内と判断し、喪失検出部１４７がＰＤＵの喪失なしと判断した場合には、スレーブ局２から受信したRefresh要求、RefreshMO応答、RefreshGO応答のデータ部に格納されたデータは、受信データ格納部１３に格納される。
【０１０６】
また、スレーブ局２の片道遅延検出部２４７が許容遅延内と判断し、喪失検出部２４８がＰＤＵの喪失なしと判断した場合には、マスタ局１から受信したRefresh要求、RefreshMO要求、RefreshGO要求のデータ部に格納されたデータは、受信データ格納部２３に格納される。
【０１０７】
つぎに、マスタ局１とスレーブ局２のフレーム送信部１５，２５の送信間隔にばらつきがある場合の片道遅延検出部１４５，２４７の動作について説明する。送信間隔にばらつきがあり、周期通信で送信された３つのＰＤＵ（第１〜第３のＰＤＵ、たとえば図５のＳＱ３１〜ＳＱ３３で送信されるＰＤＵ）のうち第２のＰＤＵが喪失した場合を考える。この場合、第３のＰＤＵの受信時に片道遅延検出部１４５，２４７が図１０のＳ１１５で行うＰＤＵが喪失したかの評価で、第３のＰＤＵのＴＳに格納されているT_nsndと第１のＰＤＵのＴＳに格納されていたT_psndとの差が、ＰＤＵ喪失検出処理での喪失評価時間trns_intervalよりも小さくならないようにする。そのために、送信間隔が喪失評価時間trns_intervalの１／２よりも大きくなるように、マスタ局１とスレーブ局２の片道遅延検出部１４５，２４７は以下に示す動作を行う。
【０１０８】
マスタ局１の片道遅延検出部１４５は、図６でRefresh要求、RefreshMO要求、RefreshGO要求（リフレッシュ処理の指示を含むリフレッシュ指示フレーム）を送信するステップ（Ｓ１５，Ｓ１９，Ｓ２０，Ｓ２３，Ｓ２５，Ｓ２８）で、リフレッシュ指示フレームを送信後に、送信したリフレッシュ指示フレームのＴＳに格納したタイムスタンプを最終送信タイミングとして保持しておく。そして、つぎにリフレッシュ指示フレームを送信する際に、最終送信タイミングと今回送信するタイミングとの差が、喪失評価時間trns_intervalの１／２を超えるまで待ち、喪失評価時間の１／２を超えたところで、フレーム送信部１５から送信する。
【０１０９】
また、スレーブ局２の片道遅延検出部２４７は、図７でRefresh要求、RefreshMO応答、RefreshGO応答（リフレッシュ指示フレーム）を送信するステップ（Ｓ５６，Ｓ５９，Ｓ６２，Ｓ６５，Ｓ６８）で、リフレッシュ指示フレームを送信後に、送信したリフレッシュ指示フレームのＴＳに格納したタイムスタンプを最終送信タイミングとして保持しておく。そして、つぎにリフレッシュ指示フレームを送信する際に、最終送信タイミングと今回送信するタイミングとの差が、喪失評価時間trns_intervalの１／２を超えるまで待って、フレーム送信部２５から送信する。
【０１１０】
この実施の形態１によれば、周期通信中に２つのノード間でやり取りされるＰＤＵに、送信するデータを格納する領域と、遅延／喪失の検出に使用されるタイムスタンプを格納する領域に加えて、クロックオフセットを算出するための情報を格納する領域を設け、遅延／喪失の検出に使用されるタイムスタンプと、オフセットを算出するための情報を基に、２つのノード間のクロックオフセットを算出するようにした。これによって、クロックオフセット算出のために新たなＰＤＵを周期通信中にやり取りされるＰＤＵのほかに送信する必要がなく、かつＰＤＵのサイズも変わらないため、シーケンス制御を行うプログラマブルコントローラのように所定の処理周期で動作する装置に適用すると、定期データ処理に影響を与えないようにすることができるという効果を有する。
【０１１１】
また、周期通信時以外は往復での遅延測定を行い、周期通信時は片道での遅延測定を行うように遅延測定方法を切替えるようにした。これによって、シーケンス制御を行うプログラマブルコントローラシステムのように所定の処理周期でセンサやアクチュエータといった入出力機器からの入出力情報を送受信しているシステムに適用すると、入出力情報の遅延および喪失を検知するまでの時間を短縮することができる。
【０１１２】
さらに、周期通信データの生成間隔にばらつきがある場合でも、送信側では前回の送信タイミングから、受信側で喪失判定に使用する喪失評価時間の１／２を経過した後に送信するようにしているため、受信側では喪失が生じているのにもかかわらず、喪失ではないと判定することを防止し、確実に喪失を検出することができる。
【０１１３】
実施の形態２．
実施の形態１では、ＰＤＵのＴＳに格納される時刻情報のサイズについては触れなかったが、実施の形態２では、任意のサイズとする場合について説明する。
【０１１４】
実施の形態２では、マスタ局１とスレーブ局２が持つクロック１１，２１がいずれも４８ビット幅のクロックであり、ＰＤＵのＴＳのサイズが１６ビットに制限されている場合を例に挙げる。
【０１１５】
この実施の形態２のマスタ局１のタイムスタンプ生成部１４２は、クロック１１で生成された時刻情報のうち下位１６ビットをタイムスタンプとして生成する。また、スレーブ局２のタイムスタンプ生成部２４３は、クロック２１とクロックオフセット記憶部２４２が保持するタイムオフセットの和を算出し、算出値の下位１６ビットをタイムスタンプとして生成する。
【０１１６】
以下に、実施の形態２でのクロックオフセット算出処理、片道遅延検出処理およびＰＤＵ喪失検出処理で、実施の形態１と異なる部分について説明を行う。
【０１１７】
＜マスタ局１によるコネクション確立処理＞
図６のステップＳ１１のコネクション確立要求処理時に、マスタ局１のフレーム処理部１４３は、クロック１１の上位３２ビットの値を格納した通信フレームを生成し、フレーム送信部１５からスレーブ局２に送信する。また、クロック１１の上位３２ビットの値を、クロック上位ビット情報up_clk_s_d，up_clk_s_lとしてタイムスタンプ記憶部１４４に記憶する。
【０１１８】
＜スレーブ局２によるコネクション確立処理＞
図７のステップＳ５１のコネクション確立要求処理時に、スレーブ局２のフレーム処理部２４４は、マスタ局１から受信したクロック１１の上位３２ビットの値を、タイムスタンプ記憶部２４５に記憶する処理も行う。このとき、フレーム処理部２４４は、クロック１１の上位３２ビットの値を、応答ＰＤＵ送信時刻生成用上位ビット情報up_clk、要求ＰＤＵ送信時刻生成用上位ビット情報up_clk_d_s、要求ＰＤＵ受信時刻生成用上位ビット情報up_clk_d_r、喪失検出ＰＤＵ時刻生成用上位ビット情報up_clk_lとして記憶する。要求ＰＤＵ送信時刻生成用上位ビット情報up_clk_d_sは、ＰＤＵ送信時刻T_sndに関連付けされて記憶され、要求ＰＤＵ受信時刻生成用上位ビット情報up_clk_d_rは、ＰＤＵ受信時刻T_rcvに関連付けされて記憶され、喪失検出ＰＤＵ時刻生成用上位ビット情報up_clk_lは、前回ＰＤＵ送信時刻T_psndと今回ＰＤＵ送信時刻T_nsndに関連付けされて記憶される。
【０１１９】
＜マスタ局１によるチェックコード生成処理＞
図６のステップＳ１５，Ｓ１９，Ｓ２０，Ｓ２３，Ｓ２５，Ｓ２８でのRefresh要求、RefreshMO要求、RefreshGO要求を送信するステップで、マスタ局１のフレーム処理部１４３は、送信するＰＤＵのトレイラ部に、クロック１１で生成された時刻情報の上位３２ビット、ヘッダ部およびデータ部から生成したチェックコードを格納する処理も行う。
【０１２０】
＜スレーブ局２によるＰＤＵ送信時のチェックコード設定処理＞
図７のステップＳ５５、Ｓ５９，Ｓ６２，Ｓ６５，Ｓ６８でのRefresh要求、RefreshMO応答、RefreshGO応答を送信するステップで、スレーブ局２のフレーム処理部２４４は、送信するＰＤＵのトレイラ部に、クロック１１で生成された時刻情報の上位３２ビット、ヘッダ部およびデータ部から生成したチェックコードを格納する処理も行う。
【０１２１】
図１１は、実施の形態２によるスレーブ局のＰＤＵ送信時のチェックコード設定処理の手順の一例を示すフローチャートである。まず、Refresh要求、RefreshMO応答またはRefreshGO応答を前回送信したタイミングである前回ＰＤＵ送信時刻T_psndが、今回要求を送信するタイミングであるＰＤＵ送信時刻T_sndよりも大きいかを判定する（ステップＳ１３１）。前回ＰＤＵ送信時刻T_psndがＰＤＵ送信時刻T_snd以下の場合（ステップＳ１３１でＮｏの場合）には、タイムスタンプ記憶部２４５から取得した応答ＰＤＵ送信時刻生成用上位ビット情報up_clkを応答送信用上位ビットに設定する（ステップＳ１３２）。一方、前回ＰＤＵ送信時刻T_psndがＰＤＵ送信時刻T_sndよりも大きい場合（ステップＳ１３１でＹｅｓの場合）には、タイムスタンプ記憶部２４５から取得した応答ＰＤＵ送信時刻生成用上位ビット情報up_clkを１インクリメントしたものを応答送信用上位ビットに設定する（ステップＳ１３３）。また、ステップＳ１３３で得られた１インクリメントした応答ＰＤＵ送信時刻生成用上位ビット情報up_clk＋１を、新たな応答ＰＤＵ送信時刻生成用上位ビット情報up_clkとして、タイムスタンプ記憶部２４５に記憶する。
【０１２２】
ついで、フレーム処理部２４４は、設定した応答送信用上位ビット、送信するＰＤＵのヘッダ部およびデータ部からチェックコードを生成し、生成したチェックコードを送信するＰＤＵのトレイラ部に格納する（ステップＳ１３４）。ＰＤＵを送信した後（ステップＳ１３５）、フレーム処理部２４４は、今回送信するＰＤＵのＰＤＵ送信時刻T_sndをT_psndとしてタイムスタンプ記憶部２４５に保持し（ステップＳ１３５）、処理が終了する。
【０１２３】
＜片道遅延検出処理＞
図１２は、実施の形態２による片道遅延検出処理の手順の一例を示すフローチャートである。以下では、最初にマスタ局１による片道遅延検出処理を説明した後、スレーブ局２による片道遅延検出処理について説明する。
【０１２４】
（マスタ局１による片道遅延検出処理）
まず、マスタ局１の片道遅延検出部１４５は、タイムスタンプ生成部１４２で現在生成されたタイムスタンプを受け取り、受け取ったタイムスタンプを前回ＰＤＵ受信時刻T_prcvとしてタイムスタンプ記憶部１４４に記憶する（ステップＳ１５１）。ついで、周期通信の開始を契機として、片道遅延検出部１４５は、クロック１１を利用してタイマーを起動する（ステップＳ１５２）。なお、マスタ局１での周期通信の開始は、図４のＳＱ１４のRefreshGO応答をスレーブ局２から受信したタイミングである。
【０１２５】
ついで、フレーム受信部１６でRefresh要求、RefreshMO応答またはRefreshGO応答を受信したかを判定し（ステップＳ１５３）、受信していない場合（ステップＳ１５３でＮｏの場合）には、タイマー起動から所定期間（第１遅延許容時間）r_intervalが経過したかを判定する（ステップＳ１５４）。所定期間が経過していない場合（ステップＳ１５４でＮｏの場合）には、ステップＳ１５３に戻る。また、ステップＳ１５４で所定期間が経過している場合（ステップＳ１５４でＹｅｓの場合）には、許容する遅延を超過したと判定し（ステップＳ１５９）、コネクションを切断するなどの処理を行って、処理が終了する。
【０１２６】
一方、ステップＳ１５３でRefresh要求、RefreshMO応答またはRefreshGO応答のうちのいずれかを受信した場合（ステップＳ１５３でＹｅｓの場合）には、片道遅延検出部１４５は、Refresh要求、RefreshMO応答またはRefreshGO応答の受信タイミングのタイムスタンプをタイムスタンプ生成部１４２から受取り、タイムスタンプ記憶部１４４にそのタイムスタンプをＰＤＵ受信時刻T_rcvとして記憶する（ステップＳ１５５）。また、受信したRefresh要求、RefreshMO応答またはRefreshGO応答のＴＳに格納された値をＰＤＵ送信時刻T_sndとして、タイムスタンプ記憶部１４４に格納する（ステップＳ１５６）。
【０１２７】
ついで、片道遅延検出部１４５は、４８ビットＰＤＵ送信時刻T_snd_48と４８ビットＰＤＵ受信時刻T_rcv_48を生成する（ステップＳ１５７）。図１３は、マスタ局による４８ビットＰＤＵ送信時刻と４８ビットＰＤＵ受信時刻の生成処理の手順の一例を示すフローチャートである。
【０１２８】
まず、マスタ局１の片道遅延検出部１４５は、クロック１１の上位３２ビットをクロック上位ビット情報up_clk_s_dとする（ステップＳ１７１）。ついで、上位３２ビットをクロック上位ビット情報up_clk_s_dとし、下位１６ビットをＰＤＵ受信時刻T_rcvとする４８ビットＰＤＵ受信時刻T_rcv_48を生成する（ステップＳ１７２）。
【０１２９】
その後、ＰＤＵ送信時刻T_sndがＰＤＵ受信時刻T_rcvよりも大きいかを判定する（ステップＳ１７３）。ＰＤＵ送信時刻T_sndがＰＤＵ受信時刻T_rcv以下である場合（ステップＳ１７３でＮｏの場合）には、クロック上位ビット情報up_clk_s_dを時刻算出用上位ビットに設定する（ステップＳ１７４）。一方、ＰＤＵ送信時刻T_sndがＰＤＵ受信時刻T_rcvよりも大きい場合（ステップＳ１７３でＹｅｓの場合）には、クロック上位ビット情報up_clk_sを１デクリメントしたものを時刻算出用上位ビットに設定する（ステップＳ１７５）。
【０１３０】
ついで、片道遅延検出部１４５は、上位３２ビットをステップＳ１７４またはＳ１７５で設定した時刻算出用上位ビットとし、下位１６ビットをＰＤＵ送信時刻T_sndとする４８ビットＰＤＵ送信時刻T_snd_48を生成する（ステップＳ１７６）。その後、片道遅延検出部１４５は、設定した時刻算出用上位ビット、受信したＰＤＵのヘッダ部およびデータ部からチェックコードを算出し（ステップＳ１７７）、算出したチェックコードは受信したＰＤＵのトレイラ部に格納されている値と等しいかを判定する（ステップＳ１７８）。両者が一致しない場合（ステップＳ１７８の場合）には、異常が発生したと判定して処理が終了する。また、両者が等しい場合（ステップＳ１７８でＹｅｓの場合）には、図１２の処理に戻る。
【０１３１】
図１２に戻り、片道遅延検出部１４５は、４８ビットＰＤＵ受信時刻T_rcv_48と４８ビットＰＤＵ送信時刻T_snd_48の差が第２遅延許容時間d_allowedより小さいかを判定する（ステップＳ１５８）。判定の結果、４８ビットＰＤＵ受信時刻T_rcv_48と４８ビットＰＤＵ送信時刻T_snd_48との差が第２遅延許容時間d_allowed以上の場合（ステップＳ１５８でＮｏの場合）には、許容遅延超過と判定し（ステップＳ１５９）、コネクションの切断処理などがなされ、処理が終了する。また、４８ビットＰＤＵ受信時刻T_rcv_48と４８ビットＰＤＵ送信時刻T_snd_48との差が第２遅延許容時間d_allowedより小さい場合（ステップＳ１５８でＹｅｓの場合）には、許容遅延内と判定する（ステップＳ１６０）。その後、タイムスタンプ記憶部１４４に記憶されたＰＤＵ受信時刻T_rcvを、前回ＰＤＵ受信時刻T_prcvとしてタイムスタンプ記憶部１４４に記憶し（ステップＳ１６１）、タイマーを再起動し（ステップＳ１６２）、ステップＳ１５３へと戻る。以上のようにして、マスタ局１での片道遅延検出処理が行われる。
【０１３２】
（スレーブ局２による片道遅延検出処理）
スレーブ局２での片道遅延検出処理は基本的にマスタ局１での片道遅延検出処理と同様であるが、以下にマスタ局１の場合と異なる点について説明する。図１２のステップＳ１５２でのタイマーを起動するタイミングである周期通信の開始は、図４のＳＱ４３のRefreshGO要求をマスタ局１から受信したタイミングである。また、ステップＳ１５３では、Refresh要求、RefreshMO要求またはRefreshGO要求を受信したか判定し、ステップＳ１５５では、受信したRefresh要求、RefreshMO要求またはRefreshGO要求の受信タイミングのタイムスタンプをタイムスタンプ生成部２４３から受取って、ＰＤＵ受信時刻T_rcvとしてタイムスタンプ記憶部２４５に格納する。さらに、ステップＳ１５６では、受信したRefresh要求、RefreshMO要求またはRefreshGO要求のＴＳに格納された値をＰＤＵ送信時刻T_sndとしてタイムスタンプ記憶部２４５に格納する。
【０１３３】
また、ステップＳ１５８での４８ビットＰＤＵ送信時刻T_snd_48と４８ビットＰＤＵ受信時刻T_rcv_48の生成処理もマスタ局１の場合と異なる。図１４は、スレーブ局による４８ビットＰＤＵ送信時刻と４８ビットＰＤＵ受信時刻の生成処理の手順の一例を示すフローチャートである。
【０１３４】
まず、スレーブ局２の片道遅延検出部２４７は、タイムスタンプ記憶部２４５から喪失検出部２４８で使用される前回ＰＤＵ送信時刻T_psndを取得する（ステップＳ１９１）。ついで、ステップＳ１５６で取得した、受信したRefresh要求、RefreshMO要求またはRefreshGO要求のＴＳに格納されたＰＤＵ送信時刻T_sndが、ステップＳ１９１で取得した前回ＰＤＵ送信時刻T_psndよりも小さいかを判定する（ステップＳ１９２）。ＰＤＵ送信時刻T_sndが前回ＰＤＵ送信時刻T_psnd以上である場合（ステップＳ１９２でＮｏの場合）には、タイムスタンプ記憶部２４５から取得した要求ＰＤＵ送信時刻生成用上位ビット情報up_clk_d_sを送信時刻用上位ビットに設定する（ステップＳ１９３）。一方、ＰＤＵ送信時刻T_sndが前回ＰＤＵ送信時刻T_psndよりも小さい場合（ステップＳ１９２でＹｅｓの場合）には、タイムスタンプ記憶部２４５から取得した要求ＰＤＵ送信時刻生成用上位ビット情報up_clk_d_sを１インクリメントしたものを送信時刻用上位ビットに設定する（ステップＳ１９４）。また、ステップＳ１９４で得られたup_clk_d_s＋１を、新たな要求ＰＤＵ送信時刻生成用上位ビット情報up_clk_d_sとしてタイムスタンプ記憶部２４５に記憶する。
【０１３５】
その後、片道遅延検出部２４７は、上位３２ビットをステップＳ１９３またはＳ１９４で設定した送信時刻用上位ビットとし、下位１６ビットをＰＤＵ送信時刻T_sndとする４８ビットＰＤＵ送信時刻T_snd_48を生成する（ステップＳ１９５）。
【０１３６】
ついで、片道遅延検出部２４７は、図１２のステップＳ１５５で取得したＰＤＵ受信時刻T_rcvがステップＳ１５１で取得した前回ＰＤＵ受信時刻T_prcvよりも小さいか判定する（ステップＳ１９６）。判定の結果、ＰＤＵ受信時刻T_rcvが前回ＰＤＵ受信時刻T_prcv以上である場合（ステップＳ１９６でＮｏの場合）には、タイムスタンプ記憶部２４５から取得した要求ＰＤＵ受信時刻生成用上位ビット情報up_clk_d_rを受信時刻用上位ビットに設定する（ステップＳ１９７）。一方、ＰＤＵ受信時刻T_rcvが前回ＰＤＵ受信時刻T_prcvよりも小さい場合（ステップＳ１９６でＹｅｓの場合）には、タイムスタンプ記憶部２４５から取得した要求ＰＤＵ受信時刻生成用上位ビット情報up_clk_d_rを１インクリメントしたものを受信時刻用上位ビットに設定する（ステップＳ１９８）。また、ステップＳ１９８で得られたup_clk_d_r＋１を、新たな要求ＰＤＵ受信時刻生成用上位ビット情報up_clk_d_rとしてタイムスタンプ記憶部２４５に記憶する。
【０１３７】
その後、片道遅延検出部２４７は、上位３２ビットをステップＳ１９７またはＳ１９８で設定した受信時刻用上位ビットとし、下位１６ビットをＰＤＵ受信時刻T_rcvとする４８ビットＰＤＵ受信時刻T_rcv_48を生成する（ステップＳ１９９）。
【０１３８】
ついで、ステップＳ１９３またはＳ１９４で設定した送信時刻用上位ビット、受信したＰＤＵのヘッダ部およびデータ部からチェックコードを算出し（ステップＳ２００）、算出したチェックコードは受信したＰＤＵのトレイラ部に格納されている値と等しいかを判定する（ステップＳ２０１）。両者が一致しない場合（ステップＳ２０１の場合）には、異常が発生したと判定して処理が終了する。また、両者が等しい場合（ステップＳ２０１でＹｅｓの場合）には、図１２の処理に戻る。
【０１３９】
＜喪失検出処理＞
図１５は、実施の形態２による喪失検出処理の手順の一例を示すフローチャートである。以下では、最初にマスタ局１による喪失検出処理を説明した後、スレーブ局２による喪失検出処理について説明する。
【０１４０】
（マスタ局１による喪失検出処理）
マスタ局１の喪失検出部１４７は、RefreshReady応答を受信すると（ステップＳ２２１）、受信したRefreshReady応答のＴＳに格納されている値を前回ＰＤＵ受信時刻T_psndとしてタイムスタンプ記憶部１４４に格納する（ステップＳ２２２）。その後、Refresh要求、RefreshMO応答またはRefreshGO応答のうちのいずれかを受信したか判定する（ステップＳ２２３）。受信していない場合（ステップＳ２２３でＮｏの場合）には、Refresh要求、RefreshMO応答またはRefreshGO応答を受信するまで待ち状態となる。
【０１４１】
また、Refresh要求、RefreshMO応答またはRefreshGO応答を受信している場合（ステップＳ２２３でＹｅｓの場合）には、受信したRefresh要求、RefreshMO応答またはRefreshGO応答のＴＳに格納された値を今回ＰＤＵ送信時刻T_sndとして、タイムスタンプ記憶部１４４に格納し、Refresh要求、RefreshMO応答またはRefreshGO応答の受信時刻をフレーム受信時刻T_rcvとして格納する（ステップＳ２２４）。
【０１４２】
ついで、喪失検出部１４７は、４８ビット前回ＰＤＵ送信時刻T_psnd_48と４８ビット今回ＰＤＵ送信時刻T_nsnd_48を生成する（ステップＳ２２５）。図１６は、マスタ局による４８ビットＰＤＵ送信時刻と４８ビットＰＤＵ受信時刻の生成処理の手順の一例を示すフローチャートである。
【０１４３】
まず、マスタ局１の喪失検出部１４７は、クロック１１の上位３２ビットをクロック上位ビット情報up_clk_s_lとする（ステップＳ２４１）。ついで、ステップＳ２２４で取得した今回ＰＤＵ送信時刻T_nsndが、ステップＳ２２４３で受信したRefresh要求、RefreshMO応答またはRefreshGO応答のフレーム受信時刻T_rcvよりも大きいかを判定する（ステップＳ２４２）。今回ＰＤＵ送信時刻T_nsndがフレーム受信時刻T_rcv以下である場合（ステップＳ２４２でＮｏの場合）には、クロック上位ビット情報up_clk_s_lを第１喪失検出用上位ビットに設定する（ステップＳ２４３）。一方、今回ＰＤＵ送信時刻T_nsndがフレーム受信時刻T_rcvよりも大きい場合（ステップＳ２４２でＹｅｓの場合）には、クロック上位ビット情報up_clk_s_lを１デクリメントしたものを第１喪失検出用上位ビットに設定する（ステップＳ２４４）。
【０１４４】
ついで、喪失検出部１４７は、上位３２ビットをステップＳ２４３またはＳ２４４で設定した第１喪失検出用上位ビットとし、下位１６ビットを今回ＰＤＵ送信時刻T_nsndとする４８ビット今回ＰＤＵ送信時刻T_nsnd_48を生成する（ステップＳ２４５）。
【０１４５】
ついで、前回ＰＤＵ送信時刻T_psndが今回ＰＤＵ送信時刻T_nsndよりも大きいかを判定する（ステップＳ２４６）。前回ＰＤＵ送信時刻T_psndが今回ＰＤＵ送信時刻T_nsnd以下である場合（ステップＳ２４６でＮｏの場合）には、ステップＳ２４１で取得したクロック上位ビット情報up_clk_s_lを第２喪失検出用上位ビットに設定する（ステップＳ２４７）。一方、前回ＰＤＵ送信時刻T_psndが今回ＰＤＵ送信時刻T_nsndよりも大きい場合（ステップＳ２４６でＹｅｓの場合）には、ステップＳ２４１で取得したクロック上位ビット情報up_clk_s_lを１デクリメントしたものを第２喪失検出用上位ビットに設定する（ステップＳ２４８）。
【０１４６】
その後、喪失検出部１４７は、上位３２ビットをステップＳ２４７またはＳ２４８で設定した第２喪失検出用上位ビットとし、下位１６ビットを前回ＰＤＵ送信時刻T_psndとする４８ビット前回ＰＤＵ送信時刻T_psnd_48を生成する（ステップＳ２４９）。
【０１４７】
ついで、喪失検出部１４７は、ステップＳ２４３またはＳ２４４で設定した第１喪失検出上位ビット、受信したＰＤＵのヘッダ部およびデータ部からチェックコードを生成し（ステップＳ２５０）、算出したチェックコードは受信したＰＤＵのトレイラ部に格納されている値と等しいかを判定する（ステップＳ２５１）。両者が一致しない場合（ステップＳ２５１の場合）には、異常が発生したと判定して処理が終了し、両者が等しい場合（ステップＳ２５１でＹｅｓの場合）には、図１５の処理に戻る。
【０１４８】
図１５に戻り、喪失検出部１４７は、４８ビット今回ＰＤＵ送信時刻T_nsnd_48と４８ビット前回ＰＤＵ送信時刻T_psnd_48との差が、喪失評価時間trns_interval未満であるかを判定する（ステップＳ２２６）。判定の結果、上記条件を満たしていない場合（ステップＳ２２６でＮｏの場合）には、喪失ありと判定し（ステップＳ２２７）、コネクションを切断するなどの処理を行って、処理が終了する。また、上記条件を満たしている場合（ステップＳ２２６でＹｅｓの場合）には、喪失なしと判定する（ステップＳ２２８）。そして、今回ＰＤＵ送信時刻T_nsndを、前回ＰＤＵ送信時刻T_psndとして、タイムスタンプ記憶部１４４に記憶し（ステップＳ２２９）、ステップＳ２２３へと処理が戻る。
【０１４９】
（スレーブ局２による喪失検出処理）
スレーブ局２での喪失検出処理も基本的にマスタ局１での喪失検出処理と同様であるが、以下にマスタ局１の場合と異なる点について説明する。ステップＳ２２１では、RefreshReady要求を受信し、ステップＳ２２３では、Refresh要求、RefreshMO要求またはRefreshGO要求を受信したか判定する。
【０１５０】
また、ステップＳ２２５での４８ビット今回ＰＤＵ送信時刻T_nsnd_48と４８ビット前回ＰＤＵ送信時刻T_psnd_48の生成処理もマスタ局１の場合とは異なる。図１７は、スレーブ局による４８ビットＰＤＵ送信時刻と４８ビットＰＤＵ受信時刻の生成処理の手順の一例を示すフローチャートである。
【０１５１】
まず、スレーブ局２の喪失検出部２４８は、タイムスタンプ記憶部２４５から喪失検出ＰＤＵ時刻生成用上位ビット情報up_clk_lを取得する（ステップＳ２６１）。ついで、上位３２ビットを喪失検出ＰＤＵ時刻生成用上位ビット情報とし、下位１６ビットを前回ＰＤＵ送信時刻T_psndとする４８ビット前回ＰＤＵ送信時刻T_psnd_48を生成する（ステップＳ２６２）。
【０１５２】
その後、前回ＰＤＵ送信時刻T_psndが今回ＰＤＵ送信時刻T_nsndよりも大きいかを判定する（ステップＳ２６３）。前回ＰＤＵ送信時刻T_psndが今回ＰＤＵ送信時刻T_nsnd以下である場合（ステップＳ２６３でＮｏの場合）には、喪失検出ＰＤＵ時刻生成用上位ビット情報up_clk_lを喪失検出用上位ビットに設定する（ステップＳ２６４）。一方、前回ＰＤＵ送信時刻T_psndが今回ＰＤＵ送信時刻T_nsndよりも大きい場合（ステップＳ２６３でＹｅｓの場合）には、喪失検出ＰＤＵ時刻生成用上位ビット情報up_clk_lを１インクリメントしたものを喪失検出用上位ビットに設定する（ステップＳ２６５）。また、ステップＳ２６５で得られたup_clk_l＋１を、新たな喪失検出ＰＤＵ時刻生成用上位ビット情報up_clk_lとしてタイムスタンプ記憶部２４５に記憶する。
【０１５３】
ついで、喪失検出部２４８は、上位３２ビットをステップＳ２６４またはＳ２６５で設定した喪失検出用上位ビットとし、下位１６ビットを今回ＰＤＵ送信時刻T_nsndとする４８ビット今回ＰＤＵ送信時刻T_nsnd_48を生成する（ステップＳ２６６）。その後、喪失検出部２４８は、設定した喪失検出用上位ビット、受信したＰＤＵのヘッダ部およびデータ部からチェックコードを算出し（ステップＳ２６７）、算出したチェックコードは受信したＰＤＵのトレイラ部に格納されている値と等しいかを判定する（ステップＳ２７７）。両者が一致しない場合（ステップＳ２７７の場合）には、異常が発生したと判定して処理が終了する。また、両者が等しい場合（ステップＳ２７７でＹｅｓの場合）には、図１２の処理に戻る。
【０１５４】
なお、上記の例では、クロックが４８ビット幅であり、ＰＤＵのＴＳに１６ビットしか格納できない場合を示したが、クロックのビット幅は他の値でもよいし、ＰＤＵのＴＳに格納されるビット数も他の値でもよい。
【０１５５】
この実施の形態２によれば、ＰＤＵのタイムスタンプを格納するＴＳやＯＢＬには、その領域に入るサイズの下位ビットを格納し、クロックの上位ビットは、基準とするクロック１１を持つマスタ局１がコネクション確立時にスレーブ局２へと通知するようにした。これによって、ＰＤＵのＴＳのサイズがクロック幅未満に制限されている場合でも、マスタ局１とスレーブ局２との間で、遅延／喪失検出およびクロックオフセットの算出処理を行うことができるという効果を有する。また、ノードが持つクロックの一部をＰＤＵに含めるだけでよいため、ＰＤＵのサイズを削減することができるという効果も有する。
【産業上の利用可能性】
【０１５６】
以上のように、この発明にかかる通信装置は、周期的にデータを送受信するシステムで使用される通信装置に有用である。
【符号の説明】
【０１５７】
１  ノード、マスタ局
２  ノード、スレーブ局
３  伝送路
１１，２１  クロック
１２，２２  送信データ格納部
１３，２３  受信データ格納部
１４  マスタ遅延喪失検知手段
１５，２５  フレーム送信部
１６，２６  フレーム受信部
２４  スレーブ遅延喪失検知手段
１４１  コネクション確立要求部
１４２，２４３  タイムスタンプ生成部
１４３，２４４  フレーム処理部
１４４，２４５  タイムスタンプ記憶部
１４５，２４７  片道遅延検出部
１４６  往復遅延検出部
１４７，２４８  喪失検出部
２４１  コネクション確立応答部
２４２  クロックオフセット記憶部
２４６  クロックオフセット算出部
【図１】
2012035629.tif 000003
【図２】
2012035629.tif 000004
【図３】
2012035629.tif 000005
【図４】
2012035629.tif 000006
【図５】
2012035629.tif 000007
【図６】
2012035629.tif 000008
【図７】
2012035629.tif 000009
【図８】
2012035629.tif 000010
【図９】
2012035629.tif 000011
【図１０】
2012035629.tif 000012
【図１１】
2012035629.tif 000013
【図１２】
2012035629.tif 000014
【図１３】
2012035629.tif 000015
【図１４】
2012035629.tif 000016
【図１５】
2012035629.tif 000017
【図１６】
2012035629.tif 000018
【図１７】
2012035629.tif 000019
【国際調査報告】
2012035629.tif 000020
2012035629.tif 000021