(57)【特許請求の範囲】
【請求項１】
１つ又は複数の被制御装置と、ネットワークを介して前記被制御装置を制御する通信制御装置と、を備えて構成される通信制御システムであって、
前記通信制御装置は、
演算部と、
パケットをネットワークに送信する送信部とネットワークからのパケットを受信する受信部とを有してなる第一の通信部および第二の通信部と、
前記演算部と前記第一の通信部および第二の通信部との間に設けられ、通信経路を制御する冗長化通信制御部と、
前記被制御装置を時刻同期する時刻同期部と、
を具備し、
前記冗長化通信制御部は、
前記ネットワークの経路の状態を判定する通信経路状態判定部と、
前記演算部と前記第一の通信部および第二の通信部との間の接続を切り替える冗長経路切替部と、
パケット受信時刻を記憶する通信遅延記憶部と、
を具備し、
前記通信経路状態判定部は、
前記ネットワークの通信経路の異常を判定する通信経路異常判定部と、
前記ネットワークの通信経路の正常を判定する通信経路正常判定部と、
を具備し、
前記演算部は、制御対象への指令値を前記冗長化通信制御部へと送信し、前記制御対象への通信結果を前記冗長化通信制御部から受信し、
通信部は、前記冗長化通信制御部から受信した通信内容を、前記ネットワークを介して、前記制御対象に送信し、前記制御対象から受信した結果を前記冗長化通信制御部に送信し、
前記冗長経路切替部は、前記通信経路正常判定部が通信経路を正常と判定している場合には、前記演算部と前記第一の通信部とを接続すると共に、前記第二の通信部の受信部と送信部とを接続し、前記通信経路異常判定部が通信経路を異常と判定している場合には、前記演算部を前記第一の通信部の送信部と接続すると共に、前記演算部を前記第二の通信部の受信部とも接続し、かつ、前記第一の通信部の受信部と前記第二の通信部の送信部と、を接続し、
前記通信遅延記憶部は、前記通信経路正常判定部が通信経路を正常と判定している場合に、前記第一の通信部の受信部でパケットを受信した第一の受信時刻と、前記第二の通信部の受信部でパケットを受信した第二の受信時刻と、を保持し、
前記時刻同期部は、前記通信遅延記憶部が保持する第二の受信時刻と第一の受信時刻を用いて算出される遅延補正値を用いて制御対象を時刻同期する、
ことを特徴とする通信制御システム。
【請求項２】
前記通信制御装置は、
さらに、通信経路異常発生箇所特定部を具備し、
前記通信経路異常発生箇所特定部は、通信経路異常の発生箇所を特定して、通信経路が変わった前記被制御装置を識別し、
前記時刻同期部は、前記通信経路異常発生箇所特定部が識別した前記被制御装置と時刻同期する、
ことを特徴とする請求項１に記載の通信制御システム。
【請求項３】
前記時刻同期部は、前記通信経路正常判定部が通信経路を正常と判定している場合の前記被制御装置の遅延情報に対して、
前記通信経路異常判定部が通信経路を異常と判定している場合は、前記通信経路異常発生箇所特定部が識別した前記被制御装置の遅延情報に前記遅延補正値を加算する、ことを特徴とする請求項２に記載の通信制御システム。
【請求項４】
すべての前記被制御装置は、通信を受信した場合に、所定の数を足す通信内容をパケットに付与し、
前記通信制御装置の前記通信経路異常発生箇所特定部は、前記パケットを受信した場合に、前記通信内容の数を用いて通信経路異常発生箇所を特定する、
ことを特徴とする請求項２に記載の通信制御システム。
【請求項５】
前記通信経路異常発生箇所特定部は、
前記被制御装置の通信経路情報が通信経路の異常を示す場合に、前記被制御装置の接続する通信経路を異常と特定する、
ことを特徴とする請求項２に記載の通信制御システム。
【請求項６】
すべての前記被制御装置は、通信を受信した場合に、所定の数を足す通信内容をパケットに付与し、
前記通信制御装置の前記時刻同期部は、前記通信経路異常発生箇所特定部が識別した前記被制御装置のパケットを受信した際には、数が所定の値以上となるように初期値を設定した通信内容を前記パケットに付与する、
ことを特徴とする請求項２に記載の通信制御システム。
【請求項７】
前記時刻同期部は、前記通信経路異常判定部が通信経路を異常と判定している場合に、前記第一の通信部の前記受信部で受信したパケットに対して、
前記通信経路異常発生箇所特定部が識別した前記被制御装置の前記遅延補正値、遅延情報と前記遅延補正値の加算値、通信経路の変更有無のいずれかまたは複数の情報を付加して、
前記第二の通信部の前記送信部から送信する、
ことを特徴とする請求項２に記載の通信制御システム。
【請求項８】
前記通信遅延記憶部は、
前記通信経路正常判定部が通信経路を正常と判定している場合の前記被制御装置の遅延情報と前記遅延補正値、
前記通信経路異常判定部が通信経路を異常と判定している場合の前記通信経路異常発生箇所特定部が特定した通信経路異常の発生箇所、
通信経路が変わった前記被制御装置、
のいずれかまたは複数を保持し、
前記時刻同期部は、
前記通信経路状態判定部の通信経路の判定が異常から正常に変わった場合に、前記通信遅延記憶部が保持する情報を用いて前記被制御装置と時刻同期する、
ことを特徴とする請求項２に記載の通信制御システム。
【請求項９】
前記通信制御装置は、
前記通信経路異常判定部が通信経路を異常と判定している場合に、前記第一の通信部の前記受信部で受信してから、前記第二の通信部の前記送信部から送信したパケットを識別し、
前記第一の通信部で受信した第一のパケットが前記識別したパケットである場合に、
前記第一のパケットを破棄する、
前記第一のパケットを転送する、
前記通信経路正常判定部が通信経路を正常と判定する、
のいずれかまたは複数の処理を実行する、
ことを特徴とする請求項１に記載の通信制御システム。
【請求項１０】
前記通信制御装置は、
前記通信経路異常判定部が通信経路を異常と判定している場合に、前記第一の通信部の前記受信部で受信してから、前記第二の通信部の前記送信部から送信したパケットを識別し、
前記第二の通信部で受信した第一のパケットが前記識別したパケットである場合に、
前記第一のパケットを破棄する、
前記第一のパケットを転送する、
前記通信経路異常判定部が通信経路を異常と判定する、
のいずれかまたは複数の処理を実行する、
ことを特徴とする請求項１に記載の通信制御システム。
【請求項１１】
前記時刻同期部は、前記遅延補正値の算出に前記被制御装置内の通信遅延を用いる、
ことを特徴とする請求項１に通信制御システム。
【請求項１２】
前記通信遅延は、経路異常発生箇所に隣接する前記被制御装置内の通信遅延である、
ことを特徴とする請求項１１に記載の通信制御システム。
【請求項１３】
前記時刻同期部は、
通信不可な前記被制御装置の数をもとに前記遅延補正値を算出する、
ことを特徴とする請求項１に記載の通信制御システム。
【請求項１４】
前記時刻同期部は、
前記通信経路異常判定部が通信経路を異常と判定した場合に時刻補正パケットの送信を停止し、所定事象後に前記時刻補正パケットの送信を再開する、
ことを特徴とする請求項１に記載の通信制御システム。
【請求項１５】
ネットワークを介して１つ又は複数の被制御装置を制御する通信制御装置は、
演算部と、
パケットをネットワークに送信する送信部とネットワークからのパケットを受信する受信部とを有してなる第一の通信部および第二の通信部と、
前記演算部と前記第一の通信部および第二の通信部との間に設けられ、通信経路を制御する冗長化通信制御部と、
前記被制御装置を時刻同期する時刻同期部と、
を具備し、
前記冗長化通信制御部は、
前記ネットワークの経路の状態を判定する通信経路状態判定部と、
前記演算部と前記第一の通信部および第二の通信部との間の接続を切り替える冗長経路切替部と、
パケット受信時刻を記憶する通信遅延記憶部と、
を具備し、
前記通信経路状態判定部は、
前記ネットワークの通信経路の異常を判定する通信経路異常判定部と、
前記ネットワークの通信経路の正常を判定する通信経路正常判定部と、
を具備し、
前記演算部は、制御対象への指令値を前記冗長化通信制御部へと送信し、前記制御対象への通信結果を前記冗長化通信制御部から受信し、
通信部は、前記冗長化通信制御部から受信した通信内容を、前記ネットワークを介して、前記制御対象に送信し、前記制御対象から受信した結果を前記冗長化通信制御部に送信し、
前記冗長経路切替部は、前記通信経路正常判定部が通信経路を正常と判定している場合には、前記演算部と前記第一の通信部とを接続すると共に、前記第二の通信部の受信部と送信部とを接続し、前記通信経路異常判定部が通信経路を異常と判定している場合には、前記演算部を前記第一の通信部の送信部と接続すると共に、前記演算部を前記第二の通信部の受信部とも接続し、かつ、前記第一の通信部の受信部と前記第二の通信部の送信部と、を接続し、
前記通信遅延記憶部は、前記通信経路正常判定部が通信経路を正常と判定している場合に、前記第一の通信部の受信部でパケットを受信した第一の受信時刻と、前記第二の通信部の受信部でパケットを受信した第二の受信時刻と、を保持し、
前記時刻同期部は、前記通信遅延記憶部が保持する第二の受信時刻と第一の受信時刻を用いて算出される遅延補正値を用いて前記制御対象を時刻同期する、
ことを特徴とする通信制御装置。
【請求項１６】
さらに、通信経路異常発生箇所特定部を具備し、
前記通信経路異常発生箇所特定部は、通信経路異常の発生箇所を特定して、通信経路が変わった前記被制御装置を識別し、
前記時刻同期部は、前記通信経路異常発生箇所特定部が識別した前記被制御装置と時刻同期する、
ことを特徴とする請求項１５に記載の通信制御装置。
【請求項１７】
前記時刻同期部は、前記通信経路正常判定部が通信経路を正常と判定している場合の前記被制御装置の遅延情報に対して、
前記通信経路異常判定部が通信経路を異常と判定している場合は、前記通信経路異常発生箇所特定部が識別した前記被制御装置の遅延情報に前記遅延補正値を加算する、ことを特徴とする請求項１６に記載の通信制御装置。
【請求項１８】
請求項１５に記載の前記通信制御装置からネットワークを介して制御および時刻同期される被制御装置は、
パケットをネットワークに通信する被制御装置通信部と、
前記通信部で通信されるパケットを用いて時刻同期する被制御装置時刻同期部と、
通信経路状態を判定する被制御装置通信経路状態判定部と、
被制御装置通信遅延記憶部と、
を備え、
前記被制御装置通信経路状態判定部は、
前記ネットワークの通信経路の異常を判定する被制御装置通信経路異常判定部と、
前記ネットワークの通信経路の正常を判定する被制御装置通信経路正常判定部と、
を有し、
前記被制御装置通信遅延記憶部は、
前記被制御装置通信経路正常判定部が通信経路を正常と判定している場合の遅延情報と、前記遅延補正値と、を保持し、
前記被制御装置時刻同期部は、
前記被制御装置通信経路正常判定部が通信経路を正常と判定している場合は前記遅延情報を用いて時刻同期し、
前記被制御装置通信経路異常判定部が通信経路を異常と判定している場合は前記遅延情報と、前記遅延補正値とを用いて時刻同期する、
ことを特徴とする被制御装置。
【請求項１９】
前記被制御装置通信経路状態判定部は、前記通信制御装置からの通信を用いて、通信経路の状態を
判定することを特徴とする請求項１８に記載の被制御装置。
【請求項２０】
前記被制御装置は、
前記被制御装置通信部が接続する通信経路の異常を判定した場合に、通信経路の異常発生を示す所定の情報を通信パケットに付加して送信する、
ことを特徴とする請求項１８に記載の被制御装置。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、情報処理装置及び情報処理ハードウェア、情報処理ソフトウェアを用いた通信制御システム、通信制御装置、および被制御装置に関する。
【背景技術】
【０００２】
制御システムとして、単一の制御用計算機が、ネットワークを介して単一または複数の制御対象を制御する構成がある。ある制御システムでは、単一の制御用計算機と複数の制御対象がリングトポロジを構成する。この場合、制御用計算機から送信された制御パケットは、制御対象を順番に伝送していく。制御パケットは複数の制御対象への制御指令を連結して構成される場合もある。また、ネットワークトポロジは、論理的なリングトポロジ（環型トポロジー）であればよい仕様もある。この場合、スタートポロジ（星型トポロジー）やバストポロジ（バス型トポロジー）であっても、制御パケットが順番に制御対象を伝送していけばよい。このようなリングトポロジで構成する制御システムには、ＥｔｈｅｒＣＡＴやＳＥＲＣＯＳ（SErial Realtime COmmunication System）等がある。
【０００３】
リアルタイムＥｔｈｅｒｎｅｔであるＥｔｈｅｒＣＡＴ（登録商標：ＩＥＣ６１７８４パート２のＣｏｍｍｕｎｉｃａｔｉｏｎ Ｐｒｏｆｉｌｅ Ｆａｍｉｌｙ １２）では、制御用計算機であるマスタと制御対象に備え付けられるスレーブデバイス（以下、スレーブとする）でリングトポロジを構成する。
一般に、スレーブでは２つのＥｔｈｅｒｎｅｔポートを有し、これを接続していくことでリングトポロジを構成する。ただし、マスタは、Ｅｔｈｅｒｎｅｔポートが１つであっても構わない。
この場合は、リングネットワーク上の終端のスレーブが内部でパケットを折り返すことで、最終的にマスタの１つのＥｔｈｅｒｎｅｔポートにパケットを戻す。したがって、例えば、見た目上はライントポロジを構成する場合であっても、パケットの通信経路に着目すれば、論理的なリングトポロジになっている。
【０００４】
このような制御システムは、制御処理を高信頼に実行するために追加の処置がなされることがある。特に異常発生時に制御処理が正しく実行されないことで多大な被害を及ぼす場合は、このような処置がなされる。単一の制御用計算機と複数の制御対象でリングトポロジを構成する場合は、そのような高信頼化の方法として通信経路の冗長化等の方法がある。通信経路の異常としては、通信ケーブルの断線や接触不良、コネクタ、ケーブルの脱離が例示される。
【０００５】
また、ＥｔｈｅｒＣＡＴにおけるマスタでは、マスタにＥｔｈｅｒｎｅｔの通信ポートを２つ持たせることで、リングトポロジへの接続を冗長化させる方式がとられる。物理的にＥｔｈｅｒＣＡＴマスタに２つの通信ポートを持たせた場合、冗長化の方法として２つの通信ポートの両方から同一のパケットを送信する方法が考えられる（図１参照）。
【０００６】
これとは別の冗長化の方法で、片方の通信ポートからのみパケットを送信し、パケットを送信するポートから最も遠いスレーブ（つまり、もう片方のポートと隣接するスレーブ）の内部でパケットを折り返すように設定する方法も考えられる（図４３参照）。
【０００７】
また、特許文献１では、マスタ内の経路を異常時と正常時で切り替えることによって、パケットが各スレーブを経過する順序を変化させることなく、固定遅延とする技術が開示されている。
【先行技術文献】
【特許文献】
【０００８】
【特許文献１】特開２０１１−１７６７１８号公報
【発明の概要】
【発明が解決しようとする課題】
【０００９】
しかしながら、従来の汎用的な方法でＥｔｈｅｒＣＡＴマスタを冗長化させた場合、各スレーブ間での時刻同期の問題が生じる。
まず、はじめにＥｔｈｅｒＣＡＴのリングネットワークが切断された状態では、ＥｔｈｅｒＣＡＴの時刻同期機能が十分な性能で機能しない。
例えば図４１に示した例では、ＥｔｈｅｒＣＡＴマスタにおいて、２つの通信ポートのそれぞれから時刻同期用のパケットを送信した場合、それぞれのパケットはリングネットワークを周回せず、送信した通信ポートとは別のもう一方の通信ポートで受信することとなる。したがって、時刻同期のための通信遅延の計算等ができない。
さらに、図４２に示すようなスレーブＢとスレーブＣ間の断線時には、ネットワークが二分され、全スレーブ間で時刻を同期することができない。図４２では、ネットワークがスレーブＡ、Ｂと、スレーブＣ、Ｄに二分される。スレーブＡ、Ｄ間でパケットを転送しようとすることができるが、汎用のパソコンを用いる構成では、ソフトウェアを介して、もう片方の通信ポートからパケットを送信する必要がある。しかしながら、このソフトウェア処理はＥｔｈｅｒＣＡＴスレーブのパケット転送処理に比較して、より長い遅延とジッタを生じる。したがって、全スレーブ間で時刻を同期することができない。
【００１０】
また、ソフトウェアによる冗長化処理の場合において、図４４の例に示すように通信経路に異常が発生した場合に、マスタからアクセスできなくなるスレーブが発生するため、経路冗長化の効果が無効化する。
【００１１】
また、特許文献１に開示された技術においては、マスタ内の経路を異常時と正常時で切り替えることによって、パケットが各スレーブを経過する順序を変化させることなく、固定遅延としている。しかしながら、異常時においては、パケットが往路と復路で、各スレーブを経過しないため、後記する図８にしたがい式１〜式５で述べる方法によって、スレーブ間の通信遅延を求めることができない。
例えば、図２０に示す断線の場合においては、スレーブＢを経過したパケットは、通信経路の異常発生箇所があるため、マスタに戻り、スレーブＣへと転送される。この時、スレーブＢ、Ｃ間の通信経路が変化しているため、新たにスレーブＢ、Ｃ間の通信遅延を算出する必要がある。しかしながら、スレーブＣへと転送されたパケットは、その後、スレーブＢへ戻ることなく、マスタで受信される。この場合、図８で示した方法にしたがって、式１〜式５に示す計算方法が利用できないため、個別に各通信経路上の通信遅延を求めて合計する必要がある。しかしながら、この方法にはいくつかの課題がある。一つ目は、計算そのものが困難であることである。例えば、マスタを経由する際の遅延（図２０の遅延ｔ３）は、求めること自体が難しい。二つ目の課題は、断線箇所によって計算する経路の数が変化することである。これは、通信遅延の計算を複雑化させ、結果として容易に求めることができない。
これらの課題により、通信経路での異常発生時に再び同期するまでの時間がかかれば、各スレーブ間の同期精度は時間経過とともに悪化する。場合によっては、システムが満足すべき許容値を下回る可能性がある。
【００１２】
以上をまとめると、汎用的なＥｔｈｅｒＣＡＴマスタの冗長化構成や、ソフトウェアによる冗長化処理の方法、あるいは特許文献１に開示された技術においては、通信経路での異常発生時における時刻同期の同期精度の低下という信頼性に関わる課題がある。
【００１３】
本発明は前記課題に鑑みてなされたものであり、信頼性を向上した通信制御システムを提供することを目的とする。
【課題を解決するための手段】
【００１４】
前記の課題を解決して、本発明の目的を達成するために、以下のように構成した。
即ち、本発明の通信制御システムは、１つ又は複数の被制御装置と、ネットワークを介して前記被制御装置を制御する通信制御装置と、を備えて構成される通信制御システムであって、前記通信制御装置は、演算部と、パケットをネットワークに送信する送信部とネットワークからのパケットを受信する受信部とを有してなる第一の通信部および第二の通信部と、前記演算部と前記第一の通信部および第二の通信部との間に設けられ、通信経路を制御する冗長化通信制御部と、前記被制御装置を時刻同期する時刻同期部と、を具備し、前記冗長化通信制御部は、前記ネットワークの経路の状態を判定する通信経路状態判定部と、前記演算部と前記第一の通信部および第二の通信部との間の接続を切り替える冗長経路切替部と、パケット受信時刻を記憶する通信遅延記憶部と、を具備し、前記通信経路状態判定部は、前記ネットワークの通信経路の異常を判定する通信経路異常判定部と、前記ネットワークの通信経路の正常を判定する通信経路正常判定部と、を具備し、前記演算部は、制御対象への指令値を前記冗長化通信制御部へと送信し、前記制御対象への通信結果を前記冗長化通信制御部から受信し、通信部は、前記冗長化通信制御部から受信した通信内容を、前記ネットワークを介して、前記制御対象に送信し、前記制御対象から受信した結果を前記冗長化通信制御部に送信し、前記冗長経路切替部は、前記通信経路正常判定部が通信経路を正常と判定している場合には、前記演算部と前記第一の通信部とを接続すると共に、前記第二の通信部の受信部と送信部とを接続し、前記通信経路異常判定部が通信経路を異常と判定している場合には、前記演算部を前記第一の通信部の送信部と接続すると共に、前記演算部を前記第二の通信部の受信部とも接続し、かつ、前記第一の通信部の受信部と前記第二の通信部の送信部と、を接続し、前記通信遅延記憶部は、前記通信経路正常判定部が通信経路を正常と判定している場合に、前記第一の通信部の受信部でパケットを受信した第一の受信時刻と、前記第二の通信部の受信部でパケットを受信した第二の受信時刻と、を保持し、前記時刻同期部は、前記通信遅延記憶部が保持する第二の受信時刻と第一の受信時刻を用いて算出される遅延補正値を用いて制御対象を時刻同期する、ことを特徴とする。
また、その他の手段は、発明を実施するための形態のなかで説明する。
【発明の効果】
【００１５】
以上、本発明によれば、信頼性を向上した通信制御システムを提供することができる。
【図面の簡単な説明】
【００１６】
【図１】本発明の第１実施形態を適用した制御用計算機を用いて構成するシステムの一例を示す図である。
【図２】本発明の第１実施形態を適用した制御用計算機のハードウェア構成の一例を示す図である。
【図３】本発明の第１実施形態を適用した冗長化通信制御部の機能構成の一例を示す図である。
【図４】本発明の第１実施形態を適用した冗長経路切替部内部の通信経路の第１の接続形態を示す図である。
【図５】本発明の第１実施形態を適用した冗長経路切替部内部の通信経路の第２の接続形態を示す図である。
【図６】本発明の第１実施形態を適用した制御対象におけるハードウェア構成を示す図である。
【図７】本発明の第１実施形態を適用したスレーブＩＣのハードウェア構成を示す図である。
【図８】本発明の第１実施形態を適用したＥｔｈｅｒＣＡＴスレーブＡ、Ｂ、Ｃの各スレーブＩＣにおいて、パケットの通信経路と各スレーブの各ポートでの受信時刻を示す図である。
【図９】本発明の第１実施形態を適用した冗長化通信制御部による動作手順の第１例を示すフローチャートである。
【図１０】本発明の第１実施形態を適用した冗長化通信制御部による動作手順の第２例を示すフローチャートである。
【図１１Ａ】本発明の第１実施形態を適用した通信経路において、通信経路異常が発生した状態を示す図である。
【図１１Ｂ】本発明の第１実施形態を適用した通信経路において、通信経路が正常となった状態を示す図である。
【図１２】ＥｔｈｅｒＣＡＴのパケット構成の例を示す図である。
【図１３Ａ】本発明の第１実施形態を適用した通信経路において、通信経路が正常な状態を示す図である。
【図１３Ｂ】本発明の第１実施形態を適用した通信経路に通信経路異常がある状態を示す図である。
【図１４】本発明の第１実施形態において、全てのスレーブが処理すべきレジスタに対するＢＲＤコマンドのワーキングカウンタの値を利用する方法を示すフローチャートである。
【図１５】本発明の第１実施形態を適用したシステムにおいて、通信経路に異常が発生している状態を示す図である。
【図１６】本発明の第１実施形態を適用したシステムにおいて、非ゼロの値が取得された通信ポートが接続する通信経路が異常であると判定する方法を示すフローチャートである。
【図１７】本発明の第１実施形態を適用したシステムにおいて、主ポートと冗長ポートとがあって、通信経路異常が生じている状態を示す図である。
【図１８】本発明の第１実施形態を適用したシステムにおいて、正常状態と異常状態とを示した状態遷移図である。
【図１９】本発明の第１実施形態を適用した冗長経路切替部を介して主ポートの通信部と冗長ポートの通信部とによって、２つの制御対象に通信パケットを送っている状況を示す図である。
【図２０】本発明の第１実施形態を適用した冗長経路切替部を介して主ポートの通信部と冗長ポートの通信部とによって、４つの制御対象に通信パケットを送っている通信経路に通信経路異常が発生した状況を示す図である。
【図２１】本発明の第１実施形態を適用したシステムにおいて、時刻同期補正の手順を示すフローチャートである。
【図２２】本発明の第１実施形態を適用した冗長経路切替部と主ポートと冗長ポートとスレーブＡ〜スレーブＤからなる通信経路において、通信経路異常がない状況を示す図である。
【図２３】本発明の第２実施形態を適用した制御対象の通信ハードウェア上のＣＰＵ上で動作する機能構成を示す図である。
【図２４】本発明の第２実施形態を適用したシステムにおいて、時系列上の割込みと同期のタイミングを示すタイムチャートである。
【図２５】本発明の第２実施形態を適用したシステムにおいて、時刻同期割込みとタイマによるタイマ割込みと時刻管理部の動作を示した第１例のフローチャートである。
【図２６】本発明の第２実施形態を適用したシステムにおいて、時刻同期割込みとタイマによるタイマ割込みと時刻管理部の動作を示した第２例のフローチャートである。
【図２７】本発明の第２実施形態を適用したシステムにおいて、時系列上の割込みと同期のタイミングを示すタイムチャートである。
【図２８】本発明の第３実施形態を適用した制御用計算機のハードウェア構成を示す図である。
【図２９】本発明の第３実施形態における制御用計算機のハードウェア構成の一例を示す図である。
【図３０】本発明の第３実施形態における制御用計算機を用いたシステムの構成の一例を示す図である。
【図３１】本発明の第３実施形態における物理的な通信部と機能的な通信部の対応付けの一例を示した図である。
【図３２】本発明の第３実施形態における冗長経路切替部内部の通経路の接続の第１例を示した図である。
【図３３】本発明の第３実施形態における冗長経路切替部内部の通経路の接続の第２例を示した図である。
【図３４】本発明の第３実施形態における冗長経路切替部内部の通経路の接続の第３例を示した図である。
【図３５】本発明の第３実施形態における冗長経路切替部内部の通経路の接続の第４例を示した図である。
【図３６】本発明の第３実施形態における動作管理部が制御する冗長経路切替部内の接続状態の切り替えを示す状態遷移図である。
【図３７】本発明の第４実施形態における通信経路において２箇所に経路異常が発生したときの状態を示す図である。
【図３８】本発明の第５実施形態を適用した中継装置を用いて構成するシステムの例を示す図である。
【図３９】本発明の第５実施形態を適用した中継装置のハードウェア構成の一例を示す図である。
【図４０】本発明の第５実施形態を適用した冗長化通信制御部の機能構成を示すブロック図である。
【図４１】ＥｔｈｅｒＣＡＴマスタにおいて、２つの通信ポートのそれぞれから時刻同期用のパケットを送信した場合のパケットの通信経路の一例を示した図である。
【図４２】ＥｔｈｅｒＣＡＴマスタにおいて、２つの通信ポートのそれぞれから時刻同期用のパケットを送信した場合のパケットの通信経路に通信経路異常が発生している一例を示した図である。
【図４３】ＥｔｈｅｒＣＡＴマスタにおいて、２つの通信ポートの一方からのみパケットを送信した場合のパケットの通信経路の一例を示した図である。
【図４４】ＥｔｈｅｒＣＡＴマスタにおいて、２つの通信ポートの一方からのみパケットを送信した場合のパケットの通信経路に通信経路異常が発生している一例を示した図である。
【発明を実施するための形態】
【００１７】
以下、本発明の通信制御システムの実施の形態について説明する。
【００１８】
（第１実施形態）
本発明に係る通信制御システムの第１実施形態について図を参照して説明する。
【００１９】
＜制御用計算機を用いて構成するシステム＞
図１は、本発明の第１実施形態を適用した制御用計算機１２０を用いて構成するシステムの一例を示す図である。
制御用計算機１２０（通信制御装置）は、制御用ネットワーク１２２（ネットワーク）を介して複数の制御対象１２１（被制御装置）と接続し、制御する。
図１における制御対象１２１としては、例えば、サーボアンプとサーボモータによる構成がある。
また、制御用ネットワーク１２２の例としては、Ｅｔｈｅｒｎｅｔ（登録商標：ＩＥＥＥ８０２．３）が適用される。
また、制御用計算機１２０は、２つのＥｔｈｅｒｎｅｔ通信ポートを有し、制御用ネットワーク１２２と接続する。
【００２０】
＜制御用計算機のハードウェア構成＞
図２は、本発明の第１実施形態を適用した制御用計算機１２０のハードウェア構成の一例を示す図である。
ＣＰＵ（Central Processing Unit）１０１は、不揮発性記憶媒体１０９からプログラムを、バス１１０を介してメモリ１０８に転送して実行する。実行処理プログラムの例としては、オペレーティングシステム（以下、ＯＳと称す）や、ＯＳ上で動作するアプリケーションプログラムがある。
【００２１】
冗長化通信制御部１０２は、ＣＰＵ１０１上で動作するプログラムから通信要求を受け取り、ＰＨＹ１０３を用いて制御用ネットワーク１２２に対して通信する。冗長化通信制御部１０２の実装例としては、ＦＰＧＡ（Field-Programmable Gate Array）、ＣＰＬＤ（Complex Programmable Logic Device）、ＡＳＩＣ（Application Specific Integrated Circuit）、ゲートアレイ（Gate Array）等のＩＣがある。なお、冗長化通信制御部１０２は、ＣＰＵ１０１に含まれていてもよい。
【００２２】
また、ＰＨＹ１０３は、制御用ネットワーク１２２との通信機能を実装した送受信機ＩＣである。ＰＨＹ１０３の提供する通信規格の例として、ＥｔｈｅｒｎｅｔのＰＨＹ（physical layer、物理層）チップがある。
なお、図２の構成では、ＰＨＹ１０３と冗長化通信制御部１０２が接続しているので、ＥｔｈｅｒｎｅｔのＭＡＣ（Media Access Control）層の処理は、冗長化通信制御部１０２に含まれる。
ただし、ＭＡＣ機能を提供するＩＣを冗長化通信制御部１０２とＰＨＹ１０３間に配置する構成や、ＭＡＣ機能を提供するＩＣとＰＨＹ１０３を組み合わせた通信用ＩＣと冗長化通信制御部１０２を接続する構成においても、本発明の効果は失われるものではない。なお、ＰＨＹ１０３は、冗長化通信制御部１０２に含まれていてもよい。
【００２３】
バス１０４は、Ｅｔｈｅｒｎｅｔの冗長化通信制御部１０２とＰＨＹ１０３層を接続する通信規格であり、ＭＩＩ（Media Independent Interface）、ＧＭＩＩ(Gigabit Media Independent Interface)、ＲＭＩＩ(Reduced Gigabit Media Independent Interface)などが例示される。なお、ＰＨＹ１０３を冗長化通信制御部１０２内に含む場合は、バス１０４は冗長化通信制御部１０２内に含まれる。
【００２４】
メモリ１０８は、ＣＰＵ１０１が動作するための一時的な記憶領域であり、不揮発性記憶媒体１０９から転送したＯＳ、アプリケーションプログラム等が格納される。
【００２５】
不揮発性記憶媒体１０９は、情報の記憶媒体で、ＯＳ、アプリケーション、デバイスドライバ等や、ＣＰＵ１０１を動作させるためのプログラムの保存、プログラムの実行結果の保存に利用される。不揮発性記憶媒体１０９として、ハードディスクドライブ（ＨＤＤ）やソリッドステートドライブ（ＳＳＤ）、フラッシュメモリが例示される。また、取り外しが容易な外部記憶媒体として、フロッピーディスク（ＦＤ）、ＣＤ、ＤＶＤ、ブルーレイ（登録商標）、ＵＳＢメモリ、コンパクトフラッシュ（登録商標）等の利用が例示される。
【００２６】
バス１１０は、ＣＰＵ１０１、メモリ１０８、不揮発性記憶媒体１０９、冗長化通信制御部１０２をそれぞれ接続する。バス１１０としては、ＰＣＩバス（Peripheral Components Interconnect bus）、ＩＳＡバス（Industrial Standard Architecture bus）、ＰＣＩ Ｅｘｐｒｅｓｓバス、システムバス、メモリバス等が例示される。
【００２７】
＜冗長化通信制御部の機能構成＞
次に、冗長化通信制御部の各機能部を説明する。
図３は、本発明の第１実施形態を適用した冗長化通信制御部１０２の機能構成の一例を示す図である。
図３において、バス接続部１３０は、制御用計算機１２０（図２）のハードウェア構成においてバス１１０（図２）と接続する。バス接続部１３０は、バス１１０（図２）の通信仕様に応じてＣＰＵ１０１（図２）やメモリ１０８（図２）と通信する。また、冗長化通信制御部１０２（図３）内においては動作管理部１３８や冗長経路切替部１３１と接続し、冗長経路切替部１３１と通信パケットを送受信し、動作管理部１３８とは冗長化通信制御部１０２の制御情報、状態情報を通信する。
【００２８】
冗長経路切替部１３１は、パケットの通信経路を切り替えることのできる機能部であり、通信パケットの通信経路としてパケット生成部１３９、パケットフィルタ部１４０、通信部１３５ａ、１３５ｂと接続している。また、冗長経路切替部１３１の経路を切り替え、状態情報を取得するため、動作管理部１３８と接続している。
冗長経路切替部１３１内部の通信経路の接続について、図４、図５を参照して先に説明する。図３の他の回路は、冗長経路切替部１３１内部について記した後に、説明する。
【００２９】
冗長経路切替部１３１内部の通信経路の接続を図４、図５に示す。
図４は、冗長経路切替部１３１内部の通信経路の第１の接続形態を示す図である。
図５は、冗長経路切替部１３１内部の通信経路の第２の接続形態を示す図である。
冗長経路切替部１３１は、動作管理部１３８からの指令によって、図４、図５に示す通信経路の接続形態をとる。なお、受信ポートのＲＸ１８４と送信ポートのＴＸ１８５の組み合わせが主ポートであり、受信ポートのＲＸ１８２と送信ポートのＴＸ１８３の組み合わせが冗長ポートである。
【００３０】
図４、図５において、Ｒｘ１８０は、パケットフィルタ部１４０（図３）、Ｔｘ１８１はパケット生成部１３９（図３）と接続している。
ＣＰＵ１０１上で動作するアプリケーションから送信されるパケットデータはＴｘ１８１を介して、冗長経路切替部１３１に送信される。一方、ネットワークから冗長経路切替部１３１が受信したパケットデータはＲｘ１８０を介して、ＣＰＵ１０１上で動作するアプリケーションやメモリ１０８に転送される。
Ｒｘ１８４は、通信部１３５aの受信部１３７aと、Ｔｘ１８５は、通信部１３５aの送信部１３６aと接続している。Ｒｘ１８２は、通信部１３５ｂの受信部１３７ｂと、Ｔｘ１８３は、通信部１３５ｂの送信部１３６ｂと接続している。
【００３１】
再び、図３の構成について説明する。
通信経路状態判定部１３２は、通信経路異常判定部１３３と通信経路正常判定部１３４とを備えて構成され、後記するパケットフィルタ部１４０から受信する内容を元に通信経路の状態を判定する。
それによって、制御用ネットワーク１２２が途中で切断されている等の異常や、正常に通信しているか等を判定し、その判定結果を動作管理部１３８に通知する。また、通信経路の状態を判定するために、受信部１３７ａ、１３７ｂからの受信経路と接続し、通信パケットを監視する。
通信経路異常判定部１３３は、制御用ネットワーク１２２が途中で切断されているなどの異常の発生を判定する。
通信経路正常判定部１３４は、制御用ネットワーク１２２が正常に通信しているかを判定する。
【００３２】
通信部１３５（１３５ａ、１３５ｂ）は、制御用ネットワーク１２２に接続し、制御用ネットワーク１２２の通信プロトコルにしたがって通信をするための機能部である。
前記した図２の構成では、ＰＨＹ１０３が冗長化通信制御部１０２外にあるため、通信部１３５はＭＡＣ層の処理部に該当する。ただし、冗長化通信制御部１０２をＭＡＣ層、ＰＨＹ層を含めたＥｔｈｅｒｎｅｔ通信デバイスと接続する場合はＭＡＣ層との接続インターフェース部となり、また、ＰＨＹ機能まで含めて冗長化通信制御部１０２に包含してもよい。
【００３３】
図３において、通信部１３５ａ（第一の通信部）は、送信部１３６ａと受信部１３７ａとを備えている。また、通信部１３５ａは、パケット生成部１３９から伝送されたパケットを送信する通信ポートであり、図４、図５のＴｘ１８５、Ｒｘ１８４と接続している。
【００３４】
通信部１３５ｂ（第二の通信部）は、送信部１３６ｂと受信部１３７ｂとを備えている。また、通信部１３５ｂは、リングネットワークを構成する終端のＥｔｈｅｒＣＡＴスレーブからのパケットを受信して、折り返す通信ポートである。
【００３５】
説明の便宜上、通信部１３５ａと通信部１３５ｂとを区別しているが、２つのＰＨＹ１０３のどちらから優先的にパケットを送信するかにおいて制約はない。以降では、パケットを最初に送信する通信部１３５ａを主ポートとし、冗長用の通信部１３５ｂを冗長ポートとして説明する。
【００３６】
送信部１３６（１３６ａ、１３６ｂ）は、通信部１３５（１３５ａ、１３５ｂ）における送信機能部であり、制御用計算機１２０から制御用ネットワーク１２２に対してパケットを送信する。
受信部１３７（１３７ａ、１３７ｂ）は、通信部１３５（１３５ａ、１３５ｂ）における受信機能部であり、制御用ネットワーク１２２（図２）から送信されたパケットを受信する。
【００３７】
図３において、動作管理部１３８は、冗長化通信制御部１０２の動作の制御や、状態をバス１１０（図２）に提示し、冗長経路切替部１３１の機能を制御するための機能部である。具体例として、機能レジスタが挙げられる。
ＣＰＵ１０１（図２）上で動作するプログラムは、バス１１０を介して動作管理部１３８の機能レジスタにアクセスすることにより、冗長化通信制御部１０２の動作の制御、状態の取得を実行する。
動作管理部１３８で設定可能な項目として、２つの通信ポートのどちらからパケットを送信するか、システムの想定するスレーブ数、通信経路の状態判定基準、冗長経路切替部１３１の経路切替等が挙げられる。また、取得可能な情報として、ネットワークに接続しているスレーブ数、異常の有無が発生していると考えられる通信経路の場所に関する情報等が考えられる。
【００３８】
パケット生成部１３９は、通信経路状態判定部１３２の要求に応じて、バス接続部１３０から送信されるパケット内容の変更や、新規パケットの送信をする。
通信経路状態判定部１３２からは、通信経路の状態を判定するためにこれらの要求がなされる。ただし、特にパケットを修正、追加しない場合は、バス接続部１３０から受信したデータをそのまま送信する。なお、バス接続部１３０から直接パケットを１３１へ送信する場合は、バス接続部１３０とパケット生成部１３９の送信データ信号のどちらかを選択的に冗長経路切替部１３１へ送信する構成としてもよい。
【００３９】
パケットフィルタ部１４０は、予め指定された条件に一致するＥｔｈｅｒＣＡＴテレグラム１７５（図１２等参照）を通信経路状態判定部１３２へ通知する。
【００４０】
通信遅延記憶部１４１は、通信遅延に異常が発生して、変更された通信経路にかかわる情報を記憶する。それは、通信遅延そのものであってもよいし、変更後の通信遅延を算出可能な値であってもよい。また、変更前の正常時の通信遅延を記憶していてもよい。
【００４１】
計時部１４２は、所定の事象の発生時を計時する機能部である。実装として、タイマと、少なくとも所定事象を受けた時点のタイマ値の記憶手段から構成される。
【００４２】
＜制御対象のハードウェア構成＞
次に、図６を参照して、制御対象１２１（図１）のハードウェア構成（通信ハードウェア１５０、図６）について説明する。
本発明の第１実施形態の特徴である通信経路の時刻同期の確保においては、制御対象１２１の動作が関係する。ＩＥＣ６１１５８、ＩＥＣ６１７８４パート２のＣｏｍｍｕｎｉｃａｔｉｏｎ Ｐｒｏｆｉｌｅ Ｆａｍｉｌｙ １２で定義されるＥｔｈｅｒＣＡＴ仕様に準拠した制御対象１２１を例に説明する。ただし、本発明の効果はＥｔｈｅｒＣＡＴ仕様に限定されない。
【００４３】
図６は、制御対象１２１におけるハードウェア構成（通信ハードウェア１５０）を示す図である。
図６において、通信ハードウェア１５０は、ＣＰＵ１０１と不揮発性記憶媒体１０９とスレーブＩＣ１５１と２つの送受信機ＩＣであるＰＨＹ１０３を備えて構成されている。
ＣＰＵ１０１は、バス１６３を介してスレーブＩＣ１５１を制御する。
スレーブＩＣ１５１は、主ポートと冗長ポートの役目をする２つのＰＨＹ１０３によって通信を行う。また、スレーブＩＣ１５１は、通信に必要な情報の記憶と参照において不揮発性記憶媒体１０９を用いる。
【００４４】
通信ハードウェア１５０は、制御対象１２１における通信機能を実現する。実際の構成では、ＣＰＵ１０１に周辺デバイスが接続し、センサやアクチュエータを制御するが、本実施形態の効果に関しての説明であるため、図６には図示していない。
スレーブＩＣ１５１は、ＩＥＣ６１１５８、ＩＥＣ６１７８４パート２のＣｏｍｍｕｎｉｃａｔｉｏｎ Ｐｒｏｆｉｌｅ Ｆａｍｉｌｙ １２で定義されるＥｔｈｅｒＣＡＴ仕様に準拠したスレーブ専用のＩＣである。
【００４５】
＜スレーブＩＣの構成＞
次に、スレーブＩＣ１５１の構成について説明する。スレーブＩＣ１５１は、ＥｔｈｅｒＣＡＴ Ｐｒｏｃｅｓｓｏｒ Ｕｎｉｔ１６０（図７参照）を備えており、ＥｔｈｅｒＣＡＴ仕様に準拠して、通信処理を実行するＩＣである。
ＥＰＵ（EtherCAT Processor Unit）１６０は、所定の事象に関連して、計時する機能を有する。具体的には、所定のアドレスにアクセスするコマンドを受信した場合に、各通信ポートで受信した時刻を計時し、レジスタとして公開する（図８参照）。なお、図８と時刻の計時の詳細については、後記する。
制御用計算機１２０（図１）は、該レジスタにアクセスして、これらの時刻を取得可能である。
【００４６】
《スレーブＩＣのハードウェア構成》
図７は、スレーブＩＣ１５１のハードウェア構成を示す図である。
図７において、通信ポート（０〜３）と自動転送部１６１とループバック機能部１６２との組み合わせによる通信ポート機能構成部が４組ある。
また、ＥＰＵ１６０が、通信ポート０に係るループバック機能部１６２と、通信ポート１に係るループバック機能部１６２との間に、接続されている。
また、バス１６３が、ＥＰＵ１６０からスレーブＩＣ１５１の外部と接続されている。バス１６３の詳細は後記する。
自動転送部１６１は、受信したパケットを隣接する通信ポートへ、転送する機能部である。転送方向は、スレーブＩＣ１５１内で一定になっており、通信ポート０、３、１、２、０の順である。
【００４７】
《スレーブＩＣの機能》
ループバック機能部１６２は、ＥＰＵ１６０からの設定とループバック機能部１６２が接続する通信経路の接続状態によって、通信ポートへ通信パケットを送信するか、あるいは隣接するループバック機能部１６２へ通信パケットを転送する機能部である。
ループバック機能部１６２は、制御用計算機１２０から送信される通信内容にしたがって、ＥＰＵ１６０によって設定される。
【００４８】
その設定内容の例として、常に通信ポートへ通信パケットを送信するＯｐｅｎモードがある。
また、常に隣接するループバック機能部１６２へ通信パケットを転送するＣｌｏｓｅモードがある。
また、接続している通信ポートの設定状態によって通信パケットの送信経路を切り替えるＡｕｔｏモードがある。
また、接続している通信ポートの設定状態によって通信パケットの送信経路を切り替えるが、隣接する制御対象１２１、あるいは制御用計算機１２０と通信経路を再度確立する場合は明示的にＥｔｈｅｒＣＡＴマスタから指定する必要のあるＡｕｔｏ Ｃｌｏｓｅモードがある。
【００４９】
Ａｕｔｏモードでは、通信ポートを介して隣接する制御用計算機１２０へパケットを送信する。あるいは制御対象１２１と通信が確立している場合は、ループバック機能部１６２は、通信ポートへパケットを送信する。
あるいは、通信経路が接続していないか、通信経路中に異常、故障があり、隣接する制御用計算機１２０、あるいは制御対象１２１と通信経路が確立していない場合は、ループバック機能部１６２は、隣接するループバック機能部１６２へ通信パケットを転送する。
なお、ＥｔｈｅｒＣＡＴ仕様に限定せずに、制御対象１２１は通信経路の異常に対して、パケットを制御用計算機１２０へ折り返す機能を有していれば、本発明の効果は失われない。すなわち、ＣＰＵ１０１が通信経路の異常を検知して、パケットを折り返す方法や、マスタが制御対象１２１に対して、パケットを折り返すように設定してもよい。
【００５０】
バス１６３は、ＥＰＵ１６０とＣＰＵ１０１、あるいはＥＰＵ１６０と周辺デバイスを接続する。そして、ＣＰＵ１０１、あるいは周辺デバイスへのＥｔｈｅｒＣＡＴに関する情報の通知、あるいはＣＰＵ１０１からＥＰＵ１６０を設定するため、あるいは周辺デバイスの情報をＥＰＵ１６０に通知するために用いられる。
また、バス１６３上に割込み信号をもうけてもよい。割込みを通知する方向は、ＥＰＵ１６０から対向装置でも構わないし、対向装置からＥＰＵ１６０でもよい。
各通信ポートは、隣接するスレーブとＥｔｈｅｒＣＡＴで定義される物理仕様（Ｅｔｈｅｒｎｅｔ、あるいはＥＢＵＳ等）で接続する。
【００５１】
また、制御対象１２１における通信経路の異常の判定方法は、ＩＥＥＥ８０２．３で規定されるＭＤＩ（Management Data Interface）におけるＰＨＹ ＩＣの状態レジスタのリンクステータスを用いる方法や、ＰＨＹ ＩＣで一般的に用いられるＬＥＤ点灯用の出力信号を、ＣＰＵ１０１や、別途もうけるＦＰＧＡ、ＣＰＬＤ等（図示なし）で用いる方法が例示される。
【００５２】
また、制御用計算機１２０における通信経路の異常の判定方法は、パケットを送信してから、受信する前に所定期間が経過したかどうかや、応答パケットがないこと、あるいは各制御対象１２１が所定規則にしたがって操作（加減乗除など）するパラメータをパケット上に設け、応答パケットの該値を評価する方法（後述するワーキングカウンタを用いる方法等）が例示される。
なお、通信経路の異常の判定方法の詳細については、後記する。
【００５３】
［スレーブの時刻同期機能について］
図７に示したスレーブＩＣ１５１の時刻同期機能について説明するに先立って、まず、ＥｔｈｅｒＣＡＴの時刻同期機能の概略について説明する。そして、その後に、スレーブＩＣ１５１の時刻同期機能について説明する。
【００５４】
＜ＥｔｈｅｒＣＡＴの時刻同期機能の概略＞
図１に示したマスタの有する２つのポートを利用した冗長化構成におけるＥｔｈｅｒＣＡＴの時刻同期機能の概略について説明する。
ＥｔｈｅｒＣＡＴの時刻同期機能は、スレーブ間の通信遅延計測、各スレーブの時計のオフセット補償、各スレーブが有する時計の進み具合のドリフト補償という３段階で構成されている。
このうち、各スレーブ間の通信遅延計測は、図８に示すアルゴリズムを基本としている。
【００５５】
図８は、ＥｔｈｅｒＣＡＴスレーブＡ、Ｂ、Ｃの各スレーブＩＣ１５１（１５１ａ〜１５１ｃ）において、パケットの通信経路と各スレーブの各ポートでの受信時刻を示す図である。
図８において、ＥＰＵ（EtherCAT Processor Unit）１６０は、ＥｔｈｅｒＣＡＴ仕様に準拠して、通信処理を実行するＩＣである。なお、ＥＰＵ１６０は、スレーブＩＣ１５１の中に備えられている。
また、Ｔａ、Ｔｂ、Ｔｃ、Ｔｄ、Ｔｅは、時刻同期用の所定のパケット（時刻同期用パケットとする）の各ポートにおける受信時刻である。
また、ＴＡＰ、ＴＢＰ、ＴＣＰは、各スレーブＡ、Ｂ、ＣのＥＰＵ１６０における受信時刻である。
【００５６】
また、ｔｄｉｆｆはスレーブ間の通信遅延である。
なお、図８においては、ｔｄｉｆｆＡＢ、ｔｄｉｆｆＢＣ、ｔｄｉｆｆＣＢ、ｔｄｉｆｆＢＡなどと表記し、後記する数式の式１〜式４、式６、式８〜式１４においては、ｔｄｉｆｆＡＢ、ｔｄｉｆｆＢＣ、ｔｄｉｆｆＣＢ、ｔｄｉｆｆＢＡなどと表記する。
また、ｔｐは、ＥＰＵ１６０の処理時間である。
【００５７】
＜通信遅延について＞
図８で、スレーブＡに着目すれば、Ｔａ、Ｔｅは同じスレーブＩＣ１５１ａ上のクロックで計測しているが、スレーブＩＣ１５１ｂとは、クロックのオフセットやドリフトが異なるため、Ｔｂ、Ｔｄとそのまま比較することはできない。
ここで、図８のＴａ〜Ｔｅが計測可能で、ｔｐが既知であるとする。スレーブＣとスレーブＢ間の通信遅延ｔｄｉｆｆＢＣは、次式で算出できる。
ｔｄｉｆｆＢＣ＝（Ｔｄ−Ｔｂ）÷２    ・・・（式１）
ただし、ｔｄｉｆｆＢＣとｔｄｉｆｆＣＢは等しいとする。なお、ＥｔｈｅｒＣＡＴスレーブのプロセッサユニットは、同種のものを利用していると仮定している。もし、プロセッサユニットが異なる場合は、ｔｐの違いを考慮する必要がある。
また、スレーブＢとスレーブＡ間の通信遅延ｔｄｉｆｆＡＢは、次式で求められる。
ｔｄｉｆｆＡＢ＝{（Ｔｅ−Ｔａ）−（Ｔｄ−Ｔｂ）−ｔｐ} ÷ ２＋ｔｐ  ・・・(式２)
ｔｄｉｆｆＢＡ＝ｔｄｉｆｆＡＢ−ｔｐ    ・・・（式３）
【００５８】
なお、時刻同期機能に対応していないＥｔｈｅｒＣＡＴスレーブは、単なる通信経路と見なされる。言い換えれば、固定の通信遅延でパケットを転送する必要がある。
このように時刻同期機能を実現する場合には、時刻同期用のパケットをリングネットワークで周回させる必要がある。言い換えると、あるスレーブにおいて往路と復路におけるパケットの受信時刻をもとに通信遅延を計算する。
【００５９】
式１〜式３に示すように、スレーブ間の通信遅延を求めた後、これらの通信遅延を積算して、各スレーブと基準時刻を有するスレーブ間の通信遅延を求めることができる。
例えば、図８でスレーブＡを基準とする場合、スレーブＡとスレーブＢ間の通信遅延は、ｔｄｉｆｆＡＢとなり、スレーブＡとスレーブＣ間の通信遅延ｔｄｉｆｆＡＣは、次式となる。
ｔｄｉｆｆＡＣ＝ ｔｄｉｆｆＡＢ +ｔｄｉｆｆＢＣ    ・・・(式４)
【００６０】
これらの通信遅延を用いて、マスタは基準時刻となるスレーブＡのＴＡＰを、その他のスレーブに通知する。各スレーブは、各スレーブ自身のＥＰＵ１６０の受信時刻を用いて、基準時刻となるスレーブＡとの時刻のオフセットを計算することができる。
例えば、スレーブＢにおけるスレーブＡとの時刻のオフセットＯｆｆｓｅｔＢ(数式ではＯffsetＢと表記)は、次式で求められる。
ＯffsetＢ ＝ ＴＡＰ − ＴＢＰ    ・・・（式５）
各スレーブは、スレーブＡとの通信遅延と、時刻のオフセットを用いて、基準時刻と同期することができる。
ＥｔｈｅｒＣＡＴにおいては、時刻同期に対応したスレーブの中で、マスタに最も近い（ホップ数の小さい）スレーブの時刻を基準時刻とする。
【００６１】
＜スレーブの時刻同期機能＞
次に、図１における制御対象１２１（スレーブ）における時刻同期機能について説明する。
制御対象１２１は、基準時刻に同期するための機能を備える。例えば、制御対象１２１自身の管理する時刻（以下、ローカルクロックとする）と、基準時刻の差（以下、時刻オフセットとする）を保持し、ローカルクロックを基準時刻に同期する。
あるいは、基準時刻を有する制御対象１２１（制御用計算機１２０でもよい）と制御対象１２１間の通信遅延を、時刻オフセットと別に管理し、時刻オフセットとあわせて、ローカルクロックを基準時刻に同期してもよい。
【００６２】
図８を例に、これら時刻同期機能の動作を説明する。スレーブＡのローカルクロックを基準時刻とし、スレーブＢが同期する場合を説明する。スレーブＢにおける時刻オフセットＯffsetＢは前記した式５によって求める。
スレーブＢとスレーブＡ間の通信遅延ｔｄｉｆｆＡＢと、時刻オフセットＯffsetＢを用いて、スレーブＢのローカルクロックＣＢは次式のように基準時刻ＣＡに同期させる。
ＣＡ ＝ ＣＢ ＋ ＯffsetＢ − ｔｄｉｆｆＡＢ    ・・・（式６）
なお、時刻オフセットや、通信遅延は複数回求めて最小値あるいは最大値を用いてもよいし、平均値や統計処理を施した数値を用いてもよい。
また、基準時刻の計算においても式６による推定だけでなく、定期的に基準時刻を取得し、基準時刻を所定の数学モデルで近似する方法が例示される。
【００６３】
＜ＥｔｈｅｒＣＡＴスレーブのタイムスタンプ＞
ＥｔｈｅｒＣＡＴにおいては、スレーブ間の通信遅延を計算するために図８で説明した機能を有している。
すなわち、所定の通信パケットの受信にともなって、各通信ポートでの受信時刻（Ｔａ、Ｔｂ、Ｔｃ、Ｔｄ、Ｔｅ）やＥＰＵ１６０での受信時刻（ＴＡＰ、ＴＢＰ、ＴＣＰ）を計時（タイムスタンプ）する機能を備える。
なお、スレーブ間の通信遅延を求めることができれば、制御対象１２１が備えなければならない機能は、上記の計時機能に限定されない。例えば、ＮＴＰ（Network Time Protocol）やＩＥＥＥ１５８８のバウンダリクロック機能や、ｅｎｄ-ｔｏ-ｅｎｄ ＴＣ（Transparent Clock）、ｐｅｅｒ-ｔｏ-ｐｅｅｒ ＴＣ（Transparent Clock）、あるいはそれらに類する機能を用いることが例示される。
【００６４】
＜冗長化通信制御部による動作手順・動的シーケンス＞
次に、冗長化通信制御部１０２（図３）による動作手順を示す。
図９は、本発明の第１実施形態を適用した冗長化通信制御部１０２による動作手順の例（第１例）を示すフローチャートである。
【００６５】
《Ｓ００１》
はじめに、冗長経路切替部１３１の内部状態を図４に示す正常モードに設定する(ステップＳ００１)。そして、ステップＳ００２に進む。
【００６６】
《Ｓ００２》
次に、ＥｔｈｅｒＣＡＴの正規の手順にしたがい、アプリケーションに応じたリアルタイム通信を実行する(ステップＳ００２)。そして、ステップＳ００３に進む。
【００６７】
《Ｓ００３》
ステップＳ００３において、冗長化通信制御部１０２は、パケットを受信するまで待機する。パケットを受信しなければ（Ｎ：Ｓ００３）、ステップＳ００３の先頭に戻り、引き続きパケットを受信するまで待機する。
また、パケットを受信すれば（Ｙ：Ｓ００３）、ステップＳ００４に進む。
【００６８】
《Ｓ００４》
ステップＳ００４において、パケットの受信が、主ポートによる受信か否かを判定する。主ポートの受信であれば（Ｙ：Ｓ００４）、ステップＳ００５に進む。
また、主ポートの受信でなければ（Ｎ：Ｓ００４）、ステップＳ０１０に進む。
【００６９】
《Ｓ００５》
ステップＳ００５において、通信経路に異常が発生しているかを判定する。異常が発生していれば（Ｙ：Ｓ００５）、ステップＳ００６に進む。
また、異常が発生していなければ（Ｎ：Ｓ００５）、ステップＳ００８に進む。
【００７０】
《Ｓ００６》
異常が発生しているので、冗長ポートへパケットを転送し、冗長ポートから送信する。
そして、ステップＳ００７に進む。
【００７１】
《Ｓ００７》
次に、ステップＳ００７において、後述する時刻同期補正処理（時刻補正処理）を実行する。そして、終了する。
【００７２】
《Ｓ００８》
ステップＳ００８では、ステップＳ００５において、異常が発生していないとの判定を受けて、主ポートでのパケット受信時刻ｔｂを計時し、通信遅延記憶部１４１に記録する。そして、ステップＳ００９に進む。
【００７３】
《Ｓ００９》
ステップＳ００９では、パケットを制御用計算機１２０内部に取り込む。そして、終了する。
【００７４】
《Ｓ０１０》
ステップＳ０１０では、ステップＳ００４において、主ポートでのパケットの受信でなかったのを受けて、異常が発生しているかを判定する。
異常が発生していれば（Ｙ：Ｓ０１０）、ステップＳ００９に進む。また、異常が発生していなければ（Ｎ：Ｓ００５）、ステップＳ０１１に進む。
【００７５】
《Ｓ０１１》
ステップＳ０１１では、冗長ポートでのパケット受信時刻ｔａを計時し、通信遅延記憶部１４１に記録する。そして、ステップＳ０１２に進む。
【００７６】
《Ｓ０１２》
ステップＳ０１２では、冗長ポートからパケットを送信する。そして、終了する。
【００７７】
以上が、冗長化通信制御部１０２による動作手順のフローチャートである。
【００７８】
＜冗長化通信制御部１０２による動作手順の第２例＞
次に、冗長化通信制御部１０２の動作手順の別の例（第２例）を示す。
図１０は、冗長化通信制御部１０２の動作手順の第２例を示すフローチャートである。
前記した図９との違いを図１０の点線部に示す。異なる箇所はステップのＳ０２０〜Ｓ０２４である。
図１０と図９との違いであるステップのＳ０２０〜Ｓ０２４は、図１０において、冗長ポートへ転送したパケットを識別可能とし、パケットがネットワーク中にある状態での通信経路の変化に対応可能としていることに関連している。
【００７９】
次に、前記の図１０と図９との違いであるステップのＳ０２０〜Ｓ０２４について順に説明する。
【００８０】
《Ｓ０２０》
図９、図１０におけるステップＳ００４において、パケットを主ポートで受信した場合（Ｙ：Ｓ００４）であって、ステップＳ０２０で、冗長ポートへ転送したパケットか否かを判定する。
冗長ポートへ転送したパケットである場合（Ｙ：Ｓ０２０）、ステップＳ０２１に進む。また、冗長ポートへ転送したパケットでない場合（Ｎ：Ｓ０２０）、ステップＳ００５に進む。
【００８１】
《Ｓ０２１》
ステップＳ０２１において、冗長ポートへ転送したパケットについて、対応処理を実行する（Ｓ０２１）。
なお、この冗長ポートへ転送したパケットが発生する状態については、後記する。
【００８２】
《Ｓ０２２》
ステップＳ０２２において、冗長ポートへ転送したパケットを識別可能な状態とする。
これは、図９、図１０のステップＳ００５において、冗長ポートへの転送ではない、転送パケットの場合であるので、異常は発生している。したがって、パケットの識別が必要となる。
パケットを識別する方法としては、パケットへ所定の処理を加えることや、冗長化通信制御部１０２でパケットを識別するための情報を記憶する方法が例示される。
パケットへ加える処理としては、所定の位置を所定値にすることや、シーケンス番号を設定する方法、特定のパラメータを設定する方法が例示される。
なお、ＥｔｈｅｒＣＡＴで例示するため、ＥｔｈｅｒＣＡＴのパケット構成の詳細については、後記する。
また、冗長化通信制御部１０２でパケットを識別するためにパケットへ加える処理の詳細については後記する。
【００８３】
《Ｓ０２３》
ステップＳ０２３で、冗長ポートへの転送パケットか否かを判定する。
冗長ポートへ転送したパケットである場合（Ｙ：Ｓ０２３）、ステップＳ００９に進む。また、冗長ポートへ転送したパケットでない場合（Ｎ：Ｓ０２３）、ステップＳ０１０に進む。
【００８４】
《Ｓ０２４》
ステップＳ０２４では、図１０のステップＳ０１０において、異常が発生しているとの判定を受けて、その対応処理を実行する。そして、終了する。
なお、冗長ポートへ転送したパケットが発生する状態についての詳細については、後記する。
【００８５】
＜フローチャートおいて省略した項目の詳細な説明＞
以上のフローチャートで詳細な説明を省略したステップのＳ０２１、Ｓ０２２、Ｓ０２３において省略した項目について順に詳しく説明する。
【００８６】
《冗長ポートへ転送したパケットが発生する状態・Ｓ０２１》
ステップＳ０２１における冗長ポートへ転送したパケットが発生する状態について、説明する。
冗長ポートへ転送したパケットの処理方法について述べる前に、このパケットが発生する状態について図１１Ａ、図１１Ｂを用いて説明する。
図１１Ａは、冗長経路切替部１３１を介して主ポートと冗長ポートの通信部によって、４つの制御対象１２１であるスレーブＡ〜スレーブＤに通信パケットを送っているが、通信経路異常１２２Ｘが発生した状態を示す図である。
また、図１１Ｂは、冗長経路切替部１３１を介して主ポートと冗長ポートの通信部によって、４つの制御対象１２１であるスレーブＡ〜スレーブＤに通信パケットを送っていて、通信経路が正常な状態を示す図である。
【００８７】
図１１Ｂに示すように、通信経路が正常な状態では、マスタの主ポートからスレーブＡ、スレーブＢ、スレーブＣ、スレーブＤの順に通信パケットが伝送される。この伝送にはＬＡＮ（Local Area Network）ケーブルが用いられている。１本のＬＡＮケーブルの中には送信方向と受信方向の２本の通信線がある。したがって、主ポート１３５ａの送信部１３６ａから送信方向の通信線を辿って、スレーブＡ、スレーブＢ、スレーブＣ、スレーブＤの順に通信パケットが伝達され、マスタの冗長ポート１３５ｂの受信部１３７ｂに入力する。そして、冗長ポート１３５ｂで折り返して、送信部１３６ｂから再び通信パケットがスレーブＤ、スレーブＣ、スレーブＢ、スレーブＡの順に伝送され主ポート１３５ａの受信部１３７ａに到達して冗長経路切替部１３１に送られている。
【００８８】
次に、図１１Ａに示すように、通信経路異常１２２Ｘが発生したときの状態について説明する。この通信経路異常１２２Ｘが発生すると、スレーブＢとスレーブＣの間は伝送できなくなる。なお、この間はＬＡＮケーブルが１本なので、図１１Ａにおいて、スレーブＢとスレーブＣ間の伝送線を１本の線で表記している。
スレーブＢに備えられたＥＰＵ（EtherCAT Processor Unit）１６０は、通信経路異常１２２Ｘを検知して、スレーブＢで通信パケットを折り返し、再びスレーブＡへ転送し、マスタの主ポート１３５ａの受信部１３７ａに入力する。
マスタはスレーブのＥＰＵ１６０の情報から通信経路異常１２２Ｘの発生を検知して、冗長経路切替部１３１の接続経路を図１１Ａに示すように切替える。
【００８９】
この切替えにより、冗長ポートの送信部１３６ｂからスレーブＤへ通信パケットが伝送され、さらにスレーブＣに伝送される。スレーブＣのＥＰＵ１６０は、通信経路異常１２２Ｘを検知して、スレーブＣで通信パケットを折り返し、再びスレーブＤへ転送する。さらにスレーブＤは、マスタの冗長ポート１３５ｂの受信部１３７ｂに通信パケットを伝送する。
以上の経路を辿ることにより、冗長ポートへ転送したパケットが発生する。
なお、図１１Ａと図１１Ｂの冗長経路切替部１３１の切替え状態は、それぞれ図５、図４に対応している。
【００９０】
また、この冗長ポートへ転送したパケットの受信に対する処理方法としてはパケットを破棄してもよいし、未アクセスのスレーブ（例えば図１１Ａ、図１１ＢのスレーブＣ、Ｄ）に再度パケットを送信してもよい。あるいは、通信経路が正常になったと判断し、冗長経路切替部１３１を図４に示す正常モードとしてもよい。
【００９１】
《ＥｔｈｅｒＣＡＴのパケット構成・Ｓ０２２》
ステップＳ０２２において、詳細な説明を省略したが、次にパケットの構成について、説明する。また、ワーキングカウンタであるＷＫＣ１７８についても説明する。
ＥｔｈｅｒＣＡＴで例示するため、ＥｔｈｅｒＣＡＴのパケット構成の例を次に示す。
図１２は、ＥｔｈｅｒＣＡＴのパケット構成の例を示す図である。
図１２に示すように、ＥｔｈｅｒＣＡＴの通信内容は、Ｅｔｈｅｒｎｅｔフレーム(１７０)のデータ領域(１７２)に格納される。
ＥｔｈｅｒＣＡＴにおける、Ｅｔｈｅｒｎｅｔヘッダ１７１のＴｙｐｅフィールドは０ｘ８８Ａ４である。データが正しいかどうかをＦＣＳ(Frame Check Sequence)１７３を用いて検査する。
【００９２】
ＥｔｈｅｒＣＡＴのデータ構造は、ＥｔｈｅｒＣＡＴヘッダ１７４と、ひとつ、または複数のＥｔｈｅｒＣＡＴテレグラム１７５で構成され、ＥｔｈｅｒＣＡＴテレグラム１７５は、テレグラムヘッダ１７６、データ１７７、ワーキングカウンタ１７８（ＷＫＣ）から構成される。
ワーキングカウンタ１７８は、そのテレグラムを処理すべきスレーブで正しく処理されるたびに、スレーブによって所定の数だけカウントアップされるフィールドである。
コマンド２２０は、ＥｔｈｅｒＣＡＴ仕様におけるコマンドを示す。識別子２２１は、データグラムの識別子である。アドレス２２２は、ＥｔｈｅｒＣＡＴ仕様におけるアドレスである。データサイズ２２３は、データ１７７のサイズである。予約２２４は、所定動作の予約である。Ｃ２２５は、フレームが巡回していることを示す。Ｍ２２６は、後続のテレグラムが存在することを示す。ＩＲＱ２２７は、スレーブからの所定事象の発生を制御用計算機１２０に通知するために用いられる。
【００９３】
《冗長ポートへ転送したパケットが発生する状態・Ｓ０２３》
ステップＳ０２３において、詳細な説明を省略したが、次にパケットが発生する状態につい、説明する。
Ｓ０２３の対応処理方法を述べるために、冗長ポートへ転送したパケットが発生する状態について図１３Ａ、図１３Ｂを用いて説明する。
図１３Ａは、冗長経路切替部１３１を介して主ポートと冗長ポートの通信部によって、４つの制御対象１２１であるスレーブＡ〜スレーブＤに通信パケットを送っていて、通信経路が正常な状態を示す図である。
また、図１３Ｂは、冗長経路切替部１３１を介して主ポートと冗長ポートの通信部によって、４つの制御対象１２１であるスレーブＡ〜スレーブＤに通信パケットを送っているが、通信経路異常１２２Ｘがある状態を示す図である。
【００９４】
なお、図１３Ａ、図１３Ｂは、それぞれ図１１Ｂ、図１１Ａに対応しているので、重複する説明は省略する。
したがって、冗長ポートへ転送したパケット受信に対する処理方法としては、パケットを破棄してもよいし、複数のパケットを受信したスレーブ（例えば、図１３Ａ、図１３ＢのＣ、Ｄ）に再アクセスし、異常がないかを確認してもよい。あるいは、通信経路が異常になったと判断し、冗長経路切替部１３１を図５に示す異常モードとしてもよい。
【００９５】
＜通信経路異常の発生箇所の特定方法＞
Ｓ０２１、Ｓ０２４で未アクセスのスレーブ、あるいは複数回パケットを受信したスレーブを特定するために、通信経路の異常の発生箇所を特定する必要がある。
通信経路の異常の発生箇所の特定方法を図１４、図１６に示す。
また、図１５は、第１実施形態を適用したシステムにおいて、通信経路に異常が発生している状態を示す図である。図１５を参照して、図１４のフローチャートを説明するので、先に図１５について説明する。
【００９６】
図１５において、制御用計算機（マスタ）１２０は、制御用ネットワーク１２２を介して５つの制御対象（スレーブ）１２１ａ〜１２１ｅと接続して制御をするが、通信経路異常１２２Ｘが発生している。なお、ｎは制御対象の個数（ｎ＝１〜５）を表し、アドレスは各制御対象１２１ａ〜１２１ｅを特定するために割り当てられた番地を表している。
通信経路が正常である場合には、各制御対象１２１ａ〜１２１ｅはすべての異なるアドレスが割り当てられており、通信パケットのアドレスのカウンタが０のときにスレーブは自分宛であると認識する。そして隣のスレーブに渡すときは、＋１を足す。この仕組みによって、異なるアドレスが割り当てられた各スレーブは、自分宛の通信パケットを認識する。
【００９７】
ただし、図１５においては、通信経路異常１２２Ｘが発生しているので、制御対象１２１ａ〜１２１ｃのアドレスは、それぞれ０、−１、−２が割り当てられ、また、制御対象１２１ｄ〜１２１ｅのアドレスは、それぞれ０、−１が割り当てられている。なお、正常な場合に割り当てられる制御対象１２１ｄ〜１２１ｅのアドレスはそれぞれ−３、−４である。
ただし、図１４のフローチャートにおいては、ｎの値をアドレスと見立ててワーキングカウンタの値を参照する方式を説明する。
次に、図１５を参照して、図１４に示す通信経路異常の発生箇所の特定方法の第１例を説明する。
【００９８】
《通信経路異常の発生箇所の特定方法・第１例》
図１４に通信経路異常の発生箇所の特定方法の第１例を示す。
図１４は、全てのスレーブが処理すべきレジスタに対するＢＲＤ(Broadcast Read)コマンドのワーキングカウンタの値を利用する方法を示すフローチャートである。
【００９９】
《Ｓ０５０》
はじめに、ステップＳ０５０において、全スレーブが処理すべきレジスタ（例えば、ＴＹＰＥレジスタ）に対するＢＲＤコマンドを送信する。そして、ステップＳ０５１に進む。
【０１００】
《Ｓ０５１》
ステップＳ０５１において、このコマンドを含んだテレグラムを受信し、そのワーキングカウンタ（ＷＫＣを読む）の値をみる。
例えば、図１５の場合、制御対象１２１ａ〜１２１ｃのｎ＝１、２、３を経由したＥｔｈｅｒＣＡＴテレグラムのワーキングカウンタは３となり、スレーブ１２１ｃと１２１ｄ間の通信経路で異常（１２２Ｘ）が起きていると判定する。
【０１０１】
《通信経路異常の発生箇所の特定方法・第２例》
図１６に通信経路異常の発生箇所の特定方法の第２例を示す。
図１６は、非ゼロの値が取得された通信ポートが接続する通信経路が異常であると判定する方法を示すフローチャートである。
【０１０２】
《Ｓ０６０》
まず、ステップＳ０６０で、各スレーブの各通信ポートのロストリンクカウンタレジスタ（図示せず）を読む。そして、ステップＳ０６１に進む。
【０１０３】
《Ｓ０６１》
ステップＳ０６１で、非ゼロの値が取得された通信ポートが接続する通信経路が異常であると判定する。そして終了する。
なお、ロストリンクカウンタレジスタは、読み込みと同時に、書込みによってレジスタ値をクリアする必要がある。
以上の方法によって、通信経路の異常が起きたと判定した場所を動作管理部１３８へと通知し、ＣＰＵ１０１上で動作するプログラム等に提示可能とする。
【０１０４】
＜異常判定の方法＞
図９、図１０のＳ００５、Ｓ０１０における異常判定の方法について述べる。
【０１０５】
《異常判定方法の第１例・主ポートのパケット受信》
異常判定方法の第１例として、冗長ポートからパケットを受信する前に、主ポートからパケットを受信したかどうかをみる方法を示す。
図１７は、制御用計算機１２０における冗長経路切替部１３１を介して、主ポート１３５ａと冗長ポート１３５ｂから２つの制御対象１２１に通信パケットを送っているが、通信経路異常１２２Ｘが生じている状態を示す図である。
図１７において、主ポート１３５ａが、Ｔｘ１８１、Ｔｘ１８５、通信部１３５ａ、制御対象１２１、通信部１３５ａ、Ｒｘ１８４、Ｒｘ１８０の経路で通信のパケットが伝達されている。
しかし、冗長ポート１３５ｂがＴｘ１８３、Ｒｘ１８２を有する通信部１３５ｂ、そして制御対象１２１において、通信のパケットが伝達されていない。
このように、冗長ポートでパケットを受信せず、主ポートで受信した場合に、通信経路を異常と判定する。なお、図１７ではパケットの通信方向を示し、ＰＨＹ１０３は省略している。
【０１０６】
《異常判定方法の第２例・ワーキングカウンタを見る方法》
異常判定方法の第２例として、全てのスレーブが処理すべきレジスタに対するＢＲＤ（Broadcast Read）コマンドをＥｔｈｅｒＣＡＴフレームに付与し、そのワーキングカウンタを見る方法を示す。
図１４、図１５に示すように、全てのスレーブが処理すべきレジスタに対するＢＲＤコマンドをＥｔｈｅｒＣＡＴフレームに付与し、そのワーキングカウンタを見る方法である。
ＥｔｈｅｒＣＡＴフレームのワーキングカウンタの値が、事前に設定した所定数よりも小さければ通信経路を異常と判定する。例えば、ＴＹＰＥレジスタに対するＢＲＤコマンドに対して、各スレーブはワーキングカウンタ１７８（ＷＫＣ１７８、図１２）に１を足すため、受信したテレグラムのワーキングカウンタ１７８が全スレーブ数よりも小さければ異常が発生したと判定できる。
【０１０７】
これらの異常判定の方法は、組み合わせて用いてもよい。
また、いずれかの判定方法によって異常と判定した場合に異常と判定してもよいし（論理和）、両方の判定方法で異常と判定した場合に異常と判定してもよい（論理積）。
なお、冗長ポートに接続する通信経路に異常がある場合、主ポートから送信されたパケットは、冗長ポートで受信する前に主ポートで受信するが、ＢＲＤコマンドのワーキングカウンタ１７８の値は全スレーブ数と一致する。
この場合、主ポートで受信したパケットは冗長ポートへ転送してもよいし、通信経路の異常をユーザやオペレータに通知して、パケットを制御用計算機１２０内部に取り込んでもよい。
【０１０８】
《異常判定方法の第３例・ステートマシン制御》
次に、異常判定方法の第３例として、ステートマシンによる制御であって、パケットごとの判定ではない方法について説明する。
冗長経路切替部１３１の内部経路の切り替えは、図９、図１０に示すように受信したパケットごとに異常の有無を判定して、切り替えてもよいし、図１８に示す状態遷移で管理してもよい。
図１８は、本発明の第１実施形態を適用したシステムにおいて、通信経路の正常状態と異常状態とを示した状態遷移図である。
図１８において、Ｓ０３０は正常状態、Ｓ０３１が異常状態を示し、Ｓ０３２とＳ０３３はその遷移過程を示している。
【０１０９】
例えば、初期状態から、Ｓ０３０の正常状態に遷移し、受信したパケットを異常と判定した場合（Ｓ０３２）に、Ｓ０３１の異常状態に遷移する。
また、Ｓ０３１では、受信したパケットを正常と判定した場合（Ｓ０３３）にＳ０３０の正常状態に遷移する。
Ｓ０３０では、冗長経路切替部１３１の内部経路を図４に示す正常モードとし、Ｓ０３１では、図５に示す異常モードとする。
次に、Ｓ０３３における正常と判定する方法を説明する。
【０１１０】
＜受信したパケットを正常と判定する方法＞
次に、受信したパケットを正常と判定する方法について説明する。
【０１１１】
《正常判定方法・第１例》
受信したパケットを正常と判定する第１の正常判定方法について説明する。
図１９は、冗長経路切替部１３１を介して、主ポートの通信部１３５ａと冗長ポートの通信部１３５ｂとによって、２つの制御対象１２１に通信パケットを送っている状況を示す図である。
図１９において、通信が正常に行われているかを判定する正常判定の方法として、冗長ポートである通信部１３５ｂからパケットを受信した後に、主ポートである通信部１３５ａからパケットを受信したかどうかをみる方法が例示される。
冗長ポートである通信部１３５ｂで受信（１９０）した後に主ポートである通信部１３５ａで受信（１９１）すれば、通信経路を正常と判定する。
【０１１２】
《正常判定方法・第２例》
次に、受信したパケットを正常と判定する第２の正常判定方法について説明する。
第２の正常判定方法として、全てのスレーブが処理すべきレジスタに対するＢＲＤコマンドをＥｔｈｅｒＣＡＴフレームに付与し、そのワーキングカウンタを見る方法が例示される。ＥｔｈｅｒＣＡＴフレームのワーキングカウンタの値と、事前に設定した所定数と等しい場合に通信経路を正常と判定する。
例えば、図１５において、通信経路異常１２２Ｘがない場合には、図１２に示したワーキングカウンタのＷＫＣ１７８が制御対象１２１ａ〜１２１ｅを通過する毎に、カウントし、前記したように、事前に設定した所定数（図１５ではｎ＝５）と比較し、等しい場合に通信経路を正常と判定する。
【０１１３】
《正常判定方法・第３例》
また、受信したパケットを正常と判定する第３の正常判定方法について説明する。
図１８におけるＳ０３２、Ｓ０３３の事象発生時に、バス１１０（図２）の通信手段を用いて、ＣＰＵ１０１（図２）上で動作するプログラム等に、内部状態を切り替えたことを通知する。
バス１１０の通信手段には割込み通知等の手段がある。この通知を受けたプログラムでは、通信経路上に異常が生じていること、あるいは正常に復帰したことをユーザやオペレータに通知することで、ユーザやオペレータは異常を復旧させるために通信ケーブルの置換等の対策の実施や、その対策の完了を確認することができる。
【０１１４】
＜時刻補正処理＞
次に、図９、図１０のステップＳ００７における時刻補正処理について述べる。
図２０は、冗長経路切替部１３１を介して主ポートの通信部１３５ａと冗長ポートの通信部１３５ｂとによって、４つの制御対象（スレーブＡ〜スレーブＤ）に通信パケットを送っている通信経路１２２に通信経路異常１２２Ｘが発生した状況を示す図である。
前述したとおり、通信経路の異常発生後、通信経路の異常をはさむスレーブ間の通信遅延は算出が困難である。
また、図２０に示すように、異常の発生箇所によっても、計算する通信経路の数が変化する。
【０１１５】
しかしながら、通信経路の異常発生時の通信遅延が、制御用計算機１２０内部の遅延（図２０のｔ３）と、ＥＰＵ１６０を経由しないスレーブＩＣ１５１内部の経路の、全スレーブ分の和であることに着目すれば、図４に示す正常モードにおける冗長ポートの受信時刻と、主ポートの受信時刻の差にほぼ等しい。
なお、図２２は、冗長経路切替部１３１を介して主ポートと冗長ポートの通信部によって、４つの制御対象１２１であるスレーブＡ〜スレーブＤに通信パケットを送っている状況を示す図であり、前記した冗長ポートの受信時刻がｔａであり、主ポートの受信時刻がｔｂであることを示している。
厳密には、通信経路の異常の直前のスレーブ（図２０のスレーブＢ）において、スレーブ内のＥＰＵ１６０を通る経路と、ＥＰＵ１６０を通らない経路の通信遅延差ｄだけ異なる。
【０１１６】
しかしながら、遅延差ｄは、スレーブＩＣ１５１に固有の値であるため、ｔｂとｔａの差を求めることで、容易に通信経路の異常をはさむスレーブ間の通信遅延を算出することができる。
したがって、図９、図１０において、Ｓ００８で主ポートでのパケットの受信時刻ｔｂ（第二の時刻）を記録し、Ｓ０１１で冗長ポートでのパケットの受信時刻ｔａ（第一の時刻）を記録する。
そして、ｔａとｔｂの差分Ｄを次式で算出する。
Ｄ ＝ ｔｂ − ｔａ    ・・・（式７）
ｔｂとｔａは、同じパケットに対して計時する必要がある。したがって、図９、図１０のＳ００８、Ｓ０１２では、パケットが同じかどうかを特定する必要がある。
【０１１７】
＜パケットを特定する方法＞
パケットを特定する方法としては、パケットへ所定の処理を加えることや、冗長化通信制御部１０２でパケットを識別するための情報を記憶する方法が例示される。
【０１１８】
＜パケットへ加える処理＞
また、前記したパケットを特定するために、パケットへ加える処理としては、所定の位置を所定値にすること、シーケンス番号を設定する方法、特定のパラメータを設定する方法、スレーブの動作に影響を与えない情報領域をパケットへ付加する方法などが例示される。
具体的には、ＩＲＱ２２７（図１２）の所定ビットを１にすることや、識別子２２１（図１２）を所定値にすること、あるいは、制御対象１２１の動作に影響を与えない情報領域をパケットに付加し、その領域用に識別子を格納する方法が例示される。
そのような情報領域の付加方法としては、存在しないアドレスにアクセスするテレグラム１７５（図１２）や、コマンド２２０（図１２）をＮＯＰ（No Operation）とするテレグラム１７５（図１２）が例としてあげられる。
【０１１９】
＜情報を記憶する方法＞
冗長化通信制御部１０２で情報を記憶する方法としては、パケットのテレグラムヘッダ１７６のパラメータ（コマンド２２０、識別子２２１、アドレス２２２等）を記憶する方法や、データサイズ等のパケットにかかわる属性値を記憶する方法が例示される。
あるいは、パケットを識別する必要のないようにパケットを１つずつ通信処理するようにしてもよい。このようにすれば、あるパケットを送信してから、受信するパケットは、送信したパケットと同じであることを保証できる。
または、常時、パケットを１つずつ通信処理するのではなく、受信時刻ｔｂ、ｔａを計測するために、所定回数のみ、パケットを１つずつ通信処理してもよい。所定回数は１回でもよいし、複数回でもよい。
【０１２０】
＜差分Ｄについて＞
なお、式７における差分Ｄは、複数回求めて最小値あるいは最大値を用いてもよいし、平均値や統計処理を施した数値を用いてもよい。
また、差分Ｄは、通信経路に異常が発生した時に、変更した通信遅延を求めるために必要であるが、別の方法で求めてもよい。
例えば、各スレーブのＥＰＵ１６０を経由しない通信遅延Ｐがわかっている場合は、通信遅延Ｐをスレーブ数分合計した値Ｄｐを差分Ｄとしてもよい。
また、事前に制御用計算機１２０内の転送遅延を計測し、Ｄｐに加えてもよい。なお、動的にスレーブ数を求める方法としては、すべてのスレーブが処理すべきレジスタに対するＢＲＤコマンドを発行し、そのワーキングカウンタを見る方法が例示される。このコマンドは動作管理部１３８の要求にしたがって発行され、パケット生成部１３９がパケットを生成し、送信する。あるいは、事前に動作管理部１３８に設定したスレーブ数を用いてもよい。
【０１２１】
＜時刻同期補正の手順＞
次に、時刻同期補正の手順について説明する。
図２１は、時刻同期補正の手順を示すフローチャートである。
図２１に示す時刻同期補正の手順のフローチャートを、具体例として、図２０と図２２を参照して説明する。
なお、図２０は前記したように、冗長経路切替部１３１と主ポートと冗長ポートとスレーブＡ〜スレーブＤからなる通信経路において、通信経路異常１２２Ｘが生じた状況を示す図である。また、図２２は、冗長経路切替部１３１と主ポートと冗長ポートとスレーブＡ〜スレーブＤからなる通信経路において、通信経路異常がない状況を示す図である。
【０１２２】
《Ｓ０４０》
まず、スタートした後、はじめに、ステップＳ０４０において、補正用の通信遅延を算出可能か判定する。
これは、例えばアプリケーションの実行開始時にすでに通信経路異常が発生している場合が考えられる。
この通信経路異常が発生している場合、受信時刻ｔｂ、ｔａを保持していないため、式７における差分Ｄを算出できず、ステップＳ０４０において、算出不可と判定する。
あるいは、冗長ポートからパケットを折り返した時に、通信経路異常が発生し、ｔａは保持し、ｔｂを保持していない場合に算出不可と判定する。
あるいは、複数のｔｂ、ｔａを用いて、差分Ｄを統計的に算出する場合に、所定数のｔｂ、ｔａを保持していない場合に算出不可であると判定する（Ｎ：Ｓ０４０）。
そして、ステップＳ０４４に進む。
また、ステップＳ０４０において、補正用の通信遅延を算出可能であると判定すれば（Ｙ：Ｓ０４０）、次のステップＳ０４１に進む。
【０１２３】
《Ｓ０４１》
ステップＳ０４１において、通信経路異常の発生箇所を特定する。
発生箇所の特定方法は、前述した図１４、図１６に示す通信経路異常の発生箇所の特定方法が、一例としてある。
そして、ステップＳ０４２に進む。
【０１２４】
《Ｓ０４２》
ステップＳ０４２において、通信遅延の変更分ｄｉｆｆを計算する。
通信遅延の変更分は、通信経路の異常の発生箇所をはさむスレーブ間の遅延について、通信経路の異常の発生前と発生後の差分をとる。
各スレーブの遅延レジスタの値は、基準時刻を有するスレーブまでの遅延である。したがって、異常発生前の通信遅延を求めるためには、通信経路の異常の発生箇所をはさむスレーブのそれぞれの遅延を取得して差分を計算する。
図２０で例示すれば、各スレーブの遅延レジスタの値Ｓｙｓｔｅｍ＿ｄｅｌａｙ(Ｓystem delay)を用いて、通信経路異常発生前の通信遅延ｔｄｉｆｆＢＣは次式で求まる。
ｔｄｉｆｆＢＣ ＝ Ｓystem delayＣ − Ｓystem delayＢ    ・・・（式８）
【０１２５】
通信経路異常発生後の通信遅延ｔｄｉｆｆＢＣ２は、式７の差分Ｄをもとに計算する。差分Ｄをそのまま用いてもよい。
ｔｄｉｆｆＢＣ２ ＝ Ｄ    ・・・（式９）
あるいは、通信経路異常発生箇所直前のスレーブ内の通信経路の違いによる遅延差ｄを用いて、次式で計算してもよい。
ｔｄｉｆｆＢＣ２ ＝ Ｄ − ｄ    ・・・（式１０）
なお、遅延差ｄは、該スレーブにアクセスして取得してもよいし、スレーブの種類に応じた値を制御用計算機１２０で保持して利用してもよい。
【０１２６】
あるいは、通信経路異常発生箇所直後のスレーブ内の通信遅延ｅ（図２０の遅延ｔ５）を用いてもよい。
この通信遅延ｅは、該スレーブとその隣接スレーブの遅延レジスタの値と、該スレーブ内の通信経路の違いによる遅延差ｄを用いて計算することができる。図２０で例示すれば、次式で求まる。
ｅ ＝ Ｓystem delayＤ − Ｓystem delayＣ − ｄｃ    ・・・（式１１）
ここでｄｃは、スレーブＣにおけるスレーブ内の通信経路の違いによる遅延差ｄである。
【０１２７】
なお、冗長ポートに隣接するスレーブ（図２２のスレーブＤ）においては、冗長ポートにおける遅延レジスタの値Ｓystem delayが存在しないため、基準時刻を有するスレーブから冗長ポートまでの遅延を別途計算する必要がある。
通信遅延ｅを用いて、通信遅延ｔｄｉｆｆＢＣ２は、次式のいずれかで求めることができる。
ｔｄｉｆｆＢＣ２ ＝ Ｄ − ｅ    ・・・（式１２）
ｔｄｉｆｆＢＣ２ ＝ Ｄ − ｄ − ｅ    ・・・（式１３）
通信遅延の変更分ｄｉｆｆは次式で計算する。
ｄｉｆｆ ＝ ｔｄｉｆｆＢＣ２ − ｔｄｉｆｆＢＣ    ・・・（式１４）
この通信遅延の変更分が、通信経路の異常発生箇所以降のスレーブの通信遅延の補正値である。したがって、通信経路の異常発生箇所以降のスレーブの遅延レジスタの値を更新する。
【０１２８】
以上が、ステップＳ０４２における通信遅延の変更分の計算方法の例である。
次に、ステップＳ０４３に進む。
【０１２９】
《Ｓ０４３》
ステップＳ０４３において、通信経路異常の発生箇所以降のスレーブの通信遅延を更新する。
この更新する通信遅延の計算方法を以下に示す。
通信経路の異常発生箇所以降のスレーブに設定する遅延レジスタ値Ｓｙｓｔｅｍ＿ｄｅｌａｙ＿Ｎｅｗ（Ｓystem delay New）は、次式で求まる。
Ｓystem delay New ＝ Ｓystem delay ＋ ｄｉｆｆ    ・・・（式１５）
遅延レジスタの更新にあたっては、各スレーブに対して、２回のアクセスが必要である。すなわち、現状の遅延レジスタ値Ｓｙｓｔｅｍ＿ｄｅｌａｙの取得と、Ｓｙｓｔｅｍ＿ｄｅｌａｙ＿Ｎｅｗの更新である。
以上により、通信経路異常の発生箇所以降のスレーブの通信遅延を更新する。
そして、ステップＳ０４３の後は、終了する。
【０１３０】
《Ｓ０４４》
ステップＳ０４０において、補正用の通信遅延を算出不可と判定した場合（Ｎ：Ｓ０４０）は、ステップＳ０４４において、通信経路の異常をユーザやオペレータに通知して、対応処理を実行する。
対応処理としては、通信経路の異常発生箇所を特定して、制御対象１２１（図１、スレーブＡ〜Ｄ、図２０）を点検することや、該通信ケーブルの交換、確認等が例示される。
【０１３１】
＜顕現性の確保＞
以上の式７〜式１４による通信経路の異常発生後の通信遅延の変更分ｄｉｆｆの算出において、通信経路異常発生後の通信遅延は、差分Ｄをそのまま用いる場合においては、どの通信経路に異常が発生しても、同じ値（請求項）である。
また、式１０によって差分Ｄを求める場合においては、各スレーブの遅延差ｄだけ値が異なる。
スレーブ毎に遅延差ｄが等しければ、式１０で計算する場合でも、どの通信経路に異常が発生したかにかかわらず、差分Ｄは同じ値である。したがって、必ず具体的に計算できて、顕現性が確保されている。
【０１３２】
＜通信遅延の更新方法＞
また、図２１のステップＳ０４２、Ｓ０４３における通信経路異常の発生箇所以降のスレーブに通信遅延の更新方法は、別の方法も考えられる。例えば、受信時刻ｔｂとｔａの差分Ｄを求めた後に全スレーブに通知する方法である。
通知する方法は、所定のレジスタへの書込み（ライトコマンドの発行）が例示される。
具体的には、ＢＷＲ（Broadcast Write）コマンドや全スレーブを同じアドレスにマッピングさせた論理アドレスへのＬＷＲ（Logical memory Write）コマンドが例示される。
この場合、通信経路の異常が発生すると、各スレーブは、通信遅延の変更が必要かを知るため、各スレーブが通信経路異常発生箇所の前に位置するか、後に位置するかを知る必要がある。
【０１３３】
＜異常発生箇所の特定における通知方法＞
図１４、図１６で示した異常発生箇所の特定方法で、制御用計算機１２０（マスタ）が異常発生箇所を特定すると、その発生箇所以降のスレーブに個別に通知してもよい。
また、マスタが、発生箇所直後のスレーブにアクセスするオートインクリメントアドレスコマンドを発行し、各スレーブが、オートインクリメントアドレスが０以上かどうかを判定してもよい。
ここで、オートインクリメントアドレスとは、スレーブの接続順序に基づくアドレス方法であり、各スレーブは、テレグラムのオートインクリメントアドレスをインクリメントする特徴がある。受信したテレグラムのオートインクリメントアドレスが０の場合に、各スレーブは、そのテレグラムを処理する。
【０１３４】
あるいは、通信経路の異常発生時は、主ポートから送信されたパケットは、再び主ポートで受信されるため、そこで、制御用計算機１２０のパケット生成部１３９が、残りのスレーブにアクセスするコマンドを付加することが例示される。そのようなコマンドとして、ＢＷＲコマンドが例示される。
各スレーブは、通信経路異常の発生をもって、ＣＰＵ１０１によって、事前に通知された差分Ｄを遅延レジスタの現在値に加えることで時刻を更新する。
各スレーブは、制御用計算機１２０（マスタ）からの通知によって通信経路異常の発生を知る。例えば、制御用計算機１２０からスレーブに割込み可能なレジスタへコマンドを発行してもよい。
【０１３５】
また、通信経路異常に接するスレーブは、スレーブＩＣ１５１やＰＨＹ１０３の所定の信号によって、通信経路異常の発生を検知できるため、マスタから送信されたデータグラムのＩＲＱ２２７の所定ビットを有効にしてもよい。
なお、式１０によって、遅延を補正する場合は、制御用計算機１２０が通信経路異常発生箇所直前のスレーブの遅延差ｄを求めて、各スレーブに通知してもよい。通知する方法は、所定のレジスタへの書込みが例示される。
【０１３６】
＜時刻同期補正の方法の利点＞
これらの時刻同期補正の方法は、図２１に比べて、制御用計算機１２０が発行するパケット数、テレグラム数を少なくできる利点がある。
スレーブを所定の通知方法に対応させる必要があるが、必要なパケット数、テレグラム数がスレーブ数に依存しないという利点があり、スレーブ数が多くなるほど有効である。
また、パケット数、テレグラム数を少なくできれば、それだけ、通信経路の異常発生時でも迅速な再時刻同期が可能である。
あるいは、これらの時刻同期補正の方法と、図２１に示す方法に対応したスレーブを混在させてもよい。この場合、先にパケット数、テレグラム数が少ない方式に対応したスレーブの時刻を補正した後、その後、図２１の方法を実行することが例示される。
この場合、各スレーブの対応を示す必要がある。事前に、制御用計算機１２０において、スレーブの情報（接続順、アドレス等）によって識別してもよいし、該スレーブが所定のアドレスに対応を提示してもよい。
【０１３７】
＜時刻同期の補正処理の実行タイミング・その他の例＞
また、図９では、時刻同期補正処理をステップＳ００７で実行しているが、任意のタイミングで実行してもよい。
例えば、図２１のステップＳ０４０において、所定の統計処理に必要な充分な数の受信時刻ｔｂ、ｔａを計測した時点が挙げられる。
【０１３８】
または、一時的な通信経路異常の可能性を除去するため、所定時間、通信経路異常の状態が継続するかを監視してもよい。監視時間中に通信経路が正常状態に戻れば、時刻同期補正処理を実行する必要はない。
【０１３９】
あるいは、制御対象１２１の動作に影響のないタイミングで時刻同期補正処理を実行することが例示される。
制御動作の周期実行動作と、時刻同期補正処理のタイミングが重なれば、制御対象１２１が誤ったタイミングで制御動作を実行するおそれがある。このような場合、制御用計算機１２０は、通信経路異常を検知後、ただちに定期的な時刻補正パケットの送信を停止する。この間、制御対象１２１は、自身の時刻制度で時刻を管理する。
それから、制御用計算機１２０は、制御指令値やセンサ値取得要求の送信直後や、予め設定した所定の周期動作実行タイミング後に、時刻補正処理を実行する。
このようにすれば、制御対象１２１が誤ったタイミングで制御動作を実行する可能性を避けることができる。
【０１４０】
＜異常発生後に復帰した場合の時刻補正＞
また、通信経路異常発生後に、時刻補正処理を実行後、通信経路異常が解消され、正常に戻る場合を考える。この場合には、再度、時刻を補正する必要がある。
この時、必要な情報は、通信経路が正常時の通信遅延と、再補正対象となるスレーブの識別、通信経路が正常になったことの判定結果である。
正常時の通信遅延は、正常時の遅延レジスタ値を記憶して、再補正時に利用する方法が例示される。
【０１４１】
あるいは通信経路異常発生時には、補正対象のスレーブは、式１５によって補正後の遅延を計算したため、変更分ｄｉｆｆがわかれば、次式で再補正用の遅延Ｓｙｓｔｅｍ＿ｄｅｌａｙを算出できる。
Ｓystem delay ＝ Ｓystem delay New − ｄｉｆｆ    ・・・（式１６）
したがって、変更分ｄｉｆｆを計算した時に保持する方法が例示される。
【０１４２】
《変更分ｄｉｆｆの保持》
変更分ｄｉｆｆは制御用計算機１２０が算出してもよいし、制御対象１２１が算出してもよいため、制御用計算機１２０または制御対象１２１が変更分ｄｉｆｆを保持すればよい。
【０１４３】
また、制御用計算機１２０が前記の変更分ｄｉｆｆを保持する場合は、各制御対象１２１に通知してもよい。
また、式１６により、再補正後の遅延を算出して、再補正対象となる制御対象１２１の遅延レジスタ値を補正してもよい。
【０１４４】
《再補正対象となる制御対象の識別》
再補正対象となる制御対象１２１の識別は、制御用計算機１２０において、通信経路異常発生時に特定した通信経路異常の発生箇所を記憶してもよい。
あるいは、各制御対象１２１が、通信経路異常発生時に通知された内容に基づいて、自身で記憶してもよい。
また、通信経路が正常になったことは、図１８のステップＳ０３３において用いる方法等によって、制御用計算機１２０で判定可能である。この判定をもって、制御用計算機１２０は、その発生箇所以降のスレーブに個別に通知してもよい。
また、マスタが、発生箇所直後のスレーブにアクセスするオートインクリメントアドレスコマンドを発行し、各スレーブが、オートインクリメントアドレスが０以上かどうかを判定してもよい。
【０１４５】
＜冗長化の汎用的な構成における効果＞
以上の発明により、冗長化の汎用的な構成における課題への効果を説明する。
通信経路に異常が発生している場合に、冗長経路切替部１３１が図５の構成をとることで、パケットはソフトウェア処理を介さずに冗長化通信制御部１０２内で折り返して通信部１３５ｂからパケットを送信することができる。これによって、制御用計算機１２０内では一定遅延でパケットを転送できる。
さらに通信経路の異常によって、通信経路を変更した場合でも、通信経路異常の発生箇所に依存せずに、変更後の通信遅延を容易に求めることができる。これによって、通信経路に異常が発生している場合においても時刻同期アルゴリズムを実行することができる。
したがって、本発明を適用すれば、冗長化によるリアルタイム通信の高信頼化を提供することができる。
【０１４６】
（第２実施形態）
次に、本発明に係る通信制御システムの第２実施形態について図を参照して説明する。
【０１４７】
＜制御対象の通信ハードウェア上のＣＰＵ上で動作する機能構成＞
図２３は、本発明を適用した制御対象１２１（図１）の通信ハードウェア１５０（図６）上のＣＰＵ１０１（図６）上で動作する機能構成を示す図である。
図２３の第２実施形態で使用する符号は、特に断りのない限り、第１実施形態で説明した機能や要素等と同一であることを意味する。
第２実施形態は、本発明を適用した制御用計算機１２０の時刻補正処理中に、同期した時刻に基づくスレーブの割込みが乱れることに対応したものである。
【０１４８】
図２３において、時刻管理部２３０は、時刻同期割込み２３１とタイマ２３２を用いて、アプリケーション２３３を定期的に起動する。
時刻同期割込み２３１は、基準時刻に同期して発行される割込みであり、一般に定周期で発行するように設定される。時刻同期割込み２３１は、バス１６３上に構成する。
また、時刻同期割込み２３１を発行する周期やパルス幅は、スレーブＩＣ１５１上の設定であり、通信を介して、制御用計算機１２０によって設定されてもよいし、ＣＰＵ１０１上で動作するソフトウェアから設定してもよい。
【０１４９】
タイマ２３２は、計時機能を有するタイマであり、ＣＰＵ１０１に含まれるハードウェアによって構成してもよいし、ＣＰＵ１０１に含まれる定期割込み機能を用いて、ソフトウェア上で計時してもよい。
あるいは、ＣＰＵ１０１に含まずに、タイマデバイスやＦＰＧＡ、ＣＰＬＤ等を用いて構成してもよい。
また、タイマ２３２は、所定の期間の経過をもって、割込みを通知できるように構成してもよい。
【０１５０】
アプリケーション２３３は、時刻管理部２３０に定期的に起動されるソフトウェアであり、図６に図示していないアクチュエータへの指令や、同じく図６に図示していないセンサからのセンサ値の取得等を実行する。
第２実施形態の要点は、時刻管理部２３０が、タイマ２３２によって時刻同期割込み２３１の乱れを補正することである。
通信経路で異常が発生すると、異常をはさむスレーブ間の通信遅延は長くなる。これは、式６において遅延ｔｄｉｆｆＡＢが大きくなることを意味する。制御用計算機１２０によって遅延が補正されるまでの間、遅延ｔｄｉｆｆＡＢは、実際の値よりも小さな値のままである。
【０１５１】
図８の手順において、制御用計算機１２０は各スレーブに対して、基準時刻とローカルクロック間の通信遅延、時刻オフセットを求めた後は、定期的に基準時刻を各スレーブに配信する。各スレーブは、配信された基準時刻をもとに定期的にローカルクロックを補正する。
ここで、通信経路の異常が発生して、通信遅延が変化した場合を考える。通信経路の異常発生後に基準時刻が配信されると、過渡的にローカルクロックＣＢが基準時刻よりも早く進む期間が存在する。これは、時刻同期割込み２３１が本来の正しい時刻よりも前に発生することを意味する（図２４）。時刻管理部２３０はタイマ２３２を活用して、乱れを検知するとともに、遅延が補正されるまでの間、タイマ２３２を基にアプリケーション２３３を起動する。
【０１５２】
＜時刻同期割込みとタイマによるタイマ割込みと時刻管理部の動作＞
第２実施形態において、時刻同期割込み２３１（図２３）とタイマ２３２（図２３）によるタイマ割込みと時刻管理部２３０（図２３）の動作と、あわせて、時系列上の割込みと同期のタイミングを次に示す。
図２５は、時刻同期割込み２３１とタイマ２３２によるタイマ割込みと時刻管理部２３０の動作を示した第１例のフローチャートである。
また、図２４は、時系列上の割込みと同期のタイミングを示すタイムチャートである。図２４を参照して、図２５のフローチャートを説明する。
図２４において、横軸は時間の流れであり、タイマ割込み（ｔＴ０、ｔＴ１）と時刻同期割込み２３１（ａ〜ｇ）の割込み状態を示している。また、Ｐｉｎｔは、時刻同期の周期である。
図２４において、Ｐｉｎｔで示したひとつの周期の区間において、タイマ割込みｔＴ１の前に時刻同期割込み２３１ｃが発生しているので、通信経路異常が発生していると判定できる状態を示している。
【０１５３】
図２５の時刻同期割込み２３１とタイマ２３２によるタイマ割込みと時刻管理部２３０の動作を示したフローチャートについて説明する。
【０１５４】
《Ｓ０６０》
まず、スタートとして、はじめに、ステップＳ０６０において、時刻管理部２３０は、時刻同期割込み２３１の生成周期ＰｉｎｔをスレーブＩＣ１５１、あるいはスレーブＩＣ１５１（図６）の設定を保持するスレーブ搭載の不揮発性記憶メモリ（ＥＥＰＲＯＭ等、１０９、図６）から取得する。
そして、ステップＳ０６１に進む。
【０１５５】
《Ｓ０６１》
次に、ステップＳ０６１において、最初の時刻同期割込み２３１の発生を待機する（Ｓ０６１、図２４のｔＰ０）。
すなわち、ステップＳ０６１において、時刻同期割込みが発生したか否かを検出、判定する。
発生した場合（Ｙ：Ｓ０６１）には、ステップＳ０６２に進む。
また、発生しない場合（Ｎ：Ｓ０６１）には、ステップＳ０６１の先頭に戻り、引き続き時刻同期割込みの発生を検出すべく待機する。
なお、具体的には、スレーブの時刻同期の設定は制御用計算機１２０（マスタ）が設定する。
また、全スレーブが同期する前に通信経路異常が発生するような場合は、制御用計算機１２０（マスタ、図１）は、ただちに全スレーブの時刻同期機能を停止する必要がある。
この方法は、時刻同期機能を無効化するレジスタへのＢＷＲ（Broadcast Write）コマンドの発行が例示される。なお、時刻同期機能の無効化は、時刻同期割込み２３１の停止を意味する。
【０１５６】
《Ｓ０６２》
次に、ステップＳ０６２において、タイマ２３２に所定時間経過後に割込みを発生するように設定する。そして、次に、ステップＳ０６３に進む。
なお、前記所定時間は、周期Ｐｉｎｔ（図２４）よりも所定の期間短い時間とする。短くする期間は、過渡期に時刻同期割込み２３１が早まることを考慮して定める。
このタイマ割込みよりも前に時刻同期割込み２３１が発生した場合に、通信経路異常が発生し、再補正前と考える。
【０１５７】
《Ｓ０６３》
次に、ステップＳ０６３において、アプリケーション２３３を起動する。
そして、ステップＳ０６４に進む。
【０１５８】
《Ｓ０６４》
次にステップ０６４において、時刻同期割込み２３１の発生か、またはタイマ割込みの発生を待機する。
すなわち、ステップＳ０６４において、時刻同期割込み、またはタイマ割込みの発生があったか否かを検出、判定する。
発生があった場合（Ｙ：Ｓ０６４）には、ステップＳ０６５に進む。また、発生しない場合（Ｎ：Ｓ０６４）には、ステップＳ０６４の先頭に戻り、引き続き時刻同期割込み、またはタイマ割込みの発生を検出すべく待機する。
【０１５９】
《Ｓ０６５》
次に、ステップ０６５において、発生した割込みがタイマ割込みかどうかを判定する。
発生した割込みがタイマ割込みであれば（Ｙ：Ｓ０６５、図２４のｔＴ０）、ステップＳ０６１の手順へ戻る。
また、ステップ０６５において、発生した割込みがタイマ割込みでなく、時刻同期割込み２３１であれば（Ｎ：Ｓ０６５、図２４の２３１ｃ）、通信経路に異常が発生し、再同期補正前と判定し、ステップＳ０６６へ進む。
【０１６０】
《Ｓ０６６》
次に、ステップ０６６において、タイマ割込みの発生を待機する。
すなわち、ステップＳ０６６において、タイマ割込みは発生したか否かを検出、判定する。
タイマ割込みが発生していれば（Ｙ：Ｓ０６６）、ステップＳ０６７へ進む。タイマ割込みが発生していなければ（Ｎ：Ｓ０６６）、ステップＳ０６６の先頭に戻り、引き続きタイマ割込みは発生したか否かを検出すべく待機する。
【０１６１】
《Ｓ０６７》
次に、ステップＳ０６７においては、タイマ割込み発生（ｔＴ１）後、周期Ｐｉｎｔとタイマ割込みまでを発生させるまでの期間の差分の間、待機する。これは、アプリケーション２３３を起動させるタイミング（図２４のｔＰ２）まで待つためである。
所定期間の経過を待機する方法は、タイマ２３２による割込みを用いてもよいし、また、定期的にタイマ２３２の値を取得して、所定期間が経過していないかを確認する方法でもよい。
所定期間が経過したと判定した場合（Ｙ：Ｓ０６７）には、ステップＳ０６８へ進む。
また、所定期間が経過していないと判定した場合（Ｎ：Ｓ０６７）には、ステップＳ０６７の先頭に戻り、引き続き所定期間が経過するまで待機する。
【０１６２】
《Ｓ０６８》
続いて、ステップＳ０６８において、時刻管理部２３０は、タイマ値ｔ１を取得する（図２４のｔ１ａ）。
そして、ステップＳ０６９に進む。
【０１６３】
《Ｓ０６９》
次に、ステップＳ０６９において、タイマ割込みを設定する。
この時のタイマ割込みの期間は、周期Ｐｉｎｔが望ましい。これは、時刻同期割込み２３１の生成タイミングにずれが生じており、通信遅延の更新が完了するまでは、タイマ２３２にしたがってアプリケーション２３３を起動する必要があるためである。
そして、ステップＳ０７０に進む。
【０１６４】
《Ｓ０７０》
次に、ステップＳ０７０において、アプリケーション２３３を起動する。
そして、ステップＳ０７１に進む。
【０１６５】
《Ｓ０７１》
次に、ステップＳ０７１においては、時刻同期割込み２３１の発生か、または、タイマ割込みの発生があるまで待機する。
具体的には、時刻同期割込み２３１の発生か、または、タイマ割込みの発生を検出、判定する。
時刻同期割込み２３１の発生か、または、タイマ割込みの発生を検出したと判定した場合（Ｙ：Ｓ０７１）には、ステップＳ０７２に進む。
また、時刻同期割込み２３１の発生も、タイマ割込みの発生もないと判定した場合（Ｎ：Ｓ０７１）には、ステップＳ０７１の先頭に戻り、引き続き時刻同期割込み２３１の発生か、または、タイマ割込みの発生を検出するまで待機する。
【０１６６】
《Ｓ０７２》
次に、ステップＳ０７２においては、発生した割込みが時刻同期割込み２３１か否かを判定する。
発生した割込みが時刻同期割込み２３１であると判定した場合（Ｙ：Ｓ０７２）には、ステップＳ０７３に進む。
また、発生した割込みが時刻同期割込み２３１でない判定した場合（Ｎ：Ｓ０７２）には、ステップＳ０７１の先頭に戻る。
【０１６７】
《Ｓ０７３》
次に、ステップＳ０７３においては、タイマ値ｔ２を取得する（図２４のｔ２ａ、ｔ２ｂ、ｔ２ｃ）。
そして、ステップＳ０７４に進む。
【０１６８】
《Ｓ０７４》
次に、ステップＳ０７４においては、ｔ１と周期Ｐｉｎｔの和と、ｔ２の差分の絶対値が所定値Ｔｈ以下（以内）かどうか、（｜（ｔ１＋Ｐｉｎｔ）―ｔ２｜＜Ｔｈ）を判定する。
所定値Ｔｈ以下であれば、通信遅延の更新が完了したと判定し、ステップＳ０６２へ進む。また、所定値Ｔｈを超していれば（図２４のｔ２ａ、ｔ２ｂ）、ステップＳ０７５へ進む。
なお、ステップＳ０７４において、一度の条件成立でＳ０６２へ進むのではなく、所定回数の成立、あるいは所定連続回数の成立をもってＳ０６２へと進んでもよい。
なお、図２４では、ｔ２ｃの時、この所定値Ｔｈ以下の条件を満足している。
【０１６９】
《Ｓ０７５》
次に、ステップＳ０７５においては、発生した割り込みがタイマ割込みか否かを確認し、判定する。これは、Ｓ０７１、Ｓ０７２、Ｓ０７３、Ｓ０７４において、タイマ割込みが発生している可能性があるためである。
ステップＳ０７５において、タイマ割込みが発生していれば（Ｙ：Ｓ０７５）、ステップＳ０６８へと進む。
また、タイマ割込みが発生していなければ（Ｎ：Ｓ０７５）、Ｓ０７１へと進む。
【０１７０】
以上が、図２５のフローチャートの時刻同期割込み２３１とタイマ２３２によるタイマ割込みと時刻管理部２３０の動作である。
【０１７１】
＜時系列上の割込みと同期のタイミング＞
また、通信経路で異常が発生した後、再び通信経路が正常に復帰した場合を考える。この場合は、図２４の時刻同期割込み２３１ｂと時刻同期割込み２３１ｃの間隔が短くなったこととは逆に長くなる。
この場合の時刻同期割込み２３１とタイマ２３２によるタイマ割込みと時刻管理部２３０の動作と、あわせて、時系列上の割込みと同期のタイミングを示す。
【０１７２】
＜タイマ割込みと時刻管理部２３０の動作の第２例のフローチャート＞
図２６は、時刻同期割込み２３１とタイマ２３２によるタイマ割込みと時刻管理部２３０の動作を示した第２例のフローチャートである。
また、図２７は、時系列上の割込みと同期のタイミングを示すタイムチャートである。
図２６のフローチャートを説明する前に図２７について説明する。
図２７において、横軸は時間の流れであり、タイマ割込み（ｔＴ１）と時刻同期割込み２３１（ｈ〜ｎ）の割込み状態を示している。また、Ｐｉｎｔは、時刻同期の周期である。
図２７において、Ｐｉｎｔで示したひとつの周期の区間において、タイマ割込みｔＴ１の後に時刻同期割込み２３１ｊが発生しているので、通信経路異常が発生していると判定できる状態を示している。
【０１７３】
図２６の時刻同期割込み２３１とタイマ２３２によるタイマ割込みと時刻管理部２３０の動作を示したフローチャートについて説明する。
ただし、図２６のフローチャートと図２５のフローチャートは非常に似ており、図２６のフローチャートの各ステップＳ０６０〜Ｓ０７５は、図２５のフローチャートの各ステップＳ０９０〜Ｓ１０５相当しており、概ね等しいステップについては、詳細な説明が重複する場合には、省略することもある。
【０１７４】
《Ｓ０９０》
図２６のステップＳ０９０は、図２５のステップＳ０６０と概ね等しいので、説明を省略する。
【０１７５】
《Ｓ０９１》
次に、ステップＳ０９１において、最初の時刻同期割込み２３１の発生を待機する（Ｓ０９１、図２７のｔＰ０）。
なお、その他の説明は、ステップＳ０６１と重複するので、詳細な説明は省略する。
【０１７６】
《Ｓ０９２》
次に、ステップＳ０９２において、タイマ２３２に所定時間経過後に割込みを発生するように設定する。そして、次に、ステップＳ０９３に進む。
なお、前記所定時間は、周期Ｐｉｎｔ（図２４）よりも所定の期間、長い時間とする。長くする期間は、過渡期に時刻同期割込み２３１が遅くなることを考慮して定める。
この時刻同期割込み２３１よりも前にタイマ割込みが発生した場合に、通信経路が正常復帰し、再補正前と考える。
【０１７７】
《Ｓ０９３〜Ｓ０９４》
図２６のステップＳ０９３〜Ｓ０９４は、図２５のステップＳ０６３〜Ｓ０６４と概ね等しいので、重複する説明を省略する。
【０１７８】
《Ｓ０９５》
次に、図２６のステップ０９５において、発生した割込みが時刻同期割込み２３１かどうかを判定する。
発生した割込みが時刻同期割込み２３１であれば（Ｙ：Ｓ０９５、図２７のｔＰ１）、ステップＳ０９２の手順へ戻る。
また、ステップ０９５において、発生した割込みが時刻同期割込み２３１なくタイマ割込みであれば（Ｎ：Ｓ０９５、図２７のｔＴ１）、通信経路が正常復帰し、再同期補正前と判定し、ステップＳ０９６へ進む。
【０１７９】
《Ｓ０９６》
次に、ステップ０９６において、タイマ割込み発生（ｔＴ１）後、アプリケーション２３３を起動する。そして、ステップＳ０９７に進む。
【０１８０】
《Ｓ０９７》
次に、ステップＳ０９７においては、タイマ割込みまでを発生させるまでの期間と、周期Ｐｉｎｔの差分の間、待機する。これは、アプリケーション２３３を起動させるタイミング（図２７のｔＰ３）まで待つためである。
所定期間が経過したと判定した場合（Ｙ：Ｓ０９７）には、ステップＳ０９８へ進む。
また、所定期間が経過していないと判定した場合（Ｎ：Ｓ０９７）には、ステップＳ０９７の先頭に戻り、引き続き所定期間が経過するまで待機する。
【０１８１】
《Ｓ０９８》
続いて、ステップＳ０９８において、時刻管理部２３０は、タイマ値ｔ１を取得する（図２７のｔ１ｅ）。
【０１８２】
《Ｓ０９９〜Ｓ１０２》
図２６のステップＳ０９９〜Ｓ１０２は、図２５のステップＳ０６９〜Ｓ０７２と概ね等しいので、重複する説明を省略する。
【０１８３】
《Ｓ１０３》
次に、ステップＳ１０３においては、タイマ値ｔ２を取得する（図２７のｔ２ｅ、ｔ２ｆ、ｔ２ｇ）。
そして、ステップＳ１０４に進む。
【０１８４】
《Ｓ１０４》
次に、ステップＳ１０４においては、ｔ１と周期Ｐｉｎｔの和と、ｔ２の差分の絶対値が所定値Ｔｈ以下（以内）かどうか、（｜（ｔ１＋Ｐｉｎｔ）―ｔ２｜＜Ｔｈ）を判定する。
所定値Ｔｈ以下であれば、通信遅延の更新が完了したと判定し、ステップＳ９２へ進む。また、所定値Ｔｈを超していれば（図２７のｔ２ｅ、ｔ２ｆ）、ステップＳ１０５へ進む。
なお、ステップＳ１０４において、一度の条件成立でＳ０９２へ進むのではなく、所定回数の成立、あるいは所定連続回数の成立をもってＳ０９２へと進んでもよい。
なお、図２７では、ｔ２ｇの時、この所定値Ｔｈ以下の条件を満足している。
【０１８５】
《Ｓ１０５》
次に、ステップＳ１０５においては、発生した割り込みがタイマ割込みか否かを確認し、判定する。これは、Ｓ１０１、Ｓ１０２、Ｓ１０３、Ｓ１０４において、タイマ割込みが発生している可能性があるためである。
ステップＳ１０５において、タイマ割込みが発生していれば（Ｙ：Ｓ１０５）、ステップＳ０９８へと進む。また、タイマ割込みが発生していなければ（Ｎ：Ｓ１０５）、Ｓ０１０１へと進む。
【０１８６】
以上が、図２６のフローチャートの時刻同期割込み２３１とタイマ２３２によるタイマ割込みと時刻管理部２３０の動作である。
【０１８７】
＜冗長化の汎用的な構成における効果＞
以上の発明により、冗長化の汎用的な構成における課題への効果を説明する。
通信経路に異常が発生している場合に、冗長経路切替部１３１が図５の構成をとることで、パケットはソフトウェア処理を介さずに冗長化通信制御部１０２内で折り返して通信部１３５ｂからパケットを送信することができる。これによって、制御用計算機１２０内では一定遅延でパケットを転送できる。
さらに通信経路の異常によって、通信経路を変更した場合でも、通信経路異常の発生箇所に依存せずに、変更後の通信遅延を容易に求めることができる。
【０１８８】
これによって、通信経路に異常が発生している場合においても時刻同期アルゴリズムを実行することができる。
さらに、通信経路の異常発生直後の各スレーブの過渡的な更新期間においても、スレーブにおいて、タイマを用いた時刻管理部２３０によって、基準時刻に対する同期精度を維持した状態で制御システムを継続することができる。
したがって、第２実施形態によって、冗長化によるリアルタイム通信の高信頼化を図ることができる。
【０１８９】
（第３実施形態）
次に、本発明に係る通信制御システムの第３実施形態について、図２８〜図３５を参照して説明する。
【０１９０】
＜冗長化通信制御部１１１の機能構成＞
図２８は、本発明の第３実施形態を適用した冗長化通信制御部１１１の機能構成を示すブロック図である。
第３実施形態における冗長化通信制御部１１１は、主ポートと冗長ポートによる組み合わせのポートをさらに複数ポートとしたものであって、通信部（１３５ａ〜１３５ｄ）を備えた構成となっている。
つまり、第１実施形態の冗長化通信制御部１０２（図３、通信部（１３５ａ〜１３５ｂ））と比較して、通信部（１３５ｃ〜１３５ｄ）を追加した構成となっている。
なお、第３実施形態において使用する符号で、第１実施形態と同じ符号のものは、特に断りのない限り、第１実施形態で説明した機能や要素等と同一であることを意味する。重複する説明は省略する。
【０１９１】
また、図２９は、第３実施形態における制御用計算機１２０のハードウェア構成の一例を示す図である。
図２９の制御用計算機１２０のハードウェア構成は、図２で説明した第１実施形態における制御用計算機１２０のハードウェア構成と同じような構成であるが、ＰＨＹ１０３が４つの構成となっている点が図２とは異なる。このＰＨＹ１０３が４つの構成は、図２８の冗長化通信制御部１１１の通信部１３５ａ〜１３５ｄと対応している。その他の図２と重複する説明は省略する。
また、図３０は、第３実施形態における制御用計算機１２０を用いたシステムの構成の一例を示す図である。
【０１９２】
図３０の制御用計算機１２０を用いたシステムの構成は、図１で説明した第１実施形態における制御用計算機１２０を用いたシステムの構成と同じような構成であるが、制御用ネットワーク１２２ａに接続された制御対象１２１と、制御用ネットワーク１２２ｂに接続された制御対象１２１とを、別の系列として制御している点が異なる。この制御用ネットワーク１２２ａ、１２２ｂの構成は、前記した図２８と図２９のそれぞれの特徴と対応している。
図２９、図３０に示す制御用計算機１２０は、通信ポートを４つ（１３５ａ〜１３５ｄ）有しているため、２つの通信ポートを接続したリングネットワークを２つ有することが第３実施形態としての特徴である。この第３実施形態について、さらに詳しく説明する。
【０１９３】
＜通信部の論理的接続構成＞
図２８において、通信部１３５ａと通信部１３５ｂは、同じ制御用ネットワーク１２２ａに接続している。また、通信部１３５ｃと通信部１３５ｄも同じ制御用ネットワーク１２２ｂに接続している。
通信部１３５ａは、パケット生成部１３９から伝送されたパケットを送信する通信ポートであり、図３２、図３３、図３４、図３５のＴｘ２０１、Ｒｘ２００と接続している。
なお、図３２、図３３、図３４、図３５は、それぞれ、冗長経路切替部２４０（図２８）内部の通信経路の接続の例（第１例〜第４例）を示した図である。
また、図３１は、物理的な通信部（通信部Ａ〜通信部Ｄ）と機能的な通信部（Ｐ０２０〜Ｐ０２６）の対応付けの一例を示した図である。
【０１９４】
通信部１３５ｂは、通信部１３５ａと制御用ネットワーク１２２ａを構成する終端のＥｔｈｅｒＣＡＴスレーブからのパケットを受信する通信ポートであり、図３２、図３３、図３４、図３５のＴｘ２０３、Ｒｘ２０２と接続している。
通信部１３５ｃは、通信部１３５ｂが受信したパケットを制御用ネットワーク１２２ｂに送信する通信ポートであり、図３２、図３３、図３４、図３５のＴｘ２０５、Ｒｘ２０４と接続している。
通信部１３５ｄは、通信部１３５ｃと制御用ネットワーク１２２ｂを構成する終端のＥｔｈｅｒＣＡＴスレーブからのパケットを受信する通信ポートであり、図３２、図３３、図３４、図３５のＴｘ２０７、Ｒｘ２０６と接続している。
【０１９５】
＜通信部の物理的な配置と論理的な配置の関連付け＞
次に、通信部の物理的な位置と通信部１３５ａ〜１３５ｄの対応関係について説明する。
また、事前にパケットを特定の通信部から送信して、順番にパケットを受信した通信部について、順次、通信部１３５ｂ〜１３５ｄとの関連を、図２８と図３１を参照して説明する。
なお、図３１は、制御用計算機１２０における冗長経路切替部２４０を介する通信部Ａ〜通信部Ｄと通信経路Ｐ０２０〜Ｐ０２６との関連を示す図である。
【０１９６】
例えば、物理的な位置が明らかな通信部１３５Ａ、Ｂ、Ｃ、Ｄ（図３１）に対して、はじめに通信部１３５Ａからパケットを送信したとする。このとき、通信部Ａを図２８に示す通信部１３５ａとする。
次に通信部Ｃ（図３１）にて、このパケットを受信した場合（Ｐ０２０）、通信部Ｃが図２８の通信部１３５ｂとなる。
そして、通信部Ｃにて受信したパケットを、残りの通信ポートのどちらかに転送する。ここでは通信部Ｂ（図３１）を選択し、パケットを送信する（Ｐ０２１）。
【０１９７】
このとき、通信部Ｂを図２８の通信部１３５ｃとする。このパケットは、ネットワークの配線が正しければ通信部Ｄ（図３１）で受信する（Ｐ０２２）。
通信部Ｄで受信したパケットは、冗長経路切替部２４０を図３１に示すように結線し、そのまま通信部Ｄから送信する（Ｐ０２３）。
なお、ここで通信部Ｄは、図２８の通信部１３５ｄとなる。以上のようにして、ネットワークの配線が正しいという前提のもとに、パケットを送信し、その受信の順番をみることで物理的な通信部Ａ〜Ｄと本実施形態上の論理的な通信部１３５ａ〜１３５ｄを対応付けることができる。
【０１９８】
この仕組みを用いることで、ネットワークがリングネットワークとして配線されていないことを検出することができる。これは誤配線の場合もあれば、通信経路上に異常が発生している場合が考えられる。
例えば、図３１において最初に通信部Ａから送信したパケットを再び、通信部Ａで受信した場合は、通信部Ａに接続されたネットワークがライントポロジに構成されていれば、通信部Ａに接続されたネットワーク上に異常が発生していると判定できる。
この検出された情報を動作管理部１３８からＣＰＵ１０１上のプログラムに通知することで、ユーザやオペレータが、通信ケーブルの接続確認、通信ケーブルの置換等の対策をとることができる。
【０１９９】
＜複数ポートの冗長経路切替部内の経路＞
次に、複数ポートの冗長経路切替部内の経路について説明する。
前記したように、図３２、図３３、図３４、図３５は、それぞれ、冗長経路切替部２４０（図２８）内部の通信経路の接続の例を示した図である。
冗長経路切替部２４０は、動作管理部１３８（図２８）からの指令によって、図３２、図３３、図３４、図３５に示す通信経路の接続形態をとる。
【０２００】
図３２、図３３、図３４、図３５において、Ｒｘ２００は、通信部１３５ａの受信部１３７ａと、Ｔｘ２０１は、通信部１３５ａの送信部１３６ａと接続している。
また、Ｒｘ２０２は、通信部１３５ｂの受信部１３７ｂと、Ｔｘ２０３は、通信部１３５ｂの送信部１３６ｂと接続している。
また、Ｒｘ２０４は、通信部１３５ｃの受信部１３７ｃと、Ｔｘ２０５は、通信部１３５ｃの送信部１３６ｃと接続している。
また、Ｒｘ２０６は、通信部１３５ｄの受信部１３７ｄと、Ｔｘ２０７は、通信部１３５ｄの送信部１３６ｄと接続している。
【０２０１】
第３実施形態における本発明の経路切替の方法や、補正遅延の算出方法等の基本的な考え方は、第１実施形態と同様である。ただし、時刻同期の補正値は、制御用ネットワーク１２２ａと制御用ネットワーク１２２ｂのそれぞれで算出する。
また、図９におけるステップＳ００１の冗長経路切替部の制御系路の設定においては、はじめに、正常モードの設定では、冗長経路切替部２４０の通信経路の接続状態を図３２の構成にする。
【０２０２】
＜冗長経路切替部の経路の接続状態＞
冗長経路切替部２４０内部の通信経路の接続状態は、制御用ネットワーク１２２ａ、１２２ｂのそれぞれの通信経路の状態によって異なる。
図３６は、動作管理部１３８が制御する冗長経路切替部２４０内の接続状態の切り替えを示す状態遷移図である。
図３６を参照して、動作管理部１３８が制御する冗長経路切替部２４０内の接続状態の切り替えについて説明する。
【０２０３】
Ｓ０８０は正常モード、Ｓ０８１は制御用ネットワーク１２２ａのみが異常の状態、Ｓ０８２は制御用ネットワーク１２２ｂのみが異常の状態、Ｓ０８３は制御用ネットワーク１２２ａ、ｂの両方が異常の状態である。
遷移条件となる事象Ｓ０８４は、制御用ネットワーク１２２ａを異常と判定することである。また、Ｓ０８５は制御用ネットワーク１２２ｂを異常と判定することである。
また、Ｓ０８６は制御用ネットワーク１２２ａを正常と判定することである。また、Ｓ０８７は制御用ネットワーク１２２ｂを正常と判定することである。
冗長経路切替部２４０の経路の接続状態は、Ｓ０８０では図３２に示した接続状態である。また、同様に、Ｓ０８１では図３３、Ｓ０８２では図３４、Ｓ０８３では図３５のそれぞれの接続状態である。
【０２０４】
ただし、図３６に示す状態遷移図の各状態と、冗長経路切替部２４０内部の通信経路の接続状態を対応させずに、各受信パケットごとに、通信経路の異常を判定して別の通信ポートに転送するか、制御用計算機１２０内にパケットを取り込んでもよい。
例えば、通信部１３５ｃの受信部１３７ｃで受信した場合で説明する。
制御用ネットワーク１２２ａ、制御用ネットワーク１２２ｂの両方とも正常であれば、通信部１３５ｂの送信部１３６ｂに転送する（図３２）。
また、制御用ネットワーク１２２ｂのみが異常であれば、通信部１３５ｄの送信部１３６ｄに転送（図３４、図３５）する。
また、制御用ネットワーク１２２ａのみが異常であれば、制御用計算機１２０内部にパケットを取り込む（図３３）。
【０２０５】
＜補正遅延の算出＞
前記したように第１実施形態では、補正遅延を算出するために通信経路が正常時の主ポートと冗長ポートの受信時刻ｔａ、ｔｂを記録し、差分Ｄを求めた（式７）。
しかしながら、第３実施形態では、これが制御用ネットワーク１２２ごとに記録する必要がある。
制御用ネットワーク１２２ａで通信経路異常が起きた場合の補正値を算出するためには、図３２におけるＲｘ２０４での受信時刻ｔｍｃと、Ｒｘ２００での受信時刻ｔｍａを記録する必要がある。
同様に、制御用ネットワーク１２２ｂで通信経路異常が起きた場合の補正値を算出するためには、図３２におけるＲｘ２０６での受信時刻ｔｍｄとＲｘ２０４での受信時刻ｔｍｃとを記録する必要がある。
【０２０６】
制御用ネットワーク１２２ａの通信経路異常に対する差分Ｄａは次式で計算する。
Ｄａ ＝ ｔｍａ − ｔｍｃ    ・・・（式１７）
制御用ネットワーク１２２ｂの通信経路異常に対する差分Ｄｂは次式で計算する。
Ｄｂ ＝ ｔｍｃ − ｔｍｄ    ・・・（式１８）
したがって、制御用ネットワーク１２２ａに対して、通信経路異常発生箇所を含むスレーブ間の通信遅延を算出するには、式９、式１０、式１２、式１３における差分Ｄを上記のＤａに置き換えればよい。
一方で、制御用ネットワーク１２２ｂの通信経路異常に対して、通信経路異常発生箇所を含むスレーブ間の通信遅延を算出するには、式９、式１０、式１２、式１３における差分Ｄを次式で計算する必要がある。
Ｄ ＝ Ｄａ２ ＋ Ｄｂ    ・・・（式１９）
ただし、Ｄａ２は、制御用ネットワーク１２２ａで通信経路異常が発生している場合は、Ｄａであり、制御用ネットワーク１２２ａが正常な場合は０である。
【０２０７】
＜異常判定方法＞
次に、通信経路の異常を判定する方法について、例を示す。
【０２０８】
《異常判定方法・第１例》
通信経路の異常判定の第１の方法として、通信部１３５ａからパケットを送信後に、通信部１３５ｂでパケットを受信する前に、通信部１３５ａでパケットを受信したかどうかをみる方法が例示される。
通信部１３５ｂでパケットを受信せず、通信部１３５ａで受信した場合に、制御用ネットワーク１２２ａの通信経路を異常と判定する。
同様に、通信部１３５ｃからパケットを送信後に、通信部１３５ｄでパケットを受信する前に、通信部１３５ｃでパケットを受信したかどうかをみる。
通信部１３５ｄでパケットを受信せず、通信部１３５ｃで受信した場合に、制御用ネットワーク１２２ｂの通信経路を異常と判定する。
【０２０９】
《異常判定方法・第２例》
また、通信経路の異常判定の第２の方法として、全てのスレーブが処理すべきレジスタに対するＢＲＤコマンドをＥｔｈｅｒＣＡＴフレームに付与し、そのワーキングカウンタを見る方法が例示される。
ＥｔｈｅｒＣＡＴフレームのワーキングカウンタの値が、事前に設定した所定の数よりも小さければ通信経路を異常と判定する。
【０２１０】
この場合、制御用ネットワーク１２２ａと制御用ネットワーク１２２ｂのそれぞれのネットワークに接続しているスレーブの数を事前に設定している必要がある。
制御用ネットワーク１２２ａに接続するスレーブ数をＮａ、制御用ネットワーク１２２ｂに接続するスレーブ数をＮｂとした場合に、ＥｔｈｅｒＣＡＴフレームのワーキングカウンタの値がＮａよりも小さければ、少なくとも制御用ネットワーク１２２ａの通信経路を異常と判定する。
また、ワーキングカウンタの値が、Ｎａより大きくＮｂより小さければ制御用ネットワーク１２２ｂの通信経路を異常と判定する。
【０２１１】
これらの異常判定の方法は組み合わせて用いてもよい。いずれかの判定方法によって異常と判定した場合に異常と判定してもよいし（論理和）、両方の判定方法で異常と判定した場合に異常と判定してもよい（論理積）。
【０２１２】
＜正常判定方法＞
次に、通信経路が正常であることを判定する方法について、例を示す。
【０２１３】
《正常判定方法・第１例》
通信経路の正常判定の第１例の方法として、通信部１３５ａからパケットを送信後に、通信部１３５ｂでパケットを受信した後に、通信部１３５ａでパケットを受信したかどうかをみる方法が例示される。
通信部１３５ｂで受信した後に通信部１３５ａで受信すれば、通信経路を正常と判定する。
同様に、通信部１３５ｃからパケットを送信後に、通信部１３５ｄでパケットを受信した後に、通信部１３５ｃでパケットを受信したかどうかをみる。
通信部１３５ｄでパケットを受信してから、通信部１３５ｃで受信した場合に、制御用ネットワーク１２２ｂの通信経路を正常と判定する。
【０２１４】
《正常判定方法・第２例》
また、通信経路の正常判定の第２例の方法として、全てのスレーブが処理すべきレジスタに対するＢＲＤコマンドをＥｔｈｅｒＣＡＴフレームに付与し、そのワーキングカウンタを見る方法が例示される。
ＥｔｈｅｒＣＡＴフレームのワーキングカウンタの値と、事前に設定した所定数が等しい場合に通信経路を正常と判定する。
図２６の構成の場合は、通信部１３５ａで受信したＥｔｈｅｒＣＡＴフレームのワーキングカウンタと制御用ネットワーク１２２ａのスレーブ数Ｎａが等しい場合に、制御用ネットワーク１２２ａの通信経路を正常と判定する。
また、通信部１３５ｃで受信したＥｔｈｅｒＣＡＴフレームのワーキングカウンタと制御用ネットワーク１２２ｂのスレーブ数Ｎｂが等しい場合に、制御用ネットワーク１２２ｂの通信経路を正常と判定する。
【０２１５】
＜第３実施形態の効果＞
以上の第３実施形態により、通信経路に異常が発生している場合に、冗長経路切替部２４０が図３３、図３４、図３５の構成をとることで、パケットはソフトウェア処理を介さずに冗長化通信制御部１０２内で折り返して通信部１３５ｂからパケットを送信することができる。これによって、制御用計算機１２０内では一定遅延でパケットを転送できる。
さらに通信経路の異常によって、通信経路を変更した場合でも、通信経路異常の発生箇所に依存せずに、変更後の通信遅延を容易に求めることができる。これによって、通信経路に異常が発生している場合においても時刻同期アルゴリズムを実行することができる。
さらに、通信部１３５を４つにすることにより、制御用ネットワーク１２２ａ、制御用ネットワーク１２２ｂのそれぞれで通信経路の異常が発生した場合でも、ＥｔｈｅｒＣＡＴによるリアルタイム通信を継続することができる。
以上の効果をまとめれば、本発明の第３実施形態により、冗長化によるリアルタイム通信の高信頼化を図ることができる。
【０２１６】
（第４実施形態）
次に、本発明に係る通信制御システムの第４実施形態について、図３７、図１〜図３を参照して説明する。
第４実施形態は、通信経路において、２ヵ所以上の断線（異常発生）が起きた場合を想定したものであり、この際の冗長経路切替部１３１の通信経路の接続状態の切り替え切り替えの基準や通信経路状態判定部１３２の判定手順に特徴がある。
なお、第４実施形態において使用する符号で、第１、第２、第３実施形態と同じ符号のものは、特に断りのない限り、第１、第２、第３実施形態で説明した機能や要素等と同一であることを意味する。
第４実施形態を適用した冗長化通信制御部１０２の機能構成を示す図は、図３と同様であり、また制御用計算機１２０のハードウェア構成は、図２と同様である。
重複する説明は省略する。
【０２１７】
第４実施形態では、前記したように２ヵ所以上の通信経路異常を想定する。
そのために、第１実施形態とは、リアルタイム通信を継続するか否かを判定することと、通信遅延の補正値の算出方法が異なる。
はじめに、リアルタイム通信を継続するかの判断について述べる。
通信経路が２ヵ所以上発生すれば、リングトポロジを構成して冗長な通信経路を用意しても、制御用計算機１２０（図１）と通信不可な制御対象１２１（図１）が発生する。したがって、２ヵ所以上の通信経路異常が発生した場合にリアルタイム通信を継続するかどうかを判断する必要がある。
【０２１８】
判断条件として、正常に通信可能なスレーブ数、あるいは通信接続できない場合でもＥｔｈｅｒＣＡＴ通信を継続可能とするスレーブの識別子等が例としてあげられる。これらの条件は、ＣＰＵ１０１（図２）上で動作するプログラムによって、動作管理部１３８（図３）に対して設定される。
２ヵ所以上、通信経路異常が発生してもリアルタイム通信を継続する場合、制御用計算機１２０と通信可能な制御対象１２１を時刻同期させることが第４実施形態の特徴であり、また目的である。
通信経路異常をはさむスレーブ間の通信遅延は変化するため、これを補正する必要がある。遅延算出の方法は、第１実施形態と同様に、通信経路が正常時の主ポートと冗長ポートの受信時刻の差分から、通信不可なスレーブ数分の通信遅延を減じることである。
【０２１９】
＜異常発生箇所の取得方法＞
第４実施形態における異常発生箇所の取得方法と、制御用計算機１２０と通信不可な制御対象１２１の数を求める方法を、図３７を参照して説明する。
図３７は、制御用計算機（マスタ）１２０における冗長経路切替部１３１を介して主ポートの通信部１３５ａと冗長ポートの通信部１３５ｂから、５つの制御対象１２１ａ〜１２１ｅに通信パケットを送っているが、通信経路において２箇所に経路異常（２１０ａ、２１０ｂ）が発生したときの状態を示す図である。
送信するＥｔｈｅｒＣＡＴフレームに全てのスレーブが処理すべきレジスタに対するＢＲＤコマンドをＥｔｈｅｒＣＡＴフレームに付与する。
１箇所以上の通信経路で異常が発生した場合は、通信部１３５ｂでパケットを受信する前に通信部１３５ａでパケットを受信する。
【０２２０】
この受信の順番をもって通信経路の異常発生を検知し、通信部１３５ａで受信した前記のＢＲＤコマンドのワーキングカウンタを見る。
このワーキングカウンタの値Ｗａは、通信部１３５ａに最も近い経路異常２１０ａまでのスレーブの数Ｎａを反映する。
図３７の場合では、制御対象１２１ａと制御対象１２１ｂとが対象となるので、ワーキングカウンタは２である。したがって、このワーキングカウンタの示した２の値（Ｗａ＝２）で、通信部１３５ａから通信経路１２２を辿ることによって、経路異常２１０ａの発生箇所を制御対象１２１ｂと制御対象１２１ｃ間の通信経路上と判定する。
【０２２１】
次に通信部１３５ａで受信したパケットは、冗長経路切替部１３１によって通信部１３５ｂへ折り返し、送信する。このパケットは再び通信部１３５ｂで受信する。
このときにＢＲＤコマンドのワーキングカウンタの値Ｗｂが、事前に設定したスレーブ数Ｎと等しければ、通信経路異常の発生箇所は１箇所と判定することができる。もし、ＷｂがＮよりも小さければ通信経路異常の発生箇所は少なくとも２箇所と判定する。
図３７の場合では、Ｗｂは３となり、ＷｂとＷａの差分が、通信部１３５ｂから、通信部１３５ｂに最も近い経路異常２１０ｂまでのスレーブの数Ｎｂを反映する。
図３７の場合では、３−２＝１である。したがって、経路異常２１０ｂの発生箇所を制御対象１２１ｅと制御対象１２１ｄ間の通信経路上と判定する。
スレーブ数Ｎから、ワーキングカウンタの値Ｗｂを引けば、制御用計算機１２０と通信不可な制御対象１２１の数Ｎｎｃを求めることができる。
図３７では、５−３＝２である。したがってＮｎｃ＝２と判定する。
【０２２２】
また、図３７では、制御対象１２１ｃ、制御対象１２１ｄが通信不可であるため、制御対象１２１ｂと制御対象１２１ｅ間の通信遅延を求めて、制御対象１２１ｅの遅延レジスタの値を補正する。
以下、この補正の仕方を、図３７を例として説明する。
【０２２３】
通信経路異常発生前の通信遅延ｔｄｉｆｆＢＥは、次式で求める。
ｔｄｉｆｆＢＥ ＝ Ｓystem delayＥ − Ｓystem delayＢ    ・・・（式２０）
通信経路異常発生後の通信遅延ｔｄｉｆｆＢＥ２は、式７の差分Ｄと、制御用計算機１２０と通信不可な制御対象１２１の数Ｎｎｃをもとに、式９、式１０、式１２、式１３と同様に、下記のいずれかの式で求めることができる。
まず、Σｄｉを式２１で定義して、
【数１】
0005891086.tif 000002
通信遅延ｔｄｉｆｆＢＥ２を次の各式のように定める。
ｔｄｉｆｆＢＥ２ ＝ Ｄ − Σｄｉ              ・・・（式２２）
ｔｄｉｆｆＢＥ２ ＝ Ｄ − Σｄｉ − ｄ        ・・・（式２３）
ｔｄｉｆｆＢＥ２ ＝ Ｄ − Σｄｉ − ｅ        ・・・（式２４）
ｔｄｉｆｆＢＥ２ ＝ Ｄ − Σｄｉ − ｄ−ｅ    ・・・（式２５）
【０２２４】
ここで、式２１におけるｄｉは、制御用計算機１２０と通信不可なスレーブｉにおける、ＥＰＵ１６０を経由しないスレーブＩＣ１５１内部の経路の通信遅延である。ｄｉは、事前に求めておく必要がある。
これは、システム稼働前に計測してもよいし、通信経路が正常な時に実行する時刻同期手順の実行時に算出することができる。制御対象１２１を構成するスレーブＩＣ１５１の種類を同じにすれば、１つのスレーブに関して、ｄｉを算出すれば、制御対象１２１の違いによらず、同じ値を用いることができる。制御対象１２１間の通信ケーブルの種類や長さを同じにすれば、さらに精度を高めることができる。
【０２２５】
通信遅延の変更分ｄｉｆｆは次式で算出できる。
ｄｉｆｆ ＝ ｔｄｉｆｆＢＥ２ − ｔｄｉｆｆＢＥ    ・・・（式２６）
したがって、式１５により、通信経路異常の発生箇所以降のスレーブの遅延レジスタを更新することができる。
【０２２６】
＜３箇所以上の通信経路の異常に関して＞
なお、第４実施形態では通信経路異常の発生箇所が少なくとも２箇所あることはわかるが、正確な通信経路異常の発生箇所の数はわからない。しかしながら、ＥｔｈｅｒＣＡＴ通信の継続が可能かどうかは、ＥｔｈｅｒＣＡＴスレーブと通信可能かどうかで判定するため、発生箇所の正確な数は必要ではない。
また、通信経路異常の発生箇所が変化したとしても、通信不可な経路上で発生する場合があるため、時刻の再補正を必ずしも実行する必要はないが、制御用計算機１２０が通信不可能なスレーブ数が変化した場合は、通信遅延が変化するため、時刻の再補正が必要である。
【０２２７】
＜第４実施形態の効果＞
以上、第４実施形態によって、通信経路に異常が発生している場合に、冗長経路切替部１３１が図５の構成をとることで、パケットはソフトウェア処理を介さずに冗長化通信制御部１０２内で折り返して通信部１３５ｂからパケットを送信することができる。これによって、制御用計算機１２０内では一定遅延でパケットを転送できる。
さらに通信経路の異常によって、通信経路を変更した場合でも、通信経路異常の発生箇所に依存せずに、変更後の通信遅延を容易に求めることができる。これにより、通信経路に異常が発生している場合においても時刻同期アルゴリズムを実行することができる。
さらに、第１実施形態と比較して、通信経路異常が２箇所以上発生した場合でも、ＥｔｈｅｒＣＡＴ通信を継続できるような条件下においては、システムを継続できる。
また、制御用計算機１２０と通信可能な制御対象１２１においては、通信経路に異常が発生している場合においても時刻同期アルゴリズムを実行することができる。
よって、第４実施形態によって、冗長化によるリアルタイム通信の高信頼化を図ることができる。
【０２２８】
（第５実施形態）
次に、本発明に係る通信制御システムの第５実施形態について図３８〜図４０を参照して説明する。
図３８は、第５実施形態を適用した中継装置２５０を用いて構成するシステムの例を示す図である。
図３８において、制御用計算機１２０は、制御用ネットワーク１２２ｃにおいて複数の制御対象１２１をライン状に接続して制御するとともに、冗長化中継ボックスである中継装置２５０に接続されている。
また、中継装置２５０からは、制御用ネットワーク１２２ｄにおいて複数の制御対象１２１をリング状に接続（リングネットワーク）して制御している。
【０２２９】
つまり、中継装置２５０は、制御用ネットワーク１２２（１２２ｃ、１２２ｄ）中にあって、制御用計算機１２０から送信されたパケットを、中継装置２５０以降の制御対象１２１へ中継、転送する。
すなわち、第５実施形態は、冗長化中継ボックスである中継装置２５０において、通信経路の冗長化と時刻同期を実現することを想定している。
また、図３８では、制御用ネットワーク１２２ｃをライントポロジとしているが、制御用ネットワーク１２２ｃをリングトポロジとし、ネットワークの途中に中継装置２５０を接続してもよい。
なお、第５実施形態において使用する符号で、第１〜第４実施形態と同じ符号のものは、特に断りのない限り、第１〜第４実施形態で説明した機能や要素等と同一であることを意味する。
【０２３０】
＜中継装置２５０のハードウェア構成＞
図３９は、第５実施形態を適用した中継装置２５０のハードウェア構成の一例を示す図である。
図３９の中継装置２５０のハードウェア構成は、図２で説明した第１実施形態における制御用計算機１２０のハードウェア構成と同じような構成であるが、ＰＨＹ１０３ａ〜ＰＨＹ１０３ｃであるようにＰＨＹ１０３が３つの構成となっている点が図２とは異なる。
図３９において、ＰＨＹ１０３ｃは、制御用ネットワーク１２２ｃ（図３８）と接続する。また、ＰＨＹ１０３ａ、ＰＨＹ１０３ｂは、制御用ネットワーク１２２ｄ（図３８）と接続する。
冗長化通信制御部１１１は、制御用ネットワーク１２２ｃを通じて、ＰＨＹ１０３ｃと通信するパケットを、ＰＨＹ１０３ａを通じて、制御用ネットワーク１２２ｄへ中継、転送する。
したがって、制御用ネットワークの中継装置の機能を果たすことが可能となる。
なお、図３９において、その他の構成要素が、図２の構成要素と重複する説明は省略する。
【０２３１】
＜冗長化通信制御部１１１の機能構成＞
次に、冗長化通信制御部１１１の機能構成について説明する。
図４０は、第５実施形態を適用した冗長化通信制御部１１１の機能構成を示すブロック図である。
第５実施形態における冗長化通信制御部１１１は、主ポートと冗長ポートによる組み合わせのポートを３ポートとしたものであって、通信部（１３５ａ〜１３５ｃ）を備えた構成となっている。つまり、第１実施形態の冗長化通信制御部１０２（図３、通信部（１３５ａ〜１３５ｂ））と比較して、通信部１３５ｃを追加した構成となっている。
なお、第３実施形態において使用する符号で、第１実施形態と同じ符号のものは、特に断りのない限り、第１実施形態で説明した機能や要素等と同一であることを意味する。重複する説明は省略する。
【０２３２】
また、制御用ネットワーク１２２ｃをリングネットワークとして構成する場合は、通信部１３５が、例えば通信部１３５ｄ（図示せず）として、さらに追加される。
第５実施形態を適用した冗長化通信制御部１１１による動作手順は、図９で示した動作手順と同様である。
なお、図３８において、中継装置２５０は、制御用計算機１２０と同様に、中継装置２５０自身が時刻同期を実行してもよいし、通信経路が正常時の受信部１３７ａ（図４０）、受信部１３７ｂ（図４０）の受信時刻を記録して保持してもよい。
【０２３３】
あるいは、受信時刻の差分を計算して保持してもよいし、複数回、差分を計算して、最小値あるいは最大値を用いてもよいし、平均値や統計処理を施した数値を用いてもよい。
これらの記録した値を所定のアドレスにおいて提示し、制御用計算機１２０等から取得可能としてもよい。
同様に、中継装置２５０が通信経路の異常の発生箇所を特定し、所定のアドレスにおいて提示し、制御用計算機１２０等から取得可能としてもよい。制御用計算機１２０は、中継装置２５０が提示する前記の情報を用いて、制御用ネットワーク１２２ｄのスレーブ間の通信遅延を容易に補正することができる。
【０２３４】
また、制御用ネットワーク１２２ｄに通信経路異常が発生した場合において、通信遅延の補正がなされるまでの間、制御用計算機１２０からの時刻同期のパケットを無効化してもよい。
具体的には、制御用ネットワーク１２２ｃから受信したパケットを解析し、時刻同期実行後の定常状態で送信されるパケット（例えば、ＡＲＭＷコマンド等）を識別すれば、制御用ネットワーク１２２ｄに送信する際に除去し、再度パケットを受信した際に、除去した部分を付加して制御用ネットワーク１２２ｃに送信することが例示される。
あるいは、制御対象１２１に向けて、中継装置２５０が算出した補正遅延や通信経路異常の発生の有無や通信経路異常の発生箇所を通知してもよい。
【０２３５】
＜第５実施形態の効果＞
以上の第５実施形態により、通信経路に異常が発生している場合に、冗長経路切替部１３１が図５の構成をとることで、パケットはソフトウェア処理を介さずに冗長化通信制御部１０２内で折り返して通信部１３５ｂからパケットを送信することができる。これにより、制御用計算機１２０内では一定遅延でパケットを転送できる。
さらに通信経路の異常によって、通信経路を変更した場合でも、通信経路異常の発生箇所に依存せずに、変更後の通信遅延を容易に求めることができる。これにより、通信経路に異常が発生している場合においても時刻同期アルゴリズムを実行することができる。
さらに、ネットワークの特定の部分のみを冗長化して高信頼化しながら、通信経路の異常が発生しても、時刻同期精度を維持することができる。
また、中継装置２５０が補正遅延を算出するために必要な情報を算出して提示することで、制御用計算機１２０は、容易に制御用ネットワーク１２２ｄの通信経路の異常発生時にも、時刻を同期させることができる。
【０２３６】
（その他の実施形態）
以上、本発明の実施形態について図面を参照して詳述したが、本発明はこれら実施形態およびその変形に限定されるものではなく、本発明の要旨を逸脱しない範囲の設計変更等があってもよく、以下にその例をあげる。
【０２３７】
《制御対象１２１のハードウェア構成》
第１実施形態において、制御対象１２１（図１）のハードウェア構成（通信ハードウェア１５０）として、図６のＣＰＵ１０１を備えた構成を説明したが、制御対象１２１のハードウェア構成は、図６の構成に限定されない。
例えば、ＣＰＵ１０１を有せず、スレーブＩＣ１５１（図６）から直接、周辺デバイスに接続する構成であってもよい。
図６においては、ライントポロジを構成するため、通信機能であるＰＨＹ１０３を２つ有しているが、終端デバイスとして構成する場合は、ＰＨＹ１０３は１つでもよい。
また、パケットを周回させることができれば、ＰＨＹ１０３は、３つ以上であってもよい。なお、図７のスレーブＩＣは、４つのＰＨＹ１０３と接続可能な構成を示している。
【０２３８】
《冗長化通信制御部１０２のパケットを識別する構成》
図１０に示した冗長化通信制御部１０２（図２、図３）は、冗長ポートへ転送したパケットを識別する構成として説明した。しかしながら、冗長ポートへ転送したパケットと、冗長ポートで受信して冗長ポートから折り返して送信するパケットを区別できれば所望の機能を果たすことは可能である。
したがって、冗長ポートで受信して冗長ポートから折り返して送信するパケットを識別できるように構成してもよい。
【０２３９】
《時刻管理部２３０の割込み確認方法》
図２５では、割込み生成可能なタイマ２３２について説明したが、割込みによる時刻管理部２３０への通知ではなく、時刻管理部２３０が定期的にタイマ２３２の値を取得して、所定期間が経過していないかを確認する方法でもよい。
【０２４０】
《所定値Ｔｈ以下の判定方法》
図２５のフローチャートのステップ０７４と、図２６のステップＳ１０４においては、ｔ１と周期Ｐｉｎｔの和と、ｔ２の差分の絶対値が所定値Ｔｈ以下（以内）かどうか、（｜（ｔ１＋Ｐｉｎｔ）―ｔ２｜＜Ｔｈ）を判定する方法について説明したが、この判定方法には限らない。
例えば、時刻同期割込み２３１の直前にタイマ割込みが発生する場合も考えられ、その場合を考慮して、周期Ｐｉｎｔを足さずに、（｜（ｔ１―ｔ２）｜＜Ｔｈ）で判定してもよい。
【０２４１】
《通信部１３５の個数と構成》
第３実施形態においては、通信部１３５を４つとしたが、より多くの通信部１３５を用いた場合でも同様の効果を得ることができる。また、通信部１３５の数が奇数の場合は、１つの通信部１３５に接続されるネットワークはライントポロジとなり、残りの偶数の通信部１３５においては、２つの通信部１３５ごとにリングネットワークを構成し、本発明の効果を得ることができる。
【符号の説明】
【０２４２】
１０１  ＣＰＵ
１０２、１１１  冗長化通信制御部
１０３  ＰＨＹ（送受信機ＩＣ）
１０４、１１０、１６３  バス
１０８  メモリ
１０９  不揮発性記憶媒体
１２０  制御用計算機（通信制御装置）
１２１、１２１ａ〜１２１ｅ  スレーブＩＣ、制御対象（被制御装置）
１２２、１２２ａ〜１２２ｄ  制御用ネットワーク（ネットワーク）
１３０  バス接続部
１３１、２４０  冗長経路切替部
１３２  通信経路状態判定部
１３３  通信経路異常判定部
１３４  通信経路正常判定部
１３５ａ  通信部（第一の通信部）、主ポート
１３５ｂ  通信部（第二の通信部）、冗長ポート
１３５、１３５ｃ〜１３５ｄ  通信部
１３６、１３６ａ〜１３６ｄ  送信部
１３７、１３７ａ〜１３７ｄ  受信部
１３８  動作管理部
１３９  パケット生成部
１４０  パケットフィルタ部
１４１  通信遅延記憶部
１４２  計時部
１５０  通信ハードウェア
１５１、１５１ａ〜１５１ｃ  スレーブＩＣ
１６０  ＥＰＵ、ＥｔｈｅｒＣＡＴ Ｐｒｏｃｅｓｓｏｒ Ｕｎｉｔ、
１６１  自動転送部
１６２  ループバック機能部
１７０  Ｅｔｈｅｒｎｅｔフレーム
１７１  Ｅｔｈｅｒｎｅｔヘッダ
１７２  データ領域
１７３  Ｆｒａｍｅ Ｃｈｅｃｋ Ｓｅｑｕｅｎｃｅ、
１７４  ＥｔｈｅｒＣＡＴヘッダ
１７５  テレグラム
１７６  テレグラムヘッダ
１７７  テレグラムデータ
１７８  ワーキングカウンタ、ＷＫＣ
２１０ａ、２１０ｂ、２１０、１２２Ｘ  通信経路異常
２２０  コマンド
２２１  識別子
２２２  アドレス
２２３  データサイズ
２２４  予約
２２５  Ｃ
２２６  Ｍ
２２７  ＩＲＱ
１８０、１８２、１８４、２００、２０２、２０４、２０６  Ｒｘ
１８１、１８３、１８５、２０１、２０３、２０５、２０７  Ｔｘ
１９０、１９１  受信処理
２３０  時刻管理部
２３１  時刻同期割込み
２３２  タイマ
２３３  アプリケーション
２５０  中継装置
【図１】
0005891086.tif 000003
【図２】
0005891086.tif 000004
【図３】
0005891086.tif 000005
【図４】
0005891086.tif 000006
【図５】
0005891086.tif 000007
【図６】
0005891086.tif 000008
【図７】
0005891086.tif 000009
【図８】
0005891086.tif 000010
【図９】
0005891086.tif 000011
【図１０】
0005891086.tif 000012
【図１１Ａ】
0005891086.tif 000013
【図１１Ｂ】
0005891086.tif 000014
【図１２】
0005891086.tif 000015
【図１３Ａ】
0005891086.tif 000016
【図１３Ｂ】
0005891086.tif 000017
【図１４】
0005891086.tif 000018
【図１５】
0005891086.tif 000019
【図１６】
0005891086.tif 000020
【図１７】
0005891086.tif 000021
【図１８】
0005891086.tif 000022
【図１９】
0005891086.tif 000023
【図２０】
0005891086.tif 000024
【図２１】
0005891086.tif 000025
【図２２】
0005891086.tif 000026
【図２３】
0005891086.tif 000027
【図２４】
0005891086.tif 000028
【図２５】
0005891086.tif 000029
【図２６】
0005891086.tif 000030
【図２７】
0005891086.tif 000031
【図２８】
0005891086.tif 000032
【図２９】
0005891086.tif 000033
【図３０】
0005891086.tif 000034
【図３１】
0005891086.tif 000035
【図３２】
0005891086.tif 000036
【図３３】
0005891086.tif 000037
【図３４】
0005891086.tif 000038
【図３５】
0005891086.tif 000039
【図３６】
0005891086.tif 000040
【図３７】
0005891086.tif 000041
【図３８】
0005891086.tif 000042
【図３９】
0005891086.tif 000043
【図４０】
0005891086.tif 000044
【図４１】
0005891086.tif 000045
【図４２】
0005891086.tif 000046
【図４３】
0005891086.tif 000047
【図４４】
0005891086.tif 000048