図1は、本発明が適用される産業用コントローラの一種であるPAC1の一形態を示している。このPAC1は、各種の機能を実現するための複数のユニットを連結し、互いに内部バスにより接続して構成される。この複数のユニットは、少なくとも1つのCPUユニット2を有する。更に、本実施形態では、PAC1は、電源ユニット3,モータユニット4,カウンタユニット5,画像ユニット6,通信ユニット7,I/Oユニット8を備えている。もちろん、PAC1を構成するユニットは、上記のものに限ることはなく、実行したい制御等に応じて必要なものを適宜取捨選択して構成する。例えば、PACは、「CPUユニット+モータユニット+カウンタユニット」,「CPUユニット+I/Oユニット」という構成も有効である。なお、本実施形態では、PAC1を例にして説明するが、PLCについても同様である。
CPUユニット2は、制御対象をどのように動作させるかという制御内容に応じてユーザが組んだ制御プログラムに基づく演算を繰返し実行する。また、CPUユニット2や、その他のユニットに対して各種の詳細設定を行なう場合、図1に示すように、ユーザは、CPUユニット2にパソコンを接続するとともに、そのパソコンにインストールされたアプリケーションプログラムである設定ツールを起動し、その設定ツールを用いて詳細設定する。電源ユニット3は、商用電力・交流電圧を各ユニットに応じた直流電圧に変換し、連結された各ユニットに電力を供給する。なお、各ユニットに対して直接直流電圧を供給することで、電源ユニットを接続しないPACの構成もある。モータユニット4は、1台以上のサーボドライブ(サーボモータとその制御装置)を接続でき、モータ(図示せず)の制御を行なう。カウンタユニット5は、高速カウンタ、または制御対象の位置の変化に応じてパルス信号を出力する1台以上のロータリーエンコーダを接続し、回転量や移動量などをパルス信号に基づいて計測する。画像ユニット6は、1台以上のカメラを接続し、カメラからの撮像画像に基づいて移動量や部品個数などを計測する。通信ユニット7は、ネットワークに接続された他の外部装置とデータの送受を行なう。I/Oユニット8は、センサやスイッチなどの入力機器を接続してそれらのオン・オフ信号を入力信号として取り込む入力ユニットやアクチュエータやリレーなどの出力機器を接続してそれらに対して出力信号を送り出す出力ユニット等である。
これらの各ユニットは、ユニットの側面に設けられたコネクタ同士を接続することで、電気的に接続される。つまり各ユニットに内部バスが貫通し、パラレル通信や高速シリアル通信をするための内部バス線等を用いて接続され、その内部バスによりユニット間で互いにデータの送受が行なわれる。なお、ユニットの側面に代えてユニットの背面に設けられたコネクタ同士をベースユニットと呼ばれるベース基板のバス線を介して接続することで電気的に接続する構造でもよい。
PAC1の機能の一つである高速性を実現するため、所定のユニットには、計時機能としてμs単位よりも桁が小さく、数百nsの単位、数十nsの単位、または数nsの単位(以下ns単位という)の時計1bが実装される(図2参照)。但し、PAC1を構成する全てのユニットに、当該ns単位の時計1bが実装されるわけではない。すなわち、例えば画像ユニット6は、カメラのシャッタースピードが主にms単位であるため、ns単位の時間同期の必要性は少ない。同様に、I/Oユニット8に関しても、時間同期の機能を組み込んだユニット(時間同期に関してスレーブとなる)と、時間同期の機能を組み込んでいない低速安価なI/Oユニットが存在し得る。
PAC1の機能の1つである高精度を担保するためには、各ユニットに実装されるns単位の計時機能を持つ内部時計が、基準の時計、つまりマスタの時計と正確に時間同期する必要がある。そこで、図2に示すように、本実施形態では、バスまたは高速シリアル通信線等の通信媒体1aに接続される、最低1台のマスタと、最低1台のスレーブから構成され、マスタとスレーブは各々ns単位といった微小時間の計時機能(ns単位の時計1b)を持ち、相互の時計を時間同期させるシステム構成を採る。スレーブが複数存在する場合には、個々のスレーブがマスタの時計1bに同期をとることで、PAC1を構成するns単位の時計1bが実装されるユニット間で高精度に同期を採ることができる。具体的には、マスタは、高機能な1つのCPUユニット2により実現され、残りのユニットがスレーブとなる。
また、マスタ,スレーブに内蔵される時計1bは、内蔵する水晶発振器に基づくクロックパルスのパルス数を計数することで、時刻を求める。つまり、クロックパルスの周期から1パルスあたりの時間(基準時間)がわかるので、パルス数に基準時間を乗算することで、その計数していた期間に経過した時間を求めることができる。よって、電源投入時からの総パルス数を求めることで、電源投入時からの経過時間を算出することができる。そして、あるパルス数のときの時刻(何時何分といった基準時刻)が決まれば、任意の時点でのパルス数と基準時刻の時のパルス数の差分から、当該任意の時点の時刻が決定される。時計1bのよる計時は、上記のように基準時刻とパルス数に基づいて時刻を決定することで行なう。
そこで、マスタ,スレーブの個々の時計1bにおける1パルスあたりの時間(基準時間)が等しい(つまり時の進みが同じの意味)と、ある時点での時刻を一致させることで個々の時計1bで計時される時間が同じ(つまり時刻が同じの意味、換言すれば絶対的な時間が同じの意味)になり、絶対的な時間が合った時間同期が行なわれる。そして、水晶発振器に基づくクロックパルスは、水晶発振器自体のクロック信号ではなく、クロック信号に対してPLL等のハードウェアからなる調整手段で調整されたものであるので、1パルスあたりの時間を合わせるのは、この調整手段で行なうことができる。
なお、上述したように、PAC1を構成するユニットの中には、微小時間の計時機能に対応しないものもあり、係るユニットは本実施形態における時間同期に関与しないユニットとなり、時間同期に関してはマスタにもスレーブにもならない。
図3は、CPUユニット2の内部構成を示している。CPUユニット2は、MPU2aと、周辺コントローラ2bと、メモリ2cと、時計2d(図2におけるCPUユニット2に実装された時計1bに対応)と、第1通信インタフェース2eと、第2通信インタフェース2fと、を備えている。
MPU2aは、パーソナルコンピュータ等にも実装される高性能なもので、所定の演算処理を実行する。このMPU2aは、実行周期ごとに分けた複数のタスクを、定周期間隔でスキャンし動作する。すなわち、MPU2aが実行すべきタスクは、たとえば1ms周期で実行すべきタスクもあれば、2ms周期で実行すべきタスクもある。もちろん、それ以外にも、4ms,8ms,……というような様々な周期のタスクが存在することがある。そこで、MPU2aは、マルチタスク処理により実行すべき周期のタスクを演算処理する。なお、各タスクは、例えば、ラダー言語などで書かれたプログラムを実行するものである。従来のPLCの場合、上記の各タスクの実行周期という概念はなく、それら各タスクに対応するプログラムをまとめて記述した一連の制御プログラムを先頭から順に実行し、更に、I/Oリフレッシュや周辺処理を含む1つのサイクルをサイクリックに実行するようにしていたが、本実施形態のPACは、上記のようにマルチタスク処理(時分割処理)を行なう点で相違する。但し、PACは、必ずしもマルチタスク処理をするものではなく、従来のようにサイクリックに処理をするものでも良い。
周辺コントローラ2bは、チップセットとも称されるもので、メモリ2cや各種インタフェース2e,2f等とMPU2aとの間を取り持ち、調停やタイミング調整を行なう。これにより、MPU2aは、演算に注力することができる。メモリ2cは、例えばMPU2aが演算処理をする際にワークメモリとして使用される。第1通信インタフェース2eは、他のスレーブと通信をするもので、PAC1の内部に実装される通信媒体(内部バス,高速シリアル通信線)1aを介して通信をするためのインタフェースである。第2通信インタフェース2fは、ツール装置を構成するパーソナルコンピュータと接続を図るためのインタフェースである。
時計2dは、ns単位で計時可能な機能を持つ。この時計2dは、MPU2aからも読み書きが可能となる。また、図示した例では、時計2dと第1通信インタフェース2eとが別々に構成されているが、第1通信インタフェース2eが精度の高い時間情報を活用するためには、ns単位の時計2dと第1通信インタフェース2eとの2つの機能を一つのIC/ASICに組み込み結合させるようにしてもよい。そのようにすると、通信インタフェースの機能は、MPU経由で読み書きするのに比べ高精度な時間情報を活用することができる。
図4は、スレーブの一例であるモータユニット4の内部構成を示している。このモータユニット4は、MPU4aと、メモリ4cと、時計4d(図2におけるモータユニット4に実装された時計1bに対応)と、第1通信インタフェース4eと、第2通信インタフェース4fと、を備えている。なお、以下の説明では、モータユニット4の例をとって説明しているが、スレーブを構成する他の機能を実現するためのユニットにおいても同様の構成(時間同期機能)を採ることで、時計合わせができるのはもちろんである。
MPU4aは、所定の演算処理を実行するもので、CPUユニット2のMPU2aと比べて機能が限定されており、演算性能もCPUユニット2のMPU2aほどは要求されないことが多いので、例えば、16bitマイコンや32bitマイコン等により実現することができる。よって、CPUユニット2のように周辺コントローラを設けることなく、MPU4aが直接各種インタフェースを管理する構成を採る。
メモリ4cは、例えばMPU4aが演算処理をする際にワークメモリとして使用される。第1通信インタフェース4eは、マスタと通信をするもので、PAC1の内部に実装される通信媒体(内部バス,高速シリアル通信線)1aを介して通信をするためのインタフェースである。第2通信インタフェース4fは、そのユニットに接続される外部機器との通信インタフェースであり、モータユニット4の場合には、サーボドライブと通信するためのものである。図示省略するが、カウンタユニットでは、この部分は高速カウンタとの通信インタフェースとなるし、通信ユニット7であれは、接続されるネットワークに対応する通信インタフェースとなるし、画像ユニットであれば、この第2通信インタフェース部分は、カメラとの通信インタフェースとなる。
時計4dは、ns単位で計時可能な機能を持つ。この時計4dは、MPU4aからも読み書きが可能となる。また、CPUユニット2の場合と同様に、時計4dと第1通信インタフェース4eとの2つの機能を一つのIC/ASICに組み込み密結合させるようにしてもよい。
図5は、モータユニット4の機能を示すフローチャートである。MPU4aは、第1通信インタフェース4eを介してマスタ(CPUユニット2)から制御値、制御指定時間を取得する(S1)。制御値は、例えばサーボモータの移動量(回転角度)を規定するもので、次のサイクルで出力するサーボドライブのパルス数等である。制御指定時間は、制御値を出力する時間情報である。この時間情報は、例えば、時刻であったり、所定時間経過後であったりする。
MPU4aは、これらの制御値,制御指定時間を取得すると、時計4dを監視し制御指定時間に到達するのを待つ(S2)。そして、制御指定時間に到達したならば(S2がYes)、MPU4aは取得した制御値を、第1通信インタフェース4eを介してサーボドライブに送出し(S3)、サーボドライブからのACKを受領した(S4)ならば、処理ステップS1に戻り、次の指示を待つ。このように、モータユニット4は、CPUユニット2の指示により、サーボドライブを制御するものである。
本実施形態では、ns単位の時計4dを搭載すると共に、この時計4dとCPUユニット2の時計2dとを正確に合わせる機能を備えている。その結果、仮に、CPUユニット2に複数のモータユニット4が接続されていた場合、各モータユニット4の時計4dが正確に合っているので、同一のタイミングで制御値をそれぞれのモータユニット4に接続されたサーボドライブに送出することができる。また、カウンタユニット5とモータユニット4との時間が同期し定周期ごとに制御を行うシステムでは、モータユニット4で前の一周期の間に回転した量を正確にカウンタユニット5で計測することができる。
次に、時計を合わせる機能(時間同期機能)について説明する。モータユニット4を始め、各スレーブを構成するユニットには、図6に示す時間同期機能を備える。この時間同期機能は、一部又は全部をアプリケーションプログラムとして実現することができ、そのプログラムはMPU4にインストールされ実行される。もちろん、時間同期機能は、専用のIC等により実現することもできる。
図6に示すように、この時間同期機能は、時間差認識部20と、時間差調整量算出部21と、周波数・波数調整部22と、を備えている。時間差認識部20は、他機(ここでは、マスタであるCPUユニット2)の時計2dと、自己の時計4dとの時間差を求めるもので、IEEE1588等により規格化された技術により実現できる。
時間差調整量算出部21は、時間差認識部20で求めたマスタの時計との時間差に基づき、スレーブの時計をマスタの時計に滑らかに漸近させていくための次のサイクルでの調整量などを算出するものである。この時間差調整量算出部21の具体的なアルゴリズムは、後述する。
周波数・波数調整部22は、時間差調整量算出部21で求めた調整量に従い、自己の時計4eの動作を調整するものである。すなわち、時計を駆動するクロック信号は、水晶発振器の発振周波数等により規定され、微視的に比較すると、それぞれ固有のばらつきを持つ。そこで、時計を駆動しているクロック信号に対し、PLLや周波数スケーリング等のハードウェアからなる調整手段を用いて時間差調整量算出部21で求めた調整量になるように調整処理を行なう。なお、係る、指定された調整量になるように調整・修正する調整手段としては、たとえば、特許3757167号に開示された周波数・位相を調整するPLLや、特許3553020号に開示された波数を調整する周波数スケーリング等の技術を用いて実現できる。
この時計あわせを行なうための時間同期機能は、図5に示すフローチャートを実行する本来持つ外部機器に対する制御機能とは別に独立して動作する。つまり、それぞれの機能は、マスタからの指示に従い動作する。そして、時間同期機能の概要は、以下の通りである。
まず、本実施形態の前提として、マスタの時計は、周期Tは不変で規則正しく計時するものとし、またはマスタの時計の周期が仮に極微小に変動したとしてもマスタの時計を基準と定めることとし、スレーブがマスタの時計に合わせるものとした。そして、時間同期機能は、できるだけ少ない試行回数で、マスタとスレーブの時間差をゼロに近づけるようにすることを目的とし、マスタから一定の間隔で発行される時間差測定指示に基づき、スレーブの時間差認識部20がそのときのマスタとの時間差を求め、求めた時間差に基づき時間差調整量算出部21が次のサイクルでの調整量を求め、求めた調整量に従い周波数・波数調整部22にて実際にスレーブの時計の調整を行なう。
図7(a)は、時間同期機能の前提となる概念を示している。図において、横軸は、マスタの時計の時間経過を示し、上述したように不変で規則正しく計時される。これに対し、折れ線で示すのが、スレーブ側の時計の計時状態であり、横軸よりも上側はスレーブの時計がマスタの時間よりも進んでいる状態を示し、横軸よりも下側はスレーブの時計がマスタの時間よりも遅れている状態を示す。そして、横軸から離れるほど、マスタとスレーブのそれぞれの時計のズレ量が大きいことを示す。なお、図ではスレーブの時計の状態を連続した折れ線で示しているが、時間同期機能は、時々刻々と変化する自己の時計のズレを直接認識しているのではなく、マスタからの指示に従い離間的に測定する時間差に基づきその間を推定(直線で結ぶ)するようにしている。
図7(a)に示すように、時間同期機能は、まず補正を行なっていないフリーランの状態で、マスタとの時間差を2回計測(t1,t2)し、時間差の変化率・傾き(=バイアス)αを測定する。なお、t1の時にマスタの時計とスレーブの時計の時間(時刻)があっていると仮定すると、t2の時に時間差を計測することで傾きを求めることはできる。時間同期機能は、次のステップ(区間t2〜t3)における調整量として、求めた傾きの「マイナス2倍」(=−2α)に設定する。これにより、前回のステップ(区間t1〜t2)で生じた差を打ち消し、誤差をゼロに近づける(粗調整フェーズ)。その後、それ以降の区間の調整量として、区間t1〜t2までの傾きの「マイナス1倍」(α−α=0)に設定し、誤差ゼロに近づいた状態を維持する(維持フェーズ)。なお、時間差を測定するタイミング(t1,t2,t3)は、マスタが決める周期Tで、十分精度良く定期的である。
換言すると、調整開始時のt1から、次に時間差の測定指示がきたt2までの区間で生じた時間差がAとすると、t2〜t3の区間は、t1〜t2の区間の傾き(A/(t2−t1))の「マイナス2倍」を適用して補正する。つまり、t2のときに、マスタの周期をT(=t2−t1)とすると、次の期間のスレーブの周期が(T−2A)となるように制御する。そして、係るt2〜t3の区間で誤差をゼロに近づけて調整が完了すると、以降は、時の進みを両者であわせるため、以降のスレーブの周期は、T−Aになるように調整する。
このようにスレーブ側の時計の時間軸のズレが徐々に解消され、最終的にマスタ側の時計と時間合わせ(時間同期)が行なわれるので、調整作業中であってもスレーブの時間軸は連続して進む。よって、本実施形態のPACは、スレーブの時間軸上で設定された処理が飛ばされ、実行されないようなことが無く、正しく制御が行なわれる。
上記の時間あわせは、時間同期処理の開始時点(t1)におけるマスタとスレーブの時計の時間(時刻)が一致していることを前提とする。従って、係る一致させるためには、たとえば、マスタから各スレーブに対して一斉同報により、マスタの時計にあわせた現在時刻(タイムスタンプ)を送信し、それを受信したスレーブが内蔵する時計の時刻を受信した現在時刻に上書きすることで行える。係る処理は、たとえば、実際の制御を行なっている場合には、上書きにより各スレーブの内部時計の時刻が飛び、制御に影響を与えるので実行できないが、実際の制御開始前のトレーニング期間(準備期間)であれば問題がない。これにより、実際の制御開始前に、この上書きにより基準時刻を合わせて、その後、上記の手法で進み時間の調整あわせを行なうことで、各時計の時間あわせを行なうことができる。
上記のように、スレーブが受信したマスタのタイムスタンプをそのまま上書きした場合、少なくとも、伝搬遅延に応じた時間だけマスタとスレーブとの間で絶対時刻がずれることになり、同期制御を絶対時刻を指定して行なう場合には、当該伝搬遅延分だけずれて動作することになる。伝搬遅延自体は、非常に短時間ではあるが、nsオーダーのより高精度な時間制御を行なう場合に、影響を生じるおそれがある。もちろん、一定時間後というような相対的な同期制御を行なう場合には、時間合わせのときと、実際の制御指令を送信する際に同じように伝搬遅延を生じるとすると、ほぼ正確な制御を行なうことができるとも言える。
一方、マスタが送信するタイムスタンプに着目すると、同報メッセージを作成する際のタイムスタンプを、当該メッセージに格納するようにした場合、メッセージ作成から送信までのタイムラグにより、正確に送信した時刻ではないとともに、当該タイムラグは必ずしも一定になるとは限らない。そこで本実施形態では、送信するマスタのタイムスタンプ(現在時刻)として、例えば図20に示すように、まず、マスタが、スレーブに対して「Sync」メッセージを送信するとともに、この送信したときの自身のローカル・システム・クロック(時計)のタイムスタンプ(TS1)を記録する。これにより、マスタは、当該メッセージを送信した時刻を正確に記録することができる。スレーブは、このSyncメッセージを受信すると、その受信したときの自身のローカル・システム・クロック(時計)のタイムスタンプ(TS2)を記録する。
次に、マスタがスレーブに対して「Follow_up」メッセージを送信する。このメッセージの中には、先に Syncメッセージを送出したときのマスタのタイムスタンプ(TS1)が含まれる。スレーブは、これら2つのタイムスタンプTS1,TS2をもとに、マスタの時計の時刻とスレーブの時計の時刻との差分、つまり、オフセットOを求めることができる。よって、スレーブは、任意のタイミングで、現在の自己のタイムスタンプ(現在時刻)に、オフセット分だけ差分を採った値に書き換えることで、自己の時計の時刻をマスタの時計の時刻に合わせることができる。
このようにマスタとスレーブの時刻合わせが完了したならば、以下の手順で、伝搬時間を求めることができる。すなわち、スレーブがマスタに対して「Delay Request(Delay_Req)」メッセージを送信する。このDelay_Req メッセージの送出をトリガとして、スレーブは当該メッセージ送信時の自身の時計のタイムスタンプ(TS3)を記録する。マスタは、このDelay_Reqメッセージを受信したときの自身の時計のタイムスタンプ(TS4)をキャプチャする。
次いで、マスタは、スレーブに対して「Delay Response (Delay_Resp)」メッセージを返す。このメッセージの中には、先にマスタがdelay_Reqメッセージを受信した時のマスタのタイムスタンプ(TS4)が含まれる。スレーブはこれら2つのタイムスタンプTS3,TS4の差分を求め、マスタとスレーブのノード間の伝播遅延を算出することができる。なお、IEEE 1588プロトコルではネットワーク内の伝播遅延が対称であることを前提とする。
以上の4つの手順を踏むことで、スレーブはマスタとのクロック差分(オフセット)およびネットワーク伝播遅延という2つの情報を取得し、これによってマスタとの時間同期を行なうことができる。なお、時間同期の精度は、IEEE 1588メッセージの送受信の際にどれだけ正確にタイムスタンプを記録できるかに依存する。この点については、ファームウェアの割り込みやアプリケーション・レベルでのトリガを利用するよりも、物理層のレベルでハードウェア・ベースのトリガを利用する方が、精度が高くなる。物理層レベルのトリガを利用してタイムスタンプを記録することで、ナノ秒からサブマイクロ秒オーダーの精度で時間同期を行うことができる。
一方、上記のように、上書きに基づき時間あわせを完了した場合、運転開始当初は各スレーブとマスタの時計の時刻は一致しているため、同期制御等がns単位で精度良く行なうことができる。しかし、各スレーブの時計は、通常、水晶発振器の発振周波数を利用して計時が行なわれるが、その水晶発振器の発振周波数は、常に一定とは限らず、動作中に変動することがある。すると、計時の基となる水晶発振器の発振周波数が変化すると、当然のことながら、時間の進みが変化し、他のスレーブやマスタとの時計が示す時刻と同期がとれなくなる。そして、すでに、制御運転が開始されている場合、上述した初期あわせのように上書きにより時間あわせ制御の開始時点(t1)で調整対象のスレーブの時計の時刻をマスタに併せることはできない。従って、係る場合には、すでにマスタとスレーブの時計の時刻がずれていることを前提とし、係るズレ(オフセット)を加味して各時計の時間あわせを行なう必要がある。
そのため、時間合わせを行なうに際し、マスタとスレーブの時刻のズレ(オフセット)を求め、そのオフセット分も考慮して時間合わせを行なうとよい。すなわち、たとえば図7(b)に示すように、時間合わせ制御の開始点(t1)のときに、オフセットOを求めてレジスタに記憶する。次いで、調整開始時のt1から、次に時間差の測定指示がきたt2までの区間で生じた時間差Aを求め、t2〜t3の区間は、スレーブの周期が(T−2A−O)となるように制御する。そして、係るt2〜t3の区間で誤差をゼロに近づけて調整が完了すると、以降は、時の進みを両者であわせるため、以降のスレーブの周期は、T−Aになるように調整する。
ところで、上記の調整アルゴリズムを用いた場合、マスタとスレーブの時間差がたまたま小さいか、時間差認識部20の測定精度が十分に高い場合は、静定させるのは可能である。しかし、実際には、時計を合わせる間隔(s)と合わせる精度(100ns)は1千万倍のオーダーにも及ぶため、図7(a)に示す調整アルゴリズムでは、残差を取りきれず静定させられない場合がある。すなわち、MPUの性能から一度に演算処理できる桁数に限界があり、測定した時間差は、その測定値丁度の場合もあるが、通常は、有効桁数以下で測定結果から微小時間のズレがある。従って、仮に測定した時間差(それに基づく傾き)に測定誤差がない場合には、傾き(α)のマイナス2倍(−2α)で調整すると、t3の時には時間差が0になる。そして、有効桁数以下の測定結果に表れない時間差分があるため、t3の時に時間差が0にならず、また、維持フェーズにおいても徐々に時間差が開いていくおそれがある。特に、t2で測定した時間差が大きい場合には、一度に演算処理可能な桁数の関係から微小時間部分の時間差を十分に認識することができない。その結果、従来のμs程度の時計の場合には、係る有効桁数以下の微小時間のズレは時計合わせにさほど影響を与えないものの、本実施形態のようにns単位の時計の時間あわせでは、係る微小時間のズレが大きく影響を与えることになり、高精度な時計あわせができなくなるのである。以下、具体的な調整アルゴリズムを、制御開始前のトレーニング期間や、実際の運転中時それぞれの場合に分けて説明する。
まず、本実施形態では、図8に示すように、粗調整フェーズの後に精密調整フェーズを設け、2段階で調整を図るようにした。2段構成で調整を行なうので、1段で1万倍の誤差を補正できるとすると、2段で1万×1万=1億倍の誤差を効果的に補正できる。しかも、図示するように、5ステップで静定に至るので、早期に調整作業が終了する。さらに、調整量は、時間差の傾きを基準に「マイナス2倍」や、「マイナス1倍」等の演算処理により求めるので、演算の過程で乗除算を必要とせず、低機能のMPUでも実装可能と言うメリットを有する。すなわち、2倍は1回の加算か、1回の2進数1ビットシフトで実現可能であるし、3倍は2回の加算で実現可能であるためである。
2段階での調整の具体的なアルゴリズムは、以下の通りである。まず、図8(a)に基づいて、実際の制御運転開始前の初期設定あわせ時における調整アルゴリズムについて説明する。まず、粗調整フェーズについては、上述した図7(a)に示すものと同様である。調整開始時のt1において、時刻の上書き等によりマスタとスレーブの時刻を一致させる。これは、たとえば、t1の時点においてマスタから調整対象のスレーブに対して測定指示を送るに際し、マスタの時計の時刻情報をあわせて送る。これにともない、スレーブは、受信した時刻情報に従って自己の時計の時刻合わせを行ない、t1の時点でのマスタとスレーブの時刻を一致させることができる。
そして、係るt1から、次に時間差の測定指示がきたt2までの区間で生じた時間差がAとすると、その後全く補正をしないとすると、スレーブの時間は図中点線に示すように進む。本実施形態では、t2の時に、t1〜t2の区間の傾き(A/(t2−t1))の「マイナス2倍」を適用して補正するため、次のt2〜t3区間では、実線で示すようにそれまでの差を打ち消すように誤差ゼロに近づく。そして、次の時間差を測定するt3のときには、全く修正しない場合に比べて2A分だけ時間差が解消される。そして、そのときのマスタとスレーブの時計の時間差は、Bとする。この2回のステップにより粗調整フェーズは終了し、マスタとスレーブの時計の時間差Bは小さくなる。
次のステップ(区間t3〜t4)では、区間t1〜t2までの傾きの「マイナス1倍」に設定し、再度、傾きを精密に測定する。つまり、t4の時の時間差Cを測定し、t3の時の時間差Bとの差分(C−B)を周期(T:t4−t3)で除算して傾きを求める。このようにして求めた傾きから、次のステップ(区間t4〜t5)でぴったり誤差ゼロにするための傾きを計算し、当該次のステップで適用する。t3,t4において求めた時間差B,Cは、いずれも時間差の絶対値が小さくなっているので、t2の時に比べて精度良く時間差を求めることができ、精密調整が可能となる。なお、このぴったり誤差ゼロにするための傾きは、演算処理によって求めても良いし、予め用意したルックアップテーブルを用いて演算を実行することなく求めても良い。
その後、前2回のステップ(t3の時とt4の時)に計算した傾きを再調整し、t5以降の維持フェーズでは、残差を限りなくゼロに維持する。この5クロック目(t6)で4クロック目(t5)との差から「静定」していることが確認できる。
係る処理を実行するための具体的なアルゴリズムは、時間同期機能を構成する各処理部20〜22が、図9に示すフローチャートを実行することで行なう。すなわち、まず、時間差認識部20は、マスタから指示されたタイミングで時間差Aを測定する(S11)。この処理ステップS11は、図8(a)におけるt1〜t2の区間に対応する。時間差調整量算出部21は、時間差認識部20が測定した時間差Aを取得し、その時間差が基準値以内かを判断する(S12)。この基準値は、自己の時計をマスタに合わせるための補正が必要か否かを判定するもので、予め設定してある。基準値以内(S12でYes)の場合には、補正・調整作業は不要であるので、粗調整等することなくそのまま処理を終了する。
一方、時間差Aが基準値以上の場合(S12でNo)には、時間同期機能は、マスタの周期T(=t2−t1)が自機で周期T−2Aとなるように周波数・波数を調整する(S13)。つまり、時間差調整量算出部21は、処理ステップS11で求めた時間差から、その周期T(t1−t2の区間)の自機の時計の時間差の傾きを求め、その傾きの「マイナス2倍」を調整量として決定し、周波数・波数調整部22は、自機の時計の進みが、その「マイナス2倍」の傾きになるように調整する。この処理ステップS13は、図8(a)におけるt2〜t3の区間の調整処理に対応する。
時間差認識部20は、マスタから指示されたタイミング(周期T経過)で時間差Bを測定する(S14)。この処理ステップS14は、図8(a)におけるt3のタイミングで時間差を求めることに対応する。時間差調整量算出部21は、時間差認識部20が測定した時間差Bを取得し、その時間差が基準値以内か否かを判断する(S15)。基準値以内(S15でYes)の場合には、処理ステップS13の粗調整による補正処理よって時計あわせが成功したことを意味するので、以降、時間同期機能は、マスタの周期Tが自機で周期(T−A)となるように周波数・波数を調整する(S16)。つまり、時間差調整量算出部21は、処理ステップS11で求めた時間差から求めたその周期T(t1−t2の区間)の自機の時計の傾きの「マイナス1倍」を調整量として決定し、周波数・波数調整部22は、自機の時計の進みが、その「マイナス1倍」の傾きになるように調整する。この処理で、今回の調整作業は終了し、そのまま維持フェーズとなる。なお、処理ステップS15の分岐判断における基準値は、処理ステップS12の分岐判断における基準値よりも小さい値となる。
一方、時間差Bが基準値以上の場合(S15でNo)には、処理ステップS17に飛び、図8(a)の精密調整フェーズに移行する。すなわち、時間同期機能は、マスタの周期Tが自機で周期T−Aとなるように周波数・波数を調整する(S17)。つまり、時間差調整量算出部21は、処理ステップS11で求めた時間差から求めたその周期Tの自機の時計の傾きの「マイナス1倍」を調整量として決定し、周波数・波数調整部22は、自機の時計の進みが、その「マイナス1倍」の傾きになるように調整する。この処理ステップS17は、図8(a)におけるt3〜t4の区間の調整処理に対応する。
次いで、時間差認識部20は、マスタから指示されたタイミング(周期T経過:t4)で時間差Cを測定する(S18)。そして、時間差調整量算出部21は、マスタの周期Tが、自機で周期(T−A−2C+B)となるような調整量(傾き)を算出し、周波数・波数調整部22は、求めた調整量に基づき周波数・波数を調整する。この処理ステップS19は、図8(a)におけるt4〜t5の区間の調整処理(誤差をゼロに調整する処理)に対応する。
次いで、時間差認識部20は、マスタから指示されたタイミング(周期T経過)で時間差Dを測定する(S20)。この処理ステップS20は、図8(a)におけるt5のタイミングで時間差を求めることに対応する。時間差調整量算出部21は、時間差認識部20が測定した時間差Dを取得し、その時間差が基準値以内か否かを判断する(S21)。ここでの基準値は、ほぼゼロに近い値を採り、マスタと自機(スレーブ)の時計が一致している(調整完了)か否かの判定基準となる。基準値以内(S21でYes)の場合には、処理ステップS19の精密調整による補正処理よって時計あわせが成功したことを意味するので、以降のステップでは、時間同期機能は、マスタの周期Tが自機で周期(T−A−C+B)となるように周波数・波数を調整する(S22)。一方、基準値を超えている場合(S21でNo)には、時間同期機能は、処理ステップS11に戻り、次のマスタからの指示に基づく新たな調整に備える。
ところで、粗調整を行なう場合、調整開始(t1)から周期T経過後(t2)までにマスタと自機の時計の時間差を求め、その求めた時間差(傾き)から次の周期の調整量を設定するが、このとき、調整量は、演算処理等の関係からn倍(nは整数)のバイアスとするのが好ましい。すると、図10に示すように、特徴量は、いくつかの態様が考えられる。まず、マスタとスレーブとの時間差(図中のA)を早期に限りなくゼロにする目的からは、「正のバイアスをかける」方式や「4倍以上の逆バイアスを掛ける」方式は、時間差を増やす方向に調整されるので好ましくない。同様に、「バイアスなしのまま時間差を複数回測定する」方式は、無駄な処理であるので好ましくない。
そこで、「マイナス1倍」,「マイナス2倍」,「マイナス3倍」の3種類が好ましい。さらに、2進数の場合、「マイナス1倍」,「マイナス2倍」は、演算の過程で乗除算を必要としないので、計算負荷が少なくて済み、MPUの処理能力が小さくても対応できるので、より好ましい。更に、時間差を測定する分解能は、時間差認識部20の実装方法やMPU内レジスタのビット長などによって変わる。仮に16ビットMPUと仮定すると1演算で扱える自然数は(2^16−1)=65535までである。この制約から仮に分解能を測定した時間差の1万分の1とすると、測定した時間差が小さければ小さいほど、分解能を小さくできる。従って、調整量を「マイナス2倍」とする本実施形態のものは、図8(a)からも明らかなとおり、A(粗調整)にくらべてBとC(精密調整)は十分小さくなり、BとCの分解能を小さくできるので好ましい。
図8(b)は、実際の制御運転時における調整アルゴリズムを示している。まず、調整開示時(t1)において、マスタの時計の時刻と、スレーブの時計の時刻の差であるオフセットOを求める。この求めたオフセットOは、レジスタ等にセットして記憶保持する。そして、t2→t3→t4までは、図8(a)に示した調整と同様にマスタとスレーブの時間差A,B,Cを求めるとともに、A,Bを用いた調整(粗調整フェーズ,精密調整フェーズの前段)を行なう。つまり、t2の時に、t1〜t2の区間の傾き(A/(t2−t1))の「マイナス2倍」を適用して補正し、次のt2〜t3区間では、実線で示すようにそれまでの時間差Aを打ち消すように誤差ゼロ(オフセット分を除く)に近づく。そして、次の時間差を測定するt3のときのマスタとスレーブの時計の時間差Bを求め、次のステップ(区間t3〜t4)では、区間t1〜t2までの傾きの「マイナス1倍」に設定し、再度、傾きを精密に測定する。そして、t4の時の時間差Cを測定する。
また、このとき求める時間差A,B,Cは、前回測定指示が来たときから今回測定指示が来たときまでに生じた時間差である。この時間差は、マスタの時計における時の進み方(時のあゆみ)と、スレーブの時計における時の進み方のずれであり、仮に両者で時刻が異なっていても(オフセットOがあったとしても)、両時計の時間経過の進み方が一致している場合には、時間差はゼロとなり、図8(b)に示す図では、スレーブ時間軸は、マスタの時間と平行になる。
そして、t4からt5に遷移する際に、オフセットOを考慮して、「(C−B)+C+O」だけ傾きを補正することにより、オフセットを取り除くことができる。なお、このオフセットOを考慮した傾きを求めるためには、t4までに行なった「−2倍」や「−1倍」等と異なり、割り算が必要となるので、演算処理が煩雑となる。なお、t2からt3に遷移する際にオフセット分を考慮して傾きを設定しないのは、t1からt2までの傾きを求め、マイナス2倍の傾きでBやCをAに比べ十分小さくするためである。また、これにより、少なくとも、マスタとスレーブの時のあゆみのずれは小さくなる。つまり、t3,t4において求めた時間差B,Cは、いずれも時間差の絶対値がAに比べて小さくなっているので、t2の時に比べて精度良く時間差を求めることができ、精密調整が可能となる。
その後、前2回のステップ(t3の時とt4の時)に計算した傾きを再調整し、t5以降の維持フェーズでは、残差を限りなくゼロに維持する。この5クロック目(t6)で4クロック目(t5)との差から「静定」していることが確認できる。
係る処理を実行するための具体的なアルゴリズムは、時間同期機能を構成する各処理部20〜22が、図21に示すフローチャートを実行することで行なう。すなわち、まず、時間差認識部20は、マスタから指示されたタイミング(t1)で、マスタとスレーブの現在時刻の差(オフセット:O)を求め、その求めた値をレジスタに格納する(S10)。このオフセットを求める処理は、上述した図20に示す手順に従って行なうことができる。
つまり、まず、マスタが、スレーブに対して「Sync」メッセージを送信するとともに、この送信したときの自身の時計のタイムスタンプ(TS1)を記録する。スレーブは、このSyncメッセージを受信すると、その受信したときの自身の時計のタイムスタンプ(TS2)を記録する。次に、マスタがスレーブに対して「Follow_up」メッセージを送信する。このメッセージの中には、先に Syncメッセージを送出したときのマスタのタイムスタンプ(TS1)が含まれる。スレーブは、これら2つのタイムスタンプTS1,TS2をもとに、マスタの時計の時刻とスレーブの時計の時刻との差分、つまり、オフセットOを求めることができる。なお、本実施形態では、オフセットOを求めたら、初期のトレーニング期間と相違して上書き等によってすぐにオフセットを修正することはないので、伝搬遅延もすぐに求めることはない。また、一度伝搬遅延を求めたならば、PAC1が連結するユニットの接続構成に変更がない限り、伝搬遅延は、さほど大きく変動することもないので、オフセットを求めて時間合わせを行なうごとに伝搬遅延を求める必要はない。
次に、時間差認識部20は、マスタから指示されたタイミングで時間差Aを測定する(S11)。この処理ステップS11は、図8(b)におけるt1〜t2の区間に対応する。また、時間差Aは、例えば、マスタから送信されてくる時間差の測定指示t1,t2,t3,……の間隔Tが常に一定で、既知とすると、スレーブは、前回の測定指示(この場合t1)を受信したときの自己の時計の値と、今回の測定指示(この場合t2)を受信したときの自己の時計の値の差から、スレーブにおける経過時間を求め、その求めた経過時間とTとの差分から時間差Aを求めることができる。これは、以降の時間差B,C等についても同様である。また、マスタ側にて前回測定指示を送信してから今回送信指示を送信するまでの間隔Tをその都度マスタから送信してくるようにしてもよい。
また、処理ステップS10と処理ステップS11の実行タイミングであるが、処理ステップS10は、t1におけるオフセットを求め、処理ステップS11はt1〜t2における時間差を求めることから、実際には、処理ステップS10と処理ステップS11とは、ほぼ同時に処理を開始し処理ステップS10が先に処理を完了するようになる。
そして、t2からt4までの区間では、図8(a)の場合と同様であることから、そのアルゴリズムも基本的に同様である。すなわち、処理ステップS12からS14までは、図9に示す対応するステップ番号の処理ステップと同様の処理を実行する。そして、処理ステップS14にて求めた時間差Bが、基準値以内(S15でYes)の場合には、処理ステップS13の粗調整による補正処理によって、マスタとスレーブ間の時の歩み(周期の長さ)の調整が成功したことを意味する。よって、次の周期(t3からt4)では、マスタとスレーブの時計の時刻を合わせるべく、スレーブの時間同期機能は、マスタの周期Tが自機で周期(T−A−O)となるように周波数・端数を調整する(S16′)。そして、それ以降(t4以降)、時間同期機能は、マスタの周期Tが自機で周期(T−A)となるように周波数・波数を調整する(S16)。
一方、時間差Bが基準値以上の場合(S15でNo)には、処理ステップS17に飛び、次の周期での調整に移行する。処理ステップS17,S18は、上述した図9に示す対応するステップ番号の処理ステップと同様の処理を実行する。そして、処理ステップS19′では、オフセットOを考慮した補正を行なうことから、時間差調整量算出部21は、マスタの周期Tが、自機で周期(T−A−2C+B−O)となるような調整量(傾き)を算出し、周波数・波数調整部22は、求めた調整量に基づき周波数・波数を調整する。この処理ステップS19′は、図8(a)におけるt4〜t5の区間の調整処理(誤差をゼロに調整する処理)に対応する。
次いで、時間差認識部20は、マスタから指示されたタイミング(周期T経過)で時間差Dを測定する(S20)。この処理ステップS20は、図8(a)におけるt5のタイミングで時間差を求めることに対応する。この時間差Dは、スレーブの時計の時刻と、マスタの時計の時刻との差である。この時間差Dは、例えば、オフセットOを算出する際に取得したt1におけるマスタの時刻であるタイムスタンプ(TS1)に、t5までのマスタの時計の経過時間(4T)を加算した値と、スレーブの時計の現在の時刻とを比較することで簡単に求められる。また、図20に示すようにオフセットを求める際に用いた方式でマスタのタイムスタンプTS1と、スレーブのタイムスタンプTS2とを取得し、TS1に伝搬遅延を加算した時刻と、TS2との差を求めることでマスタとスレーブの時間差を求めることもできる。
時間差調整量算出部21は、時間差認識部20が測定した時間差Dを取得し、その時間差が基準値以内か否かを判断する(S21)。ここでの基準値は、ほぼゼロに近い値を採り、マスタと自機(スレーブ)の時計が一致している(調整完了)か否かの判定基準となる。基準値以内(S21でYes)の場合には、処理ステップS19′の精密調整による補正処理よって時計あわせが成功したことを意味するので、以降のステップでは、時間同期機能は、マスタの周期Tが自機で周期(T−A−C+B)となるように周波数・波数を調整する(S22)。一方、基準値を超えている場合(S21でNo)には、時間同期機能は、処理ステップS10に戻り、次のマスタからの指示に基づく新たな調整に備える。
図11以降は、粗調整フェーズ及び又は精密調整フェーズにおける調整量を変更した場合の変形例を示している。図11(a),(b)に示す変形例では、粗調整フェーズの際の調整量を、傾きのマイナス1倍に設定している点で、上述の実施形態と相違する。つまり、図9に示すフローチャートに処理ステップS13が、「マスタの周期Tが自機で周期T−Aとなるように周波数・波数を調整」を実行するようにする。その後の精密調整フェーズは、図7,図8に示す実施形態と同様である。図11から明らかなように、この変形例でも、5ステップで静定に至るので、早期に調整作業が終了する。なお、図11(a)が、トレーニング期間における調整のため、t1時の上書き処理によりマスタとスレーブの時刻を一旦合わせ、その後の調整でマスタとスレーブの時計の時のあゆみを同一にすることで、最終的に両者の絶対時刻を合わせるものである。また、図11(b)が、実際の制御運転中における時間合わせの調整を行なうもので、t1におけるオフセットOを求め、t4からt5の区間で、オフセット分も合わせて絶対時刻合わせを行なうものである。
図12(a),(b)は、別の変形例を示している。この変形例では、図8,図9に示す実施形態における調整量を、粗調整フェーズと精密調整フェーズで逆にしている。具体的には、粗調整フェーズ実行中のt2の時の調整量を、時間差Aに基づく傾きのマイナス1倍に設定し、精密調整フェーズ実行中のt3の時の調整量を時間差Aに基づく傾きのマイナス2倍に設定している。つまり、図9に示すフローチャートに処理ステップS13が、「マスタの周期Tが自機で周期T−Aとなるように周波数・波数を調整」を実行するようにする。更に、図9に示すフローチャートに処理ステップS17が、「マスタの周期Tが自機で周期T−2Aとなるように周波数・波数を調整」を実行するようにする。図12(a),(b)から明らかなように、この変形例でも、5ステップで静定に至るので、早期に調整作業が終了する。そして、この変形例でも、同図(a)がトレーニング期間における調整アルゴリズムで、同図(b)が制御運転時における調整アルゴリズムである。
図13(a),(b)は、別の変形例を示している。この変形例では、t2で測定した時間差Aに基づく粗調整フェーズと精密調整フェーズで行なう調整量を共に、「マイナス2倍」に設定している。これにともない、図9に示すフローチャートに処理ステップS17が、「マスタの周期Tが自機で周期T−2Aとなるように周波数・波数を調整」を実行するようにする。その他の処理・機能は、図7,図8に示す実施形態と同様である。図13から明らかなように、この変形例でも、5ステップで静定に至るので、早期に調整作業が終了する。なお、この図13でBを正の値とする場合、Cは矢印の向きが逆のため、負の値となる。この点は、以下の変形例の図でも同様である。
図14(a),(b)は、さらに別の変形例を示している。この変形例では、t2で測定した時間差Aに基づく粗調整フェーズの調整量を「マイナス3倍」に設定し、t2で測定した時間差Aに基づく精密調整フェーズで行なう調整量を、「1倍」に設定している。これにともない、図9に示すフローチャートに処理ステップS13が、「マスタの周期Tが自機で周期T−3Aとなるように周波数・波数を調整」を実行するようにし、図9に示すフローチャートに処理ステップS17が、「マスタの周期Tが自機で周期Tとなるように周波数・波数を調整」を実行するようにする。その他の処理・機能は、図7,図8に示す実施形態と同様である。図14(a),(b)から明らかなように、この変形例でも、5ステップで静定に至るので、早期に調整作業が終了する。そして、この変形例でも、同図(a)がトレーニング期間における調整アルゴリズムで、同図(b)が制御運転時における調整アルゴリズムである。
図15(a),(b)は、さらに別の変形例を示している。この変形例では、t2で測定した時間差Aに基づく粗調整フェーズの調整量を「マイナス3倍」に設定し、t2で測定した時間差Aに基づく精密調整フェーズで行なう調整量を、「マイナス1倍」に設定している。これにともない、図9に示すフローチャートに処理ステップS13が、「マスタの周期Tが自機で周期T−3Aとなるように周波数・波数を調整」を実行するようにする。その他の処理・機能は、図7,図8に示す実施形態と同様である。図15(a),(b)から明らかなように、この変形例でも、5ステップで静定に至るので、早期に調整作業が終了する。そして、この変形例でも、同図(a)がトレーニング期間における調整アルゴリズムで、同図(b)が制御運転時における調整アルゴリズムである。
図22は、制御運転時にオフセットOを考慮した調整アルゴリズムを行なう図8(b)に対応する更に別の変形例を示している。すなわち、図8(b)の変形例では、t4とt5の間で、一気に誤差を修正するため、時の刻みが飛ばないとはいえ、オフセットが大きい場合には急な変更により、各種CPU動作に不具合を生じる可能性がある。そこで、本変形例では、オフセットが大きい場合に、1周期Tで調整することをあきらめ、n周期かけて緩やかに調整を図るようにした。すなわち、時間差認識部20は、t(−n)のときにオフセットO′を求める。このO′が一定以上大きい値の場合、n周期かけてマスタとスレーブの時計の時間差を小さくする。つまり、予め決めた1周期当たりの調整量(傾き)を用いて補正する。ここで、nは、1周期当たりで修正できる時間差(例えば、A)でO′を除算した値となる。但し、係る除算した結果、割り切れるとは限らないので、最初にオフセットを求めてからn周期が経過したt1の時点では、マスタとスレーブの時計の時刻の時間差(残る残差)がEとなる。そして、そのまま同じ傾きでさらに1周期経過してt2になると、マスタとスレーブの時計の時刻の差はA+Eとなる。
そして、このときのAは、図8(b)のt2におけるAと同様であり、Eは図8(b)のt1におけるオフセットOと同じといえる。従って、以降は、図8(b)の変形例と同様の手順に従い、t4まで補正処理が進み、t4から t5 に移るときにEを吸収する。このとき、Eは小さいので、t4からt5の区間における変化は小さく、t(−n)からt1への調整も、n周期とたっぷり時間があるので、変化を小さくすることができる。よって、時間が掛かるものの、滑らかな調整により時刻を合わせることができる。
なお、上記の説明では、t(−n)からt1までの期間における周期ごとの変化・調整量を固定としたため、オフセットの値によりnの値が変動するが、nある程度大きい値に設定しておき、オフセットO′をnで除算することで、1周期当たりの変化量を求めるようにしても良い。
また、具体的な図示は省略するが、図11以降の他の変形例においても、上記の図22に示すt1前の所定区間を用いてマスタとスレーブの時計の時刻のずれを小さくした後で、調整する方式を適用することができるのはもちろんである。
図16から図19は、別の実施形態並びにその変形例を示している。図16,図17に基づいて基本となる実施形態を説明する。本実施形態では、時間差認識部20が非常に高い時間ズレの分解能が得られるものを用い、上述した実施形態並びに変形例の調整アルゴリズムの一部を簡略化している。
図16(a)に示すように、t1〜t3までの粗調整フェーズは、上述のトレーニング期間における実施形態と同様である。つまり、スレーブは、t1の時にマスタの時計の時刻(タイムスタンプ)を取得して自己の時計に上書きし、両者の時刻を一旦合わせる。そして、t2の時の時間差Aに基づく傾きのマイナス2倍の傾きを、t2〜t3のステップの際の調整量とする。そして、時間差調整量算出部21は、この粗調整フェーズが終了するt3の時に測定する時間差Bと、前回測定した時間差Aに基づいてぴったり誤差ゼロにするための調整量を求め、次のステップ(t3〜t4)の際に調整を図る。これにより、t4の時には残差が限りなくゼロに近付いているので、以後、その状態を維持する。この実施形態によれば、4クロック目で3クロック目との差から「静定」していることが確認できる。つまり、4ステップで静定に至るので、本実施形態は、さらに早期に調整作業が終了する。
係る処理を実行するための具体的なアルゴリズムは、時間同期機能を構成する各処理部20〜22が、図17に示すフローチャートを実行することで行なう。すなわち、まず、時間差認識部20は、マスタから指示されたタイミングで時間差Aを測定する(S31)。この処理ステップS31は、図16(a)におけるt1〜t2の区間に対応する。時間差調整量算出部21は、時間差認識部20が測定した時間差Aを取得し、その時間差が基準値以内か否かを判断する(S32)。基準値以内(S32でYes)の場合には、補正・調整作業は不要であるので、粗調整等することなくそのまま処理を終了する。
一方、時間差Aが基準値以上の場合(S32でNo)には、時間同期機能は、マスタの周期T(=t2−t1)が自機で周期T−2Aとなるように周波数・波数を調整する(S33)。つまり、時間差調整量算出部21は、処理ステップS31で求めた時間差から、その周期T(t1−t2の区間)の自機の時計の時間差の傾きを求め、その傾きの「マイナス2倍」を調整量として決定し、周波数・波数調整部22は、自機の時計の進みが、その「マイナス2倍」の傾きになるように調整する。この処理ステップS33は、図16(a)におけるt2〜t3の区間の調整処理に対応する。
時間差認識部20は、マスタから指示されたタイミング(周期T経過)で時間差Bを測定する(S34)。時間差調整量算出部21は、時間差認識部20が測定した時間差Bを取得し、その時間差が基準値以内か否かを判断する(S35)。基準値以内(S35でYes)の場合には、処理ステップS33の粗調整による補正処理よって時計あわせが成功したことを意味するので、以降、時間同期機能は、マスタの周期Tが自機で周期(T−A)となるように周波数・波数を調整する(S36)。つまり、時間差調整量算出部21は、処理ステップS31で求めた時間差から求めたその周期T(t1−t2の区間)の自機の時計の傾きの「マイナス1倍」を調整量として決定し、周波数・波数調整部22は、自機の時計の進みが、その「マイナス1倍」の傾きになるように調整する。この処理で、今回の調整作業は終了し、そのまま維持フェーズとなる。
一方、時間差Bが基準値以上の場合(S35でNo)には、処理ステップS37に飛び、時間差調整量算出部21は、マスタの周期Tが自機で周期T−A−2Bとなるような調整量(傾き)を算出し、周波数・波数調整部22は、求めた調整量に基づき周波数・波数を調整する(S37)。この処理ステップS37は、図16(a)におけるt3〜t4の区間の調整処理に対応する。
次いで、時間差認識部20は、マスタから指示されたタイミング(周期T経過:t4)で時間差Cを測定する(S38)。時間差調整量算出部21は、時間差認識部20が測定した時間差Cを取得し、その時間差が基準値以内か否かを判断する(S39)。ここでの基準値は、ほぼゼロに近い値を採る。基準値以内(S39でYes)の場合には、処理ステップS37の調整による補正処理よって時計あわせが成功したことを意味するので、以降、時間同期機能は、マスタの周期Tが自機で周期(T−A−B)となるように周波数・波数を調整する(S40)。一方、基準値を超えている場合には、時間同期機能は、処理ステップS31に戻り、次のマスタからの指示に基づく新たな調整に備える。
次に、実際の制御運転時の調整アルゴリズムを説明する。図16(b)に示すように、まず、調整開示時(t1)において、マスタの時計の時刻と、スレーブの時計の時刻の差であるオフセットOを求める。この求めたオフセットOは、レジスタ等にセットして記憶保持する。そして、時間差認識部20は、t1からt2までに生じたマスタとの時間差Aを求める。このt2の時の時間差Aに基づく傾きのマイナス2倍の傾きを、t2〜t3のステップの際の調整量とする。時間差調整量算出部21は、粗調整フェーズが終了するt3の時に測定する時間差Bと、前回測定した時間差Aと、オフセットOに基づいてぴったり誤差ゼロにするための調整量を求め、次のステップ(t3〜t4)の際に調整を図る。これにより、t4の時には残差が限りなくゼロに近付いているので、以後、その状態を維持する。この実施形態によれば、4クロック目で3クロック目との差から「静定」していることが確認できる。つまり、4ステップで静定に至るので、本実施形態は、さらに早期に調整作業が終了する。
係る処理を実行するための具体的なアルゴリズムは、時間同期機能を構成する各処理部20〜22が、図23に示すフローチャートを実行することで行なう。すなわち、まず、時間差認識部20は、マスタから指示されたタイミング(t1)で、マスタとスレーブの現在時刻の差(オフセット:O)を求め、求めた値をレジスタに格納する(S30)。このオフセットの求める処理は、上述した図20に示す手順に従って行なうことができる。
次に、時間差認識部20は、マスタから指示されたタイミングで時間差Aを測定する(S31)。この処理ステップS31は、図16(b)におけるt1〜t2の区間に対応する。そして、この時間差Aを求める処理は、例えば図21の処理ステップS11と同様に、オフセット分を除き、t1からt2まででマスタの時計の時間の進みに対するスレーブの時計の時間の進みの相違(差分)を求める。
これ以降、処理ステップS32〜S34までの処理ステップは、図17に示すものと同様である。そして、処理ステップS34にて求めた時間差Bが、基準値以内か否かを判断する(S35)。そして、基準値以内(S35でYes)の場合には、処理ステップS33の粗調整による補正処理によってマスタとスレーブ間の時の歩み(周期の長さ)の調整が成功したことを意味する。よって、次の周期(t2からt3)では、マスタとスレーブの時計の時刻を合わせるべく、スレーブの時間同期機能は、マスタの周期Tが自機で周期(T−A−O)となるように周波数・端数を調整する(S36′)。そして、それ以降(t4以降)、時間同期機能は、マスタの周期Tが自機で周期(T−A)となるように周波数・波数を調整する(S36)。
一方、時間差Bが基準値以上の場合(S35でNo)には、処理ステップS37′に飛び、時間差調整量算出部21は、マスタの周期Tが自機で周期T−A−2B−Oとなるような調整量(傾き)を算出し、周波数・波数調整部22は、求めた調整量に基づき周波数・波数を調整する(S37′)。この処理ステップS37′は、図16(b)におけるt3〜t4の区間の調整処理に対応する。そして、これ以降は、処理ステップS38からS40を実行する。
図18以降は、調整量を変更した場合の変形例を示している。図18(a),(b)に示す変形例では、時間差Aに基づく調整量を、傾きのマイナス1倍に設定している点で、上述の実施形態と相違する。つまり、図17に示すフローチャートに処理ステップS33が、「マスタの周期Tが自機で周期(T−A)となるように周波数・波数を調整」を実行するようにする。その後の調整フェーズは、図16,図17に示す実施形態と同様である。図18から明らかなように、この変形例でも、4ステップで静定に至るので、早期に調整作業が終了する。そして、この変形例でも、同図(a)がトレーニング期間における調整アルゴリズムで、同図(b)が制御運転時における調整アルゴリズムである。
図19(a),(b)は、さらに別の変形例を示している。この変形例では、t2で測定した時間差Aに基づく調整量を「マイナス3倍」に設定している。これにともない、図17に示すフローチャートに処理ステップS33が、「マスタの周期Tが自機で周期(T−3A)となるように周波数・波数を調整」を実行するようにする。その他の処理・機能は、図16,図17に示す実施形態と同様である。図19(a),(b)から明らかなように、この変形例でも、4ステップで静定に至るので、早期に調整作業が終了する。そして、この変形例でも、同図(a)がトレーニング期間における調整アルゴリズムで、同図(b)が制御運転時における調整アルゴリズムである。
図24は、上述したようにマスタとスレーブの時間合わせが完了した後で行なう同期制御の一例を示している。図24(a)は、相対制御の例を示す。この相対制御は、マスタがブロードキャスト或いはマルチキャストによる一斉同報により、各スレーブに対してパルス(タイミング)を通知する。図20の処理を実行することで、各スレーブは、マスタからの伝搬遅延を認識している。すると、各スレーブは、マスタからのパルスを受信すると、その受信した時刻から伝搬遅延を引いた時刻が、当該パルスを送信した時刻であることがわかり、各スレーブは係るパルスを送信した時刻にあらかじめ指定された待ち時間を経過後に動作する。これにより、各スレーブは、当該時間経過後に一斉に同期して所定の制御動作を行うことができる。
また、図24(b)は、絶対時刻による同期制御を示している。マスタは、ブロードキャスト或いはマルチキャストを用いた一斉同報或いはユニキャスト(1対1)通信を用いて個々のスレーブに対して動作を開始する時刻を通知する。この通知を受けたスレーブは、受信した時刻にきたならば一斉に同期して所定の制御動作を行なうことができる。
図25は、本発明の更に別の実施形態を示している。上述したとおり、各スレーブは、マスタからの指示に従い、自機の時計をマスタの時計に合わせる処理を行なう。そこで、本実施形態では、個々のスレーブがその実行結果(時間差)をマスタに伝えるようにし、マスタ側では、各スレーブから取得した時間差(ズレ量)に基づき、異常・故障を検出する機能を備えた。
マスタは、各スレーブから取得した時間差(ズレ量)を、メモリ等に記憶保持させておき、その過去の履歴と傾向が異なる場合に、何かしらの異常があると判断する。ここで、「過去履歴と傾向が異なる」とは、具体的には、スレーブ毎に過去X回(Xは16など)の時間差の標準偏差σを求め、今回測定した該当スレーブの時間差が±σや±2σを超えていた場合や、スレーブ毎に前回の時間差を記録しておき、今回測定した該当スレーブの時間差が前回までの平均値の3倍といった閾値を超えていた場合などにより判定できる。もちろん、マスタの時計が壊れる場合もあり、係る場合には、全てのスレーブの時間差が過去履歴と傾向が異なることになるので、その状態から判定することができる。更に、図2に示したように、各スレーブがバスに接続された構成の場合、バスのある点に障害があると、その障害点を境にして、マスタより距離が遠いスレーブはすべて計測値が異常となる可能性がある。従って、複数のスレーブが同時に障害を報告してきた場合、実際の接続構成に照らして、バスの障害点を予測することも可能である。
そこで、本実施形態では、マスタとなるCPUユニット2のMPU2aに、図26に示すフローチャートを実施する機能(異常検出機能)を実装した。すなわち、まず前提として、マスタは、周期Tで所定のスレーブに対して時計あわせのための時間差測定指示を発するので、各スレーブは、その指示に対するレスポンスとして、自己が測定した時間差情報をマスタに返す。そこで、マスタは、そのレスポンスとして返されてきた各スレーブの時間差を取得し、スレーブ毎に過去X回の時間差の履歴を保持する(S41)。マスタは、過去X回の時間差の情報から、標準偏差を求めておき、今回取得したスレーブ毎の時間差は標準偏差以内か否かを判断する(S42)。そして、全てが標準偏差以内に収まっている場合には、マスタは、異常なしと判断し、システムにその旨を通知する(S43)。この場合の通知先のシステムは、全てのスレーブであってもよいし、外部の各種の装置・機器としても良い。
一方、標準偏差を超えたスレーブがあった場合(S42でNo)、マスタは、該当するスレーブの数を検出する。そして、マスタは、1台のスレーブの時間差だけが標準偏差より大きい場合には、そのスレーブが異常と判断して、“当該スレーブに異常の可能性があり”とシステムに通知する(S44,S45)。
また、8割以上のスレーブの時間差が標準偏差より大きい場合、マスタは、マスタ自身の異常の可能性があると判断し、その旨をシステムに通知する(S46,S47)。更に、処理ステップS44,S46のいずれにも該当せず、複数のスレーブの時間差が標準偏差より大きい場合、マスタは、接続するバスに異常の可能性があると判断し、その旨をシステムに通知する。
なお、上述した各実施形態並びにその変形例では、マスタは1台として説明したが、複数のマスタ候補をあらかじめ登録し、それぞれのマスタ候補に1号機2号機といった号機番号を割り振り、正常稼動している中で最も若い号機番号をマスタとして動作させることができる。また、現行のマスタに故障や応答遅延等の事故あるときには、他のスレーブから1台を選んでマスタに昇格させることももちろんできる。更に、各実施形態では,PACに適用した例を説明したが、PLCその他の産業用コントローラに適用できるのはもちろんである。
また、上述した各実施形態並びにその変形例では、スレーブは、マスタからの指示に従いマスタの時計との時間差を一定周期で測定し、それに基づいて調整量を決定し、調整作業を行なうようにしたが、本発明はこれに限ることはなく、時間差を求める周期は、所定の規則に従って異ならせるようにしても良い。各周期が、ある規則(パターン)に従って変化する場合、スレーブがその規則がわかっていると、今回測定した時間差と、その時間が生じるまでの時間(周期)から、傾きを求めることができ、次の周期は、その傾きのマイナスn倍のバイアスとなるように調整をしたり、次の周期の時間がわかっているのでそれを考慮して、上述した各種の実施形態並びに変形例を適用することで、適宜時間あわせをすることができる。ただし、調整量を求めるのに掛算・割算を使う必要が出てくるため、上述した各実施形態等と比較すると演算処理の負荷がかかるので、それに対応すべく高機能・高価なプロセッサ(CPU・MPU)を用いるとよい。換言すると、上述した各実施形態等によれば、加算・減算処理で時間合わせに対応できるようにすることで、プロセッサにかかる演算処理の負荷を可及的に抑制することができるので好ましい。