(57)【特許請求の範囲】
【請求項１】
マスタモジュール及びスレーブモジュールが入出力データ交換バスを介してデータ交換を行い、前記マスタモジュールが前記スレーブモジュールを介して当該スレーブモジュールに接続された外部接続機器を制御するプログラマブルコントローラシステムにおいて、
前記マスタモジュール及びスレーブモジュールはそれぞれタイマを有し、
前記マスタモジュールは、
当該マスタモジュールが有するタイマのマスタタイマ値に基づき定周期で起動され、前記スレーブモジュールから前記入出力データ交換バスを介して予め受信した入力データをもとに演算して出力データを生成する出力データ生成手段と、
当該出力データ生成手段により生成された前記出力データを、前記入出力データ交換バスを介して前記スレーブモジュールに送信する出力データ送信手段と、
前記スレーブモジュールが有するタイマのスレーブタイマ値と前記マスタタイマ値とを同期化させる同期化手段と、を有し、
前記スレーブモジュールは、
前記入出力データ交換バスから前記出力データを受信する受信手段と、
前記受信手段によって受信された前記出力データ、または前記出力データに基づき所定演算を行い当該演算により得た外部接続機器制御用のデータを前記外部接続機器に出力する出力手段と、を有し、
当該出力手段は、
前記同期化手段によって同期化された前記スレーブタイマ値に基づき前記マスタモジュールの前記出力データ生成手段が起動されるタイミングと同一タイミングの定周期で起動され、
前記入出力データ交換バスは、第１の伝送路及び第２の伝送路それぞれが前記マスタモジュール及び前記スレーブモジュールからなる複数のモジュールをデイジーチェーン接続し、該デイジーチェーン接続された両端の前記モジュールそれぞれで前記第１の伝送路と前記第２の伝送路とを接続してリング状の伝送路を構成し、
前記同期化手段は、
前記スレーブモジュールが一のメッセージを前記第１の伝送路及び前記第２の伝送路から受信したときの前記スレーブタイマ値を収集し、この収集したスレーブタイマ値と前記各モジュールの配置位置とに基づき前記マスタモジュールと前記スレーブモジュールそれぞれとの間の伝送遅延時間を演算し、当該伝送遅延時間と前記マスタモジュールの前記マスタタイマ値とを前記スレーブモジュールに送信し、
前記スレーブモジュールは、前記マスタモジュールから前記伝送遅延時間及び前記マスタタイマ値を受信したとき、前記伝送遅延時間と前記マスタタイマ値との和を自モジュールのタイマのスレーブタイマ値として更新設定することにより、自モジュールのスレーブタイマ値を前記マスタタイマ値と同期化することを特徴とするプログラマブルコントローラシステム。
【請求項２】
マスタモジュール及びスレーブモジュールが入出力データ交換バスを介してデータ交換を行い、前記マスタモジュールが前記スレーブモジュールを介して当該スレーブモジュールに接続された外部接続機器を制御するプログラマブルコントローラシステムにおいて、
前記マスタモジュール及びスレーブモジュールはそれぞれタイマを有し、
前記マスタモジュールは、
当該マスタモジュールが有するタイマのマスタタイマ値に基づき定周期割込みを発生するマスタタクト割込み発生手段と、
このマスタタクト割込み発生手段により起動され、前記スレーブモジュールから前記入出力データ交換バスを介して予め受信した入力データをもとに演算して出力データを生成する出力データ生成手段と、
当該出力データ生成手段により生成された前記出力データを、前記入出力データ交換バスを介して前記スレーブモジュールに送信する出力データ送信手段と、
前記スレーブモジュールが有するタイマのスレーブタイマ値と前記マスタタイマ値とを同期化させる同期化手段と、を有し、
前記スレーブモジュールは、
前記入出力データ交換バスから前記出力データを受信する受信手段と、
前記同期化手段によって同期化された前記スレーブタイマ値に基づき、前記定周期割込みの発生タイミングと同一のタイミングを獲得し、このタイミングを基準に所定時間経過後にスレーブ割込みを発生するスレーブタクト割込み発生手段と、
当該スレーブタクト割込み発生手段によって起動され、前記受信手段によって受信された前記出力データ、または前記出力データに基づき所定演算を行い当該演算により得た外部接続機器制御用のデータを前記外部接続機器に出力する出力手段と、
を備え、
前記入出力データ交換バスは、第１の伝送路及び第２の伝送路それぞれが前記マスタモジュール及び前記スレーブモジュールからなる複数のモジュールをデイジーチェーン接続し、該デイジーチェーン接続された両端の前記モジュールそれぞれで前記第１の伝送路と前記第２の伝送路とを接続してリング状の伝送路を構成し、
前記同期化手段は、
前記スレーブモジュールが一のメッセージを前記第１の伝送路及び前記第２の伝送路から受信したときの前記スレーブタイマ値を収集し、この収集したスレーブタイマ値と前記各モジュールの配置位置とに基づき前記マスタモジュールと前記スレーブモジュールそれぞれとの間の伝送遅延時間を演算し、当該伝送遅延時間と前記マスタモジュールの前記マスタタイマ値とを前記スレーブモジュールに送信し、
前記スレーブモジュールは、前記マスタモジュールから前記伝送遅延時間及び前記マスタタイマ値を受信したとき、前記伝送遅延時間と前記マスタタイマ値との和を自モジュールのタイマのスレーブタイマ値として更新設定することにより、自モジュールのスレーブタイマ値を前記マスタタイマ値と同期化することを特徴とするプログラマブルコントローラシステム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、複数のモジュール間をデイジーチェーン接続し、且つ両端のモジュールで回線を折り返すことによりリング状のネットワークを形成するようにしたプログラマブルコントローラシステムに関する。
【背景技術】
【０００２】
従来、プラント、工場等では、機械や装置のシーケンス制御に多くのプログラマブルコントローラを用い、ファクトリオートメーション化を実現している。
１つのプログラマブルコントローラは、プログラムの実行やデータの演算処理などを行うＣＰＵモジュールや、制御機器とプロセスデータの入出力を行うＩＯモジュールが複数バスで接続されて構成されている。
このようにプログラマブルコントローラのモジュール間を接続するバスとして、リング状の伝送路を用いたプログラマブルコントローラが提案されており、例えば、リング状の伝送路を、プログラマブルコントローラにおけるモジュール間の入力データ、出力データの交換バスとして用いたものが提案されている（例えば、特許文献１参照）。
【０００３】
このリング状の伝送路をプログラマブルコントローラにおけるモジュール間の入力データ、出力データの交換バスとして用いたプログラマブルコントローラにおいては、ＣＰＵモジュールがＩＯモジュールからデータを獲得するときには「トータルフレーム方式」、ＣＰＵモジュールがＩＯモジュールにデータを出力するときには「マルチキャスト方式」というデータ交換プロトコルを用い、例えば図１８（ａ）に示すように、ＣＰＵモジュールでは予め設定したタクト周期毎にＩＯモジュールから必要なデータを実行プロセッサに取り込み所定のデータ処理を行ってデータを送信している。図１８（ｃ）に示すようにＩＯモジュールでは、ＣＰＵモジュールからのデータを受信するタイミングでＣＰＵモジュールからのデータを読み込んで所定のデータ処理を実行し、所定のデータをＣＰＵモジュールにトータルフレーム方式により送信するようになっている。
【０００４】
なお、図１８において、（ａ）はＣＰＵモジュールにおける処理の流れを表し、（ｂ）はリング状の伝送路を構成するバス上での処理の流れを表し、（ｃ）はＩＯモジュールにおける処理の流れを表す。また、図１８中の“ＴＦ”とは、トータルフレーム方式で送信されるデータに対する処理を表す。“ＭＣ”とはマルチキャスト方式で送信されるデータに対する処理を表す。“演算時間”とは、各モジュールにおいて、受信データをもとに所定の演算処理を行っている時間を表す。“ＭＳＧ”とはＣＰＵモジュールと他モジュールとの間で行われるメッセージ転送用の時間帯域を表す。また、図１８において横軸は時間を表し、“ＴＦ”、“ＭＣ”の位置及び長さが、各モジュールにおいて、“ＴＦ”または“ＭＣ”に対する処理が行われるタイミング及びその処理時間を表し、“演算時間”の位置及び長さが、各モジュールにおいて受信データに対する所定の処理が行われるタイミング及びその処理時間を表す。
【先行技術文献】
【特許文献】
【０００５】
【特許文献１】特開平１１−３３８５２３号公報
【発明の概要】
【発明が解決しようとする課題】
【０００６】
上記のように、ＣＰＵモジュールが、タクト周期毎にＩＯモジュールからのデータを取り込むように構成した場合、ネットワークシステムにおけるデータ交換時間つまりタクト周期が、ＣＰＵモジュールやＩＯモジュールにおけるデータ処理時間に比較して十分高速である場合には、トータルフレーム方式やマルチキャスト方式等のデータ交換プロトコルを用いることにより、モジュール間でのデータ処理の同期が可能であることが知られている。
【０００７】
しかしながら、プログラマブルコントローラの制御対象となるシステムの高速化、複雑化から、プログラマブルコントローラを構成するＣＰＵモジュール、ＩＯモジュールによるデータ処理周期が短くなってきており、このようなシステムにおけるＩＯモジュール間での同期化を実現するためには、より一段のタクト交換速度すなわちネットワーク伝送速度の高速化が必要となる。
しかしながら、ネットワークにおける伝送速度の高速化は、耐ノイズ性能の劣化や伝送距離の短距離化などの弊害があり、容易ではない。
そこで、この発明は、上記従来の未解決の問題点に着目してなされたものでありモジュール間での同期化をより高精度に行うことの可能なプログラマブルコントローラシステムを提供することを目的としている。
【課題を解決するための手段】
【０００８】
上記目的を達成するために、本発明の請求項１にかかるプログラマブルコントローラシステムは、マスタモジュール及びスレーブモジュールが入出力データ交換バスを介してデータ交換を行い、前記マスタモジュールが前記スレーブモジュールを介して当該スレーブモジュールに接続された外部接続機器を制御するプログラマブルコントローラシステムにおいて、前記マスタモジュール及びスレーブモジュールはそれぞれタイマを有し、前記マスタモジュールは、当該マスタモジュールが有するタイマのマスタタイマ値に基づき定周期で起動され、前記スレーブモジュールから前記入出力データ交換バスを介して予め受信した入力データをもとに演算して出力データを生成する出力データ生成手段と、当該出力データ生成手段により生成された前記出力データを、前記入出力データ交換バスを介して前記スレーブモジュールに送信する出力データ送信手段と、前記スレーブモジュールが有するタイマのスレーブタイマ値と前記マスタタイマ値とを同期化させる同期化手段と、を有し、前記スレーブモジュールは、前記入出力データ交換バスから前記出力データを受信する受信手段と、前記受信手段によって受信された前記出力データ、または前記出力データに基づき所定演算を行い当該演算により得た外部接続機器制御用のデータを前記外部接続機器に出力する出力手段と、を有し、当該出力手段は、前記同期化手段によって同期化された前記スレーブタイマ値に基づき前記マスタモジュールの前記出力データ生成手段が起動されるタイミングと同一タイミングの定周期で起動され、前記入出力データ交換バスは、第１の伝送路及び第２の伝送路それぞれが前記マスタモジュール及び前記スレーブモジュールからなる複数のモジュールをデイジーチェーン接続し、該デイジーチェーン接続された両端の前記モジュールそれぞれで前記第１の伝送路と前記第２の伝送路とを接続してリング状の伝送路を構成し、前記同期化手段は、前記スレーブモジュールが一のメッセージを前記第１の伝送路及び前記第２の伝送路から受信したときの前記スレーブタイマ値を収集し、この収集したスレーブタイマ値と前記各モジュールの配置位置とに基づき前記マスタモジュールと前記スレーブモジュールそれぞれとの間の伝送遅延時間を演算し、当該伝送遅延時間と前記マスタモジュールの前記マスタタイマ値とを前記スレーブモジュールに送信し、前記スレーブモジュールは、前記マスタモジュールから前記伝送遅延時間及び前記マスタタイマ値を受信したとき、前記伝送遅延時間と前記マスタタイマ値との和を自モジュールのタイマのスレーブタイマ値として更新設定することにより、自モジュールのスレーブタイマ値を前記マスタタイマ値と同期化することを特徴としている。
【０００９】
また、本発明の請求項２にかかるプログラマブルコントローラシステムは、マスタモジュール及びスレーブモジュールが入出力データ交換バスを介してデータ交換を行い、前記マスタモジュールが前記スレーブモジュールを介して当該スレーブモジュールに接続された外部接続機器を制御するプログラマブルコントローラシステムにおいて、前記マスタモジュール及びスレーブモジュールはそれぞれタイマを有し、前記マスタモジュールは、当該マスタモジュールが有するタイマのマスタタイマ値に基づき定周期割込みを発生するマスタタクト割込み発生手段と、このマスタタクト割込み発生手段により起動され、前記スレーブモジュールから前記入出力データ交換バスを介して予め受信した入力データをもとに演算して出力データを生成する出力データ生成手段と、当該出力データ生成手段により生成された前記出力データを、前記入出力データ交換バスを介して前記スレーブモジュールに送信する出力データ送信手段と、前記スレーブモジュールが有するタイマのスレーブタイマ値と前記マスタタイマ値とを同期化させる同期化手段と、を有し、前記スレーブモジュールは、前記入出力データ交換バスから前記出力データを受信する受信手段と、前記同期化手段によって同期化された前記スレーブタイマ値に基づき、前記定周期割込みの発生タイミングと同一のタイミングを獲得し、このタイミングを基準に所定時間経過後にスレーブ割込みを発生するスレーブタクト割込み発生手段と、当該スレーブタクト割込み発生手段によって起動され、前記受信手段によって受信された前記出力データ、または前記出力データに基づき所定演算を行い当該演算により得た外部接続機器制御用のデータを前記外部接続機器に出力する出力手段と、を備え、前記入出力データ交換バスは、第１の伝送路及び第２の伝送路それぞれが前記マスタモジュール及び前記スレーブモジュールからなる複数のモジュールをデイジーチェーン接続し、該デイジーチェーン接続された両端の前記モジュールそれぞれで前記第１の伝送路と前記第２の伝送路とを接続してリング状の伝送路を構成し、前記同期化手段は、前記スレーブモジュールが一のメッセージを前記第１の伝送路及び前記第２の伝送路から受信したときの前記スレーブタイマ値を収集し、この収集したスレーブタイマ値と前記各モジュールの配置位置とに基づき前記マスタモジュールと前記スレーブモジュールそれぞれとの間の伝送遅延時間を演算し、当該伝送遅延時間と前記マスタモジュールの前記マスタタイマ値とを前記スレーブモジュールに送信し、前記スレーブモジュールは、前記マスタモジュールから前記伝送遅延時間及び前記マスタタイマ値を受信したとき、前記伝送遅延時間と前記マスタタイマ値との和を自モジュールのタイマのスレーブタイマ値として更新設定することにより、自モジュールのスレーブタイマ値を前記マスタタイマ値と同期化することを特徴としている。
【発明の効果】
【００１１】
本発明の請求項１にかかるプログラマブルコントローラシステムによれば、全モジュールで同期化させたタイマ値に基づき所定の定周期のタイミングでマスタモジュールでは出力データ生成手段を起動し、同一タイミングでスレーブモジュールでは出力手段を起動するため、マスタモジュールの出力データ生成手段での出力データの生成と、スレーブモジュールでのマスタモジュールからの出力データまたはこの出力データをもとに演算した外部接続機器制御データの外部接続機器への出力とを、同一タイミングで実行させることができ、各モジュールを高精度に同期させることができる。このため、外部接続機器どうしをより高精度に同期動作及び協調動作させることができる。
【００１２】
また、本発明の請求項２にかかるプログラマブルコントローラシステムによれば、全モジュールで同期化させたタイマ値に基づきマスタモジュールでは定周期割込みの発生タイミングで出力データ生成手段を起動し、スレーブモジュールでは、マスタモジュールの定周期割込みの発生タイミングと同一のタイミングを基準に所定時間経過後に発生されるスレーブ割込みのタイミングで出力手段を起動するため、マスタモジュールの出力データ生成手段での出力データの生成と、各スレーブモジュールでのマスタモジュールからの出力データまたはこの出力データをもとに演算した外部接続機器制御データの外部接続機器への出力とを、所定時間のずれをもって同一の定周期で実行させることができる。
【００１３】
さらに、請求項１又は請求項２にかかるプログラマブルコントローラシステムは、マスタモジュールとスレーブモジュールそれぞれとの間の伝送遅延時間を演算し、この伝送遅延時間とマスタモジュールのマスタタイマ値とをスレーブモジュールに送信し、スレーブモジュールは、マスタモジュールからの伝送遅延時間とマスタタイマ値との和を自モジュールのタイマのスレーブタイマ値として更新設定するようにしたため、マスタタイマ値とスレーブタイマ値とを高精度に一致させることができ、すなわち高精度に同期化させることができる。
【図面の簡単な説明】
【００１４】
【図１】本発明を適用したプログラマブルコントローラシステムの一例を示す構成図である。
【図２】モジュールの接続状態を表す説明図である。
【図３】モジュールの概略構成を示すブロック図である。
【図４】モジュールの動作説明に供する説明図である。
【図５】マスタモジュールで実行されるシステム同期処理の処理手順の一例を示すフローチャートである。
【図６】スレーブモジュールで実行される同期化処理の処理手順の一例を示すフローチャートである。
【図７】同期化時の動作説明に供する説明図である。
【図８】タイマ値収集メッセージで収集されたタイマ情報の一例である。
【図９】伝送遅延時間の演算方法を説明するための説明図である。
【図１０】同期化時の動作説明に供する説明図である。
【図１１】同期化時の動作説明に供する説明図である。
【図１２】システム制御処理時の動作説明に供する説明図である。
【図１３】マスタモジュールで実行されるシステム制御処理の処理手順の一例を示すフローチャートである。
【図１４】スレーブモジュールで実行されるシステム制御処理の処理手順の一例を示すフローチャートである。
【図１５】第２の実施の形態におけるマスタモジュールで実行されるシステム制御処理の処理手順の一例を示すフローチャートである。
【図１６】第２の実施の形態におけるシステム制御処理時の動作説明に供する説明図である。
【図１７】第２の実施の形態におけるスレーブモジュールで実行されるシステム制御処理の処理手順の一例を示すフローチャートである。
【図１８】従来のシステム制御処理時の動作説明に供する説明図である。
【発明を実施するための形態】
【００１５】
以下、本発明の実施の形態を説明する。
まず、第１の実施の形態を説明する。
図１は、本発明を適用したプログラマブルコントローラシステムの一例を示す構成図であって、例えばＸ−Ｙ軸平面上で位置決めを行う加工機など、モーションシステムの駆動制御を行うプログラマブルコントローラシステムである。
このプログラマブルコントローラシステムは、例えば、モジュール“Ａ”〜モジュール“Ｅ”の５つのモジュールを備えて構成される。モジュール“Ａ”はＣＰＵモジュール、モジュール“Ｂ”〜モジュール“Ｅ”はＩＯモジュールであって、ＣＰＵモジュール“Ａ”がリング上に唯一存在するマスタモジュールとして動作する。ＩＯモジュールは、ＣＰＵモジュールからの制御データに応じて、その各ＩＯモジュールに接続された外部接続機器ｘを駆動制御する。前記外部接続機器ｘは、例えば前記加工機の各部を駆動するためのモータを制御するためのインバータや、サーボ機構などである。
【００１６】
このプログラマブルコントローラシステムでは、マスタモジュールであるＣＰＵモジュール“Ａ”がモジュール間でのタイマの同期化を図る。また、各モジュールはモジュール間でデータの授受を行い、ＣＰＵモジュールはＩＯモジュールから所定の各種機器データを受信するデータ受信処理、受信した各種機器データに基づき所定の演算処理を行って各ＩＯモジュールへの前記制御データ等を生成する制御演算処理、生成した制御データをＩＯモジュールに送信するデータ送信処理等を行う。ＩＯモジュールは、ＣＰＵモジュールからの制御データを受信するデータ受信処理、受信した制御データに演算加工し前記外部接続機器ｘの駆動制御用の外部接続機器制御データを生成し、これを外部接続機器ｘに出力する等の外部接続機器ｘの駆動制御を行うと共に外部接続機器ｘの各部の位置情報等の各種機器データを収集する等の駆動処理、収集した各種機器データをＣＰＵモジュールに送信するデータ送信処理等を行う。
このとき、各モジュールでは、受信データに対する処理を、定周期のタクト割込み発生タイミングで実行する。このタクト割込み発生タイミングは、各モジュールのタイマ値に基づき決定される。
【００１７】
まず、プログラマブルコントローラシステムの詳細な構成を説明する。
図１において、各モジュールは、モジュール“Ｅ”、モジュール“Ａ”、モジュール“Ｂ”、モジュール“Ｃ”、モジュール“Ｄ”の順にデイジーチェーン接続され、隣接するモジュール間は、それぞれ１対１にピアツーピアで接続される。すなわち、モジュール“Ｅ”及びモジュール“Ａ”間は、ケーブルＬ１で接続され、モジュール“Ａ”及びモジュール“Ｂ”間はケーブルＬ２で接続され、モジュール“Ｂ”及びモジュール“Ｃ”間はケーブルＬ３で接続され、モジュール“Ｃ”及びモジュール“Ｄ”間はケーブルＬ４で接続される。
【００１８】
各モジュールは、第１の接続端子１１と第２の接続端子１２との２つのケーブル接続口を備え、一方のモジュールの第１の接続端子１１と他方のモジュールの第２の接続端子１２とを対応させて接続される。すなわち、モジュール“Ｅ”の第２の接続端子１２とケーブルＬ１の一端とを接続し、モジュール“Ａ”の第１の接続端子１１とケーブルＬ１の他端とを接続することによりモジュール“Ｅ”とモジュール“Ａ”とをピアツーピア接続する。同様にモジュール“Ａ”の第２の接続端子１２及びモジュール“Ｂ”の第１の接続端子１１間、モジュール“Ｂ”の第２の接続端子１２及びモジュール“Ｃ”の第１の接続端子１１間、モジュール“Ｃ”の第２の接続端子１２及びモジュール“Ｄ”の第１の接続端子１１間を接続することにより、隣接するモジュール間がピアツーピアで接続されたプログラマブルコントローラシステムが形成される。
【００１９】
各ケーブルＬｎ（ｎ＝１〜４）は、図２に示すように、第１の配線Ｌ11と当該第１の配線Ｌ11と同一長さの第２の配線Ｌ22とを有する。
各モジュールは、図２に示すように、ケーブルＬｎ及びケーブルＬｎ＋１の第１の配線Ｌ11どうし及び第２の配線Ｌ22どうしを、モジュールを介して接続する。また、端部のモジュールであって、一方の接続端子１１又は１２のみにケーブルＬｎが接続されているモジュール“Ｄ”又は“Ｅ”は、接続されたケーブルＬｎの第１の配線Ｌ11と第２の配線Ｌ22とを内部で接続する。すなわち、モジュール“Ｄ”は、ケーブルＬ４の第１の配線Ｌ11と第２の配線Ｌ22とを接続する。また、モジュール“Ｅ”は、ケーブルＬ１の第１の配線Ｌ11と第２の配線Ｌ22とを接続する。
これによって、各モジュール“Ａ”〜“Ｃ”を介して接続された一連の第１の配線Ｌ11と、一連の第２の配線Ｌ22とが、端部のモジュール“Ｄ”及び“Ｅ”で接続されて、各ケーブルＬｎの第１の配線Ｌ11と第２の配線Ｌ22とからなるリング状の伝送路を形成している。このリング状の伝送路が入出力データ交換バスとして用いられる。
【００２０】
なお、図２において、１３は処理部である。この処理部１３は、ケーブルＬｎを介して伝送されるメッセージの送受信処理及び受信した自モジュール宛のメッセージにしたがって所定の演算や外部接続機器ｘへのデータの出力など所定の処理を行なう。また、予め設定されたタイミングでマスタモジュール及びスレーブモジュールを含むモジュール間でのタイマ値の同期化処理を行うと共に、同期化されたタイマ値を用いて前記タクト割込み発生タイミングを決定し、決定したタクト割込み発生タイミングでモジュール間でのデータ授受及び受信データに対する所定のデータ処理を行う。処理部１３は、図３に示すように伝送処理部１３ａとバッファ１３ｂとを備えている。リング状の伝送路を介してのデータの伝送制御は伝送処理部１３ａで行っており、伝送処理部１３ａは、バッファ１３ｂに格納された送信データをリング状の伝送路を介して送信すると共に、リング状の伝送路から受信した受信データをバッファ１３ｂに取り込むようになっている。
【００２１】
各モジュールは、図３に示すように、ケーブルＬｎが接続される第１の接続端子１１及び第２の接続端子１２と、処理部１３と、ラッチ回路１５及び１６と、タイマ１７と、切り替え回路１８と、を備える。
ラッチ回路１５は、第１の接続端子１１に接続される第１の配線Ｌ11から伝送メッセージを入力すると共に、伝送メッセージを切り替え回路１８に出力する。
そして、ラッチ回路１５は、伝送メッセージの予め設定された特定領域を参照し、この特定領域のデータが予め設定した特定情報であるとき、タイマ１７のタイマ値をラッチすると共に、第１のタイマ値有効フラグＦ１を“１”とし、第１のタイマ値有効フラグＦ１とラッチタイマ値とを処理部１３に出力する。伝送メッセージの特定領域のデータが前記特定情報でないときにはタイマ値のラッチは行なわない。
【００２２】
一方、ラッチ回路１６は、第２の接続端子１２に接続される第２の配線Ｌ22からの伝送メッセージを入力すると共に、伝送メッセージを切り替え回路１８に出力する。
そして、ラッチ回路１６は、伝送メッセージの予め設定された前記特定領域を参照し、この特定領域のデータが前記特定情報であるとき、タイマ１７のタイマ値をラッチし、第２のタイマ値有効フラグＦ２を“１”とし、第２のタイマ値有効フラグＦ２とラッチタイマ値とを処理部１３に出力する。伝送メッセージの前記特定領域のデータが特定情報でないときにはタイマ値のラッチは行なわない。
【００２３】
これらラッチ回路１５及び１６は、上述のように特定のメッセージを受信したかを監視し、受信したときにタイマ１７のタイマ値を獲得し、タイマ値及びタイマ値有効フラグを“１”として通知するだけの回路である。したがって、これらラッチ回路１５及び１６を追加したとしても、メッセージの伝送に影響を与えるものではない。また、処理部１３と無関係にタイマ値のラッチのみを行なうため回路全体に対する影響も小さい。
タイマ１７は、水晶振動子を含んで構成され、タイマ値をラッチ回路１５及び１６に出力する。
【００２４】
切り替え回路１８は、自モジュールが、端部のモジュールであるか否かに応じて、処理部１３、ラッチ回路１５及び１６、第１の接続端子１１、第２の接続端子１２との間で接続先を切り替える。なお、自モジュールが端部のモジュールであるか否かは、例えば、各モジュールにおいて、第１の接続端子１１と第２の接続端子１２との何れか一方のみにケーブルが接続されている状態であるか否かを、例えば電気的に未接続状態であるか否かを検出すること等により検出すればよい。また、切り替え回路１８における切り替えは、ソフトウェア的に切り替えるようにしてもよく、また物理的に接続先を切り替えるように構成してもよい。
【００２５】
そして、切り替え回路１８は、自モジュールが端部に位置していないとき、すなわちモジュール間に接続された中間モジュールである場合には、図４（ａ）に示すように、ラッチ回路１５からの伝送メッセージをそのまま処理部１３に伝達し、処理部１３からの伝送メッセージを第２の接続端子１２の第１の配線Ｌ11に送出する。
また、切り替え回路１８は、ラッチ回路１６からの伝送メッセージをそのまま第１の接続端子１１の第２の配線Ｌ22に送出する。
【００２６】
一方、自モジュールが右端のモジュールである場合、すなわち、図１において、モジュール“Ｄ”である場合には、第２の接続端子１２には、ケーブルＬｎが接続されないため、切り替え回路１８は、図４（ｂ）に示すように、ラッチ回路１５からの伝送メッセージを処理部１３に伝達し、処理部１３からの伝送メッセージを第１の接続端子１１の第２の配線Ｌ22に送出する。
【００２７】
同様に、自モジュールが左端のモジュールである場合、すなわち、図１において、モジュール“Ｅ”である場合には、第１の接続端子１１には、ケーブルＬｎが接続されていないため、切り替え回路１８は、図４（ｃ）に示すように、ラッチ回路１６からの伝送メッセージをそのまま処理部１３に伝達し、処理部１３からの伝送メッセージを第２の接続端子１２の第１の配線Ｌ11に送出する。
【００２８】
そして、処理部１３は、切り替え回路１８を介して受信した伝送メッセージに基づき前記送受信処理及びメッセージ処理等を行ない、必要に応じて伝送メッセージを生成しこれを切り替え回路１８に出力する。また、このとき、受信した伝送メッセージを一旦バッファ１３ｂに格納し、設定された定周期タイミングでバッファ１３ｂに記憶されたデータを読み出し、これに基づき所定のデータ処理を実行する。
【００２９】
また、処理部１３は、ラッチ回路１５及び１６からの第１のタイマ値有効フラグＦ１及びラッチタイマ値、第２のタイマ値有効フラグＦ２及びラッチタイマ値を入力する。
そして、自モジュールがマスタモジュールであるときには、システム同期処理を実行して各モジュールからラッチタイマ値を収集し、これに基づきモジュール間でのタイマ値の同期を図る。
【００３０】
一方、自モジュールがマスタモジュールでないとき、つまりスレーブモジュールであるときには、マスタモジュールからタイマラッチ指示メッセージを受信したときに同期化処理を実行し、マスタモジュールからの指示にしたがって、マスタモジュールとの間のタイマ値の同期化を図る。
そして、このようにしてモジュール間で同期化されたタイマ値を用いて、バッファ１３ｂに格納された他モジュールからの受信データを読み込み、これに基づき所定の処理を実行する。
【００３１】
次に、プログラマブルコントローラシステムで実行されるモジュール間でのタイマ値の同期化について、図５及び図６を伴って説明する。図５は、マスタモジュールで実行されるシステム同期処理、図６は、スレーブモジュールで実行される同期化処理の処理手順を示すフローチャートである。
マスタモジュールでは、このシステム同期処理を起動時及び予め設定された定周期で実行する。
【００３２】
マスタモジュールでは、図５に示すように、まず、ステップＳ１で、各モジュールに対してタイマ１７のラッチを指示するタイマラッチ指示メッセージを送信する。このとき、マスタモジュールは、タイマラッチ指示メッセージを、各モジュール宛にブロードキャスト通信により送信する。また、マスタモジュールでは、タイマラッチ指示メッセージの予め設定した領域に、このメッセージがタイマラッチ指示メッセージであることを特定するための特定情報を設定して送信する。
【００３３】
スレーブモジュールでは、タイマラッチ指示メッセージを受信すると、ラッチ回路１５又は１６で、タイマラッチ指示メッセージの予め設定された特定領域のデータが所定の特定情報であるか否かを判断する。このとき、ラッチ回路１５及び１６には、参照すべき特定領域及び特定情報として、マスタモジュールから送信される前記タイマラッチ指示メッセージの、当該メッセージがタイマラッチ指示メッセージであることを特定する特定情報が格納されている領域と、前記タイマラッチ指示メッセージであることを特定する特定情報とを設定しておく。
【００３４】
ラッチ回路１５又は１６は、受信したメッセージの特定領域を参照し、そのデータがタイマラッチ指示メッセージであることを特定する特定情報と一致するとき、受信したメッセージはタイマラッチ指示メッセージであると認識し、この時点におけるタイマ１７のタイマ値をラッチする。そして、ラッチ回路１５でタイマ値をラッチしたときには第１のタイマ値有効フラグＦ１を“１”、ラッチ回路１６でタイマ値をラッチしたときには第２のタイマ値有効フラグＦ２を“１”、として、タイマ値有効フラグとラッチタイマ値とを対応付けて処理部１３に出力する。
【００３５】
このとき、図２に示すように、第１の配線Ｌ11を介して伝送されるタイマラッチ指示メッセージは、端部のモジュールで折り返されて第２の配線Ｌ22を介して伝送されるため、モジュール間に配置されたスレーブモジュールでは、第１の配線Ｌ11からタイマラッチ指示メッセージを受信した後、再度第２の配線Ｌ22から同一のタイマラッチ指示メッセージを受信することになる。
このため、モジュール間に配置されたスレーブモジュールでは、ラッチ回路１５及び１６のそれぞれによりタイマ値がラッチされることになる。
【００３６】
一方、端部に配置されたスレーブモジュールでは、内部で折り返しているため、タイマラッチ指示メッセージは、ラッチ回路１５及び１６の何れか一方のみにより検出され、タイマ値がラッチされることになる。
スレーブモジュールの処理部１３では、タイマラッチ指示メッセージを受信し、これに伴いラッチ回路１５、１６から、ラッチタイマ値及びタイマ値有効フラグを入力すると、これら情報を所定の記憶領域に保持する（図６ステップＳ１１）。
マスタモジュールでは、各モジュールを周回したタイマラッチ指示メッセージを受信するとこれを伝送路から削除し、次に、タイマ値収集メッセージを送信し、各モジュールに対して、各モジュールでラッチしたタイマ情報の付加を指示する（図５ステップＳ２）。
【００３７】
スレーブモジュールでは、タイマ値収集メッセージを受信すると、図６のステップＳ１２に移行し、受信したタイマ値収集メッセージに、ラッチ回路１５及び１６の両方又は何れかから通知されたタイマ値有効フラグ及びラッチタイマ値をタイマ情報とし、これをタイマ値収集メッセージの予め設定された領域に、その領域の先頭から順に格納する。
前述のように、モジュール間に位置するモジュールでは、往路と復路との２回、同一のタイマラッチ指示メッセージを受信するため、タイマ情報は、往き時におけるタイマ値有効フラグ及びラッチタイマ値と、戻り時におけるタイマ値有効フラグ及びラッチタイマ値とで構成される。
【００３８】
一方、右端又は左端に位置するモジュールでは、往路又は復路の何れか一回のみタイマラッチ指示メッセージを受信する。このため、右端又は左端のモジュールでは、ラッチ回路１５又は１６の何れか一方でのみタイマ値をラッチする。処理部１３では、ラッチ回路１５からラッチタイマ値を受信しなかったときには第１のタイマ値有効フラグＦ１を“０”とし、ラッチ回路１６からラッチタイマ値を受信しなかったときには第２のタイマ値有効フラグＦ２を“０”とする。そして、“０”に設定されたタイマ値有効フラグと、ラッチ回路１５又は１６から通知されたラッチタイマ値及びこれに対応する“１”に設定されたタイマ値有効フラグと、をタイマ情報として格納する。
【００３９】
そして、自モジュールにおけるタイマ情報を格納した後、これを次モジュールに送出する。
各スレーブモジュールがこの処理を行なうことにより、各モジュールにおけるタイマ情報が、タイマ値収集メッセージの所定の領域に格納され、且つ経由したスレーブモジュールの並び順に、各モジュールにおけるタイマ情報が格納されることになる。
マスタモジュールは、各スレーブモジュールを周回したタイマ値収集用メッセージを受信するとこれを回収する。そして、各スレーブモジュールが格納したタイマ情報の最後に、自モジュールにおけるタイマ情報を格納する（図５ステップＳ３）。
【００４０】
マスタモジュールは、続いて、各スレーブモジュール及び自モジュールにおけるタイマ情報に基づき、マスタモジュールから送信したタイマラッチ指示メッセージが各スレーブモジュールに到達するまでの所要時間である伝送遅延時間を、到達先のモジュール毎にそれぞれ算出する（図５ステップＳ４）。この算出方法は後述する。
マスタモジュールは、モジュールごとに伝送遅延時間を算出すると算出した伝送遅延時間を各モジュールに通知するための伝送遅延時間設定メッセージを各モジュール宛に送出する（図５ステップＳ５）。
【００４１】
スレーブモジュールは、伝送遅延時間設定メッセージを受信すると、自モジュールの伝送遅延時間を獲得する（図６ステップＳ１３）。
マスタモジュールは、各モジュールを周回して戻ってきた伝送遅延時間設定メッセージを伝送路上から削除する。そして、現時点におけるタイマ１７のタイマ値を獲得し、これをマスタタイマ値とし、このマスタタイマ値を伝送するためのマスタタイマ値配布メッセージを生成し、これを各モジュール宛にブロードキャストにより送信する（図５ステップＳ６）。そして、システム同期処理を終了する。
【００４２】
スレーブモジュールは、マスタタイマ値配布メッセージをブロードキャストにより受信すると、受信したマスタタイマ値配布メッセージからマスタタイマ値を獲得し、獲得したマスタタイマ値と、先に伝送遅延時間設定メッセージから獲得した自モジュールの伝送遅延時間とを加算し、これを現時点におけるタイマ値とし、自モジュールのタイマ１７のタイマ値を更新設定する（図６ステップＳ１４）。そして、処理部１３では、同期化処理を終了する。
【００４３】
次に、上記タイマ値の同期化時の動作を説明する。
図１に示すモジュール“Ａ”〜“Ｅ”からなる論理的なリング状のネットワークが構成されたネットワークシステムにおいて、各モジュールのタイマ値の同期を行なうものとする。
マスタモジュール“Ａ”では、まず、タイマラッチ指示メッセージを各モジュール宛にブロードキャストで送信し（図５ステップＳ１）、次に、各モジュールでのタイマ情報の付加を指示するタイマ値収集メッセージを各モジュール宛に送信する（図５ステップＳ２）。
【００４４】
このネットワークシステムは、論理的なリング状のネットワークを構成しているため、各スレーブモジュールでは、タイマラッチ指示メッセージを、第１の配線側Ｌ11と第２の配線側Ｌ22との両方から入力し、且つ端部のモジュールでは、タイマラッチ指示メッセージをそのモジュール内で折り返しているため、第１の配線Ｌ11側又は第２の配線Ｌ22側との何れか一方から入力することになる。
【００４５】
したがって、マスタモジュール“Ａ”がタイマラッチ指示メッセージを送出してからの経過時間は、図７のように表されることになる。なお、図７において縦軸は経過時間、横軸はネットワークシステム上におけるタイマラッチ指示メッセージの伝達状況を表す。
また、各スレーブモジュールではタイマラッチ指示メッセージを受信すると、図８に示すように、ラッチ回路１５、１６のうち、タイマ値をラッチしたラッチ回路に対応するタイマ値有効フラグを“１”とし、ラッチ回路１５、１６でタイマラッチ指示メッセージを受信した時点におけるタイマ１７のタイマ値と、第１、第２のタイマ値有効フラグとを処理部１３に通知し、処理部１３では、通知されたタイマ値有効フラグとラッチタイマ値とを対応付けて記憶する（図６ステップＳ１１）。
【００４６】
続いて、スレーブモジュールでは、ラッチ回路１５又は１６から獲得したラッチタイマ値及びタイマ値有効フラグからなるタイマ情報を、タイマ値収集メッセージの所定の領域に順次格納する（図６ステップＳ１２）。
このため、マスタモジュール“Ａ”に戻ってきたタイマ値収集メッセージには、各モジュールのタイマ情報が各モジュールの配置順に格納されている。
例えば、各モジュールがラッチ回路１５でラッチしたラッチタイマ値をＴＡ１〜ＴＥ１とし、ラッチ回路１６でタイマ値をラッチしたタイミングをＴＡ２〜ＴＥ２とすると、図１１に示すように、タイマラッチ指示メッセージには、モジュールの並び順に各モジュールを特定する局番とタイマ情報とが対応付けられて格納され、タイマ情報としてタイマ値有効フラグとラッチタイマ値とが格納される。
【００４７】
モジュール“Ｂ”は、モジュールとモジュールとの間に配置されたモジュールであって、ラッチ回路１５及び１６の両方によりタイマラッチ指示メッセージが検出されるため、ラッチ回路１５でラッチしたラッチタイマ値ＴＢ１及び第１のタイマ値有効フラグＦ１＝“１”と、ラッチ回路１６でラッチしたラッチタイマ値ＴＢ２及び第２のタイマ値有効フラグ値Ｆ２＝“１”とが格納され、同様に、モジュール“Ｃ”、また、モジュール“Ａ”においても、それぞれラッチ回路１５及び１６によるラッチタイマ値と、第１のタイマ値有効フラグＦ１＝“１”及び第２のタイマ値有効フラグＦ２＝“１”と、が格納される。
【００４８】
一方、モジュール“Ｄ”は右端のモジュールであり、ラッチ回路１５でのみタイマ値がラッチされるため、ラッチタイマ値ＴＤ１と第１のタイマ値有効フラグＦ１＝“１”とが格納され、ラッチ回路１６による第２のタイマ値有効フラグＦ２は“０”として格納される。
同様に、モジュール“Ｅ”は左端のモジュールであり、ラッチ回路１６でのみタイマ値がラッチされるため、ラッチタイマ値ＴＥ２と第２のタイマ値有効フラグＦ２＝“１”とが格納され、ラッチ回路１５による第１のタイマ値有効フラグＦ１は“０”として設定される。
【００４９】
したがって、各モジュールを周回したタイマ値収集メッセージを参照することにより、タイマ値有効フラグの一方が“０”であるモジュールは端部のモジュールであると判断することができる。そして、第１のタイマ値有効フラグＦ１が“０”の場合には、第１の接続端子１１にケーブルＬｎが接続されていないことを意味するため、左端のモジュールであると判断することができる。同様に、第２のタイマ値有効フラグＦ２が“０”の場合には、第２の接続端子１２にケーブルＬｎが接続されていないことを意味するため、右端のモジュールであると判断することができる。
【００５０】
このため、マスタモジュール“Ａ”では、図８のタイマ値収集メッセージに格納された各モジュールのタイマ情報の格納順及びタイマ値有効フラグが“０”であるか否かに基づき、マスタモジュール“Ａ”から、モジュール“Ｂ”、“Ｃ”、“Ｄ”、“Ｅ”、“Ａ”の並びでリング状のネットワークが形成され、且つモジュール“Ｄ”が右端のモジュール、モジュール“Ｅ”が左端のモジュールであることを認識することができ、すなわち、図１に示す並び順で各モジュールが接続されていることを認識することができる。
【００５１】
そして、マスタモジュール“Ａ”では、図８に示す、各モジュールにおけるタイマ情報を獲得すると、これに基づき各モジュールの配置順を検出し、これに基づき伝送遅延時間を演算する（図５ステップＳ４）。
ここで、この時点では、各モジュール間においてタイマ値の同期はとられていないため、それぞれのモジュールにおけるタイマ値の間に何ら相関関係はない。
しかしながら、同一モジュール内のタイマ値、例えば、ＴＢ１とＴＢ２とは、同一のタイマ１７の値をラッチしているため、このタイマ値ＴＢ１とＴＢ２との差分は、モジュール“Ｂ”において、ラッチタイマ指示メッセージを上流側から受信した時点から同一のメッセージが下流側から戻ってくるまでの所要時間（以下、受信経過時間いう。）を表している。
【００５２】
ネットワークシステム上の、各モジュールにおける受信経過時間どうしは比較可能なデータであり、例えばモジュール“Ｂ”における受信経過時間ΔＴＢと、モジュール“Ｃ”における受信経過時間ΔＴＣとは比較することができる。
モジュール“Ｂ”における受信経過時間ΔＴＢとモジュール“Ｃ”における受信経過時間ΔＴＣとの差分ＤＩＦＦBC（＝ΔＴＢ−ΔＴＣ）は、図７及び図９に示すように、「モジュール“Ｂ”が上流からメッセージを受信してから、このメッセージがモジュール“Ｃ”に到達するまで（図９中の太線ｍ１部分）の所要時間」と「モジュール“Ｃ”が下流からメッセージを受信してからこのメッセージがモジュール“Ｂ”に到達するまで（図９中の太線ｍ２部分）の所要時間」との和に相当することになる。
したがって、差分ＤＩＦＦBCは次式（１）で表すことができる。
ＤＩＦＦBC＝（ＴＢ２−ＴＢ１）−（ＴＣ２−ＴＣ１）            ……（１）
【００５３】
また、差分ＤＩＦＦBCは、図７に示すように、モジュール“Ｂ”−“Ｃ”間のケーブルＬ３におけるモジュール間伝送時間と、モジュール“Ｂ”にメッセージが到達してからメッセージが送出されるまでの所要時間、すなわち、メッセージの中継及びメッセージを受信するか否かの判定に要する時間（以下、メッセージ判定処理時間という。）と、モジュール“Ｃ”に下流側からメッセージが到達してからモジュール“Ｃ”がこれを中継してメッセージが送出されるまでの所要時間（以下、中継処理時間という。）との和で表すことができる。
【００５４】
ここで、モジュール“Ｂ”のメッセージ判定処理時間をＴαとし、モジュール“Ｂ”−“Ｃ”間におけるケーブルＬ３におけるモジュール間伝送時間をＬBCとし、モジュール“Ｃ”での中継処理時間は差分ＤＩＦＦBCに比較して十分小さいものとすると、差分ＤＩＦＦBCは略次式（２）で表すことができる。つまり、ケーブルＬ３は、第１の配線Ｌ11と第２の配線Ｌ22とが同一長さであるため、第１の配線Ｌ11と第２の配線Ｌ22とでモジュール間伝送時間は同一とみなすことができる。したがって、次式（２）が成り立つ。
ＤＩＦＦBC＝２×ＬBC＋Ｔα            ……（２）
【００５５】
したがって（１）及び（２）式から、隣接するモジュール“Ｂ”−“Ｃ”間のケーブルＬ３におけるモジュール間伝送時間ＬBCは、次式（３）で表すことができる。
ＬBC＝｛（ＴＢ２−ＴＢ１）−（ＴＣ２−ＴＣ１）−Ｔα｝／２    ……（３）
隣接するモジュール“Ｃ”−“Ｄ”間のケーブルＬ４におけるモジュール間伝送時間ＬCDも、前記式（３）と同様の手順で算出することができる。
また、以上の例では、マスタモジュール“Ａ”よりも右側に配置されたモジュールにおいて、隣接するモジュール間のモジュール間伝送時間を算出しているが、左側に配置されたモジュールの場合も同様の手順で算出することができる。
【００５６】
ただし、マスタモジュール“Ａ”とこれに隣接するモジュールとの間のモジュール間伝送時間は、マスタモジュール“Ａ”がラッチタイマ指示メッセージを上流側から受信した時点から同一のメッセージが下流側から戻ってくるまでの所要時間である左側受信経過時間と、マスタモジュール“Ａ”がラッチタイマ指示メッセージを下流側に送出した時点から同一のメッセージが下流側から戻ってくるまでの所要時間である右側受信経過時間と、を用いて算出する。
【００５７】
前記左側受信経過時間は、マスタモジュール“Ａ”におけるタイマ値ＴＡ１及びＴＡ２の差分「ＴＡ２−ＴＡ１」で算出することができる。また、右側受信経過間は、マスタモジュール“Ａ”がラッチタイマ指示メッセージを下流側に送出した時点から、論理的なリング状の伝送路を一周してマスタモジュール“Ａ”に戻りこれに対するマスタモジュール“Ａ”での処理が終了するまでの所要時間（以後、メッセージ一周時間という）をＴとしたとき、「Ｔ−（ＴＡ２−ＴＡ１）」で表すことができる。
【００５８】
なお、メッセージ一周時間は、マスタモジュール“Ａ”の処理部１３において計測すればよく、処理部１３からラッチタイマ指示メッセージを下流側に送出した時点を開始時点、ラッチタイマ指示メッセージが論理的なリング状の伝送路を一周してマスタモジュールに戻り、これに対するマスタモジュール“Ａ”での処理が終了した時点を終了時点として開始時点から終了時点までの所要時間を演算すればよい。
【００５９】
そして、マスタモジュール“Ａ”と隣接するスレーブモジュール“Ｂ”との間のモジュール間伝送時間を演算するときには、右側受信経過時間「Ｔ−（ＴＡ２−ＴＡ１）」と、モジュール“Ｂ”における受信経過時間とに基づき上記（３）式と同様の手順で算出する。また、マスタモジュール“Ａ”とモジュール“Ｅ”との間のモジュール間伝送時間を演算するときには、左側受信経過時間「ＴＡ２−ＴＡ１」とモジュール“Ｅ”における受信経過時間とに基づき上記（３）式と同様の手順で算出する。
【００６０】
このようにして、モジュール“Ａ”−“Ｂ”間、モジュール“Ｂ”−“Ｃ”間、モジュール“Ｃ”−“Ｄ”間、モジュール“Ｅ”−“Ａ”間についてそれぞれモジュール間伝送時間を算出したならば、これらに基づき、マスタモジュール“Ａ”と各モジュールとの間の伝送遅延時間を算出する。
具体的には、マスタモジュール“Ａ”とターゲットモジュールとの間に介在する各ケーブルのモジュール間伝送時間及び介在するモジュールにおける処理時間との和を算出しこれをターゲットモジュールまでの伝送遅延時間とする。
【００６１】
例えば、ターゲットモジュールを“Ｃ”とする。ネットワークシステムにおける各モジュールの配置位置は、タイマ値収集メッセージに付加された各モジュールにおけるラッチ情報の並び順から把握することができる。
図１に示すように、マスタモジュール“Ａ”とターゲットモジュール“Ｃ”との間にはモジュール“Ｂ”が介在する。このため、伝送遅延時間は、モジュール“Ａ”−“Ｂ”間のケーブルＬ２におけるモジュール間伝送時間と、モジュール“Ｂ”におけるメッセージ判定処理時間と、モジュール“Ｂ”−“Ｃ”間のケーブルＬ３におけるモジュール間伝送時間と、の和で表されることがわかる。
【００６２】
ここで、各モジュールにおける処理部１３の演算処理性能が同一であるものとすると、各モジュールにおけるメッセージ判定処理時間は同等とみなすことができるため、“Ｔα”として表すことができる。
したがって、マスタモジュール“Ａ”からターゲットモジュールまでの間の伝送遅延時間は、マスタモジュール“Ａ”からターゲットモジュールまでの間に介在する各ケーブルにおけるモジュール間伝送時間と、マスタモジュール“Ａ”からターゲットモジュールまでの間に介在するモジュールの数×メッセージ判定処理時間“Ｔα”との和から算出することができる。
【００６３】
つまり、マスタモジュール“Ａ”とモジュール“Ｃ”との間の伝送遅延時間は、モジュール“Ａ”−Ｃ”間のケーブルＬ２におけるモジュール間伝送時間と、モジュール“Ｂ”−“Ｃ”間のケーブルＬ３におけるモジュール間伝送時間と、モジュールの数（この場合“１”）×Ｔαとの和で表すことができる。
なお、モジュールにおけるメッセージ判定処理時間Ｔαは、予め実測しておくこと、或いは、設計時に、メッセージの中継及び受信するか否かの判定に要する所要時間を論理的に算出しておくこと等により予め設定しておけばよい。
【００６４】
マスタモジュール“Ａ”では、このようにしてマスタモジュール“Ａ”から各ターゲットモジュールまでの伝送遅延時間を算出する。そして、各ターゲットモジュールと算出した伝送遅延時間とを対応付け、この伝送遅延時間を各モジュールに伝達するための伝送遅延時間設定メッセージを生成し、これを各モジュール宛に送信する（図５ステップＳ５）。
各スレーブモジュールでは、伝送遅延時間設定メッセージを受信すると、自モジュールの伝送遅延時間を獲得し、これを所定の記憶領域に保存する（図６ステップＳ１３）。
【００６５】
マスタモジュールでは、各モジュールを周回した伝送遅延時間設定メッセージを受信すると、これを伝送路上から削除する。そして、現時点におけるタイマ１７のタイマ値を獲得し、これを各モジュールに伝達するためのマスタタイマ値配布メッセージを生成し、このマスタタイマ値配布メッセージをブロードキャストで各モジュール宛に送信する（図５ステップＳ６）。
【００６６】
各スレーブモジュールでは、マスタタイマ値配布メッセージを獲得すると、マスタタイマ値を獲得し、先に受信した自モジュールにおける伝送遅延時間とマスタタイマ値とを加算し、これを現時点におけるタイマ１７のタイマ値として更新設定する（図６ステップＳ１４）。
例えば、図１０に示すように、各モジュールの伝送遅延時間が、モジュール“Ｂ”は“１５”、モジュール“Ｃ”は“２０”、モジュール“Ｄ”は“３０”、モジュール“Ｅ”は“５５”、モジュール“Ａ”は“０”として通知されたものとする。
【００６７】
マスタモジュール“Ａ”からマスタタイマ値として“５０００”が通知されたとすると、図１１に示すように、モジュール“Ｂ”は、タイマ１７のタイマ値を“５０１５”に更新設定する。同様に、モジュール“Ｃ”は“５０２０”、モジュール“Ｄ”は“５０３０”、モジュール“Ｅ”は“５０５５”として設定する。
ここで、マスタモジュール“Ａ”のタイマ値が“５０００”であったとしても、マスタタイマ値通知メッセージがモジュール“Ｂ”に伝達されるまでには伝送遅延時間“１５”を要し、マスタタイマ値通知メッセージが実際にモジュール“Ｂ”に伝達された時点では、マスタモジュールのタイマ値は“５０１５”となっている。したがって、マスタタイマ値“５０００”と伝送遅延時間“１５”とを加算した“５０１５”をモジュール“Ｂ”におけるタイマ値と設定してすることにより、マスタモジュール“Ａ”のタイマ値と、モジュール“Ｂ”のタイマ値とを“５０１５”で同期させることができる。
【００６８】
つまり、伝送遅延時間は、マスタモジュール“Ａ”から送信されたタイマラッチ指示メッセージが各モジュールに伝達されるまでの所要時間である。したがって、通知されたマスタタイマ値と伝送遅延時間との和を各モジュールにおけるタイマ値として設定することにより、各モジュールでは、マスタモジュールから各モジュールにメッセージが伝送されるまでの所要時間を考慮して自モジュールにおけるタイマ値を更新設定しているため、各モジュールを高精度に同期させることができる。
【００６９】
また、先に通知された伝送遅延時間は、ブロードキャスト通信によりタイマラッチ指示メッセージを送信したときの各モジュールにおけるタイマラッチ指示メッセージの送受信タイミングに基づき算出された値である。そして、マスタタイマ値配布メッセージもブロードキャストにより送信されているため、このマスタタイマ値配布メッセージがマスタモジュールから送信されてから各モジュールに伝達されるまでの所要時間は、タイマラッチ指示メッセージがマスタモジュールから送信されてから各モジュールに伝達されるまでの所要時間と同等である。したがって、タイマラッチ指示メッセージの各モジュールにおける送受信タイミングに基づき各モジュールにおけるタイマ値を更新設定することによって、同等の条件で算出された伝送遅延時間に基づきタイマ値を更新設定することになり、より高精度に同期させることができる。
【００７０】
また、上記実施の形態においては、伝送遅延時間を前記（２）式に基づいて算出しており、前記（２）式では、モジュール“Ｂ”からモジュール“Ｃ”への伝送経路とモジュール“Ｃ”からモジュール“Ｂ”への伝送経路とが同一であるという前提で演算を行なっている。前述のように、モジュール“Ｂ”からモジュール“Ｃ”へのメッセージの伝送は、第１の配線Ｌ11により行い、モジュール“Ｃ”からモジュール“Ｂ”へのメッセージの伝送は第２の配線Ｌ22により行い、第１の配線Ｌ11と第２の配線Ｌ22とは同一の長さであるため、そのモジュール間伝送時間は同等とみなすことができる。
【００７１】
したがって、伝送メッセージの論理的な伝送経路は、モジュール“Ｃ”からモジュール“Ｂ”へ伝送する場合には、モジュール“Ｃ”、モジュール“Ｄ”、モジュール“Ｅ”、モジュール“Ａ”、モジュール“Ｂ“となり、モジュール“Ｂ”からモジュール“Ｃ”への伝送メッセージの伝送経路とは異なるが、この実施の形態においては、モジュール“Ｂ”からモジュール“Ｃ”へ及びモジュール“Ｃ”からモジュール“Ｂ”への物理的な伝送路における伝送時間を演算しており、モジュール“Ｂ”からモジュール“Ｃ”への伝送路である第１の配線Ｌ11とモジュール“Ｃ”からモジュール“Ｂ”への伝送路である第２の配線Ｌ22との長さは同一であってそのモジュール間伝送時間は同等であるため、モジュール“Ｂ”からモジュール“Ｃ”への伝送経路とモジュール“Ｃ”からモジュール“Ｂ”への伝送経路とが同一という前提で伝送遅延時間の演算を行なったとしても、的確に伝送遅延時間を演算することができる。
これにより、各モジュール間でのタイマ値の同期化が図られることになる。
【００７２】
次に、ＣＰＵモジュール及びＩＯモジュールにおいて実行される、システム制御処理について説明する。
ＣＰＵモジュールでは、ＩＯモジュールから各種機器データを獲得し、これに基づいて所定の制御演算処理を行って各ＩＯモジュールへの制御データを生成し、生成した制御データをＩＯモジュールに送信する。この一連の処理を繰り返し行うことにより、ＩＯモジュールを介してその外部接続機器ｘを制御する。
【００７３】
このとき、ＣＰＵモジュールでは、この一連の処理をタクト周期毎に実行する。このタクト周期は、リング状の伝送路におけるデータの伝送速度と同一速度の一定間隔の周期に設定される。
具体的には、図１２（ａ）に示すように、タクト周期毎に、受信データに基づく制御演算処理、制御演算処理により生成した制御データの送信処理、ＩＯモジュールからの各種機器データの受信処理を行い、且つ制御演算処理を、タクト周期の開始タイミングで開始し、これらの処理を次のタクト周期の開始タイミングまでに終了するようになっている。
【００７４】
一方、ＩＯモジュールでは、ＣＰＵモジュールから制御データを受信し、この制御データにしたがって前記外部接続機器ｘの駆動制御を行うための駆動データの生成や、外部接続機器ｘの各部の位置情報等の各種機器データの収集などといった駆動処理を行い、収集した各種機器データをＣＰＵモジュールに送信する。この処理を繰り返し行うことにより、ＣＰＵモジュールからの制御データに応じて外部接続機器ｘを駆動制御する。
【００７５】
このとき、ＩＯモジュールでは、この一連の処理をタクト周期毎に実行する。具体的には、図１２（ｃ）に示すように、タクト周期毎に、受信データに基づく駆動処理、この駆動処理により収集した各種機器データの送信処理、ＣＰＵモジュールからの制御データの受信処理を行い、且つ駆動処理をタクト周期の開始タイミングで開始し、これらの処理を、次のタクト周期の開始タイミングまでに終了するようになっている。
【００７６】
ここでＩＯモジュールにおけるタクト周期は、前記ＣＰＵモジュールにおけるタクト周期と同一周期に設定され、且つタクト周期の開始タイミングも同一タイミングに設定される。
このため、図１２に示すように、ＣＰＵモジュール及びＩＯモジュールでは、タクト周期毎に各モジュール間で、同一タイミングで制御演算処理及び駆動処理が開始されるようになっている。
【００７７】
なお、図１２において、（ａ）はＣＰＵモジュールにおける処理の流れを表し、（ｂ）はリング状の伝送路を構成するバス上での処理の流れを表し、（ｃ）はＩＯモジュールにおける処理の流れを表す。また、図１２中の“ＴＦ”とは、トータルフレーム方式で送信されるデータに対する処理を表す。“ＭＣ”とはマルチキャスト方式で送信されるデータに対する処理を表す。“演算時間”とは、各モジュールにおいて、受信データをもとに所定の演算処理を行っている時間を表す。また、図１２において横軸は時間を表し、“ＴＦ”、“ＭＣ”の位置及び長さが、各モジュールにおいて、“ＴＦ”または“ＭＣ”に対する処理が行われるタイミング及びその処理時間を表し、“演算時間”の位置及び長さが、各モジュールにおいて受信データに対する所定の処理が行われるタイミング及びその処理時間を表す。
【００７８】
ＣＰＵモジュールとＩＯモジュールとの間の制御データの送受信及び各種機器データの送受信は、特開平１１−３３８５２３号公報に記載されたマルチキャスト方式及びトータルフレーム方式により行う。なお、マルチキャスト方式及びトータルフレーム方式による制御データの送受信方法及び各種機器データの送受信方法は、前記特開平１１−３３８５２３号公報の記載と同様であるのでその詳細な説明は省略する。
【００７９】
ＣＰＵモジュールとＩＯモジュールとの間において、前記制御データの送受信はマルチキャスト方式により行う。すなわち、ＣＰＵモジュールは、各ＩＯモジュール宛の制御データからなるマルチキャストフレームを生成し、このマルチキャストフレームを送信する。このマルチキャストフレームを受信したＩＯモジュールは、自モジュール宛のデータであれば、それを取り込むと共にマルチキャストフレームをそのまま下流局に送信する。
【００８０】
一方、ＣＰＵモジュールとＩＯモジュールとの間において、前記各種機器データの送受信はトータルフレーム方式により行う。すなわち、ＣＰＵモジュールは、トータルフレーム送信の要求を表すトータルフレームを送信する。このトータルフレームを受信したＩＯモジュールは、自モジュールにおける予め設置された所定の各種機器データをこのトータルフレームに付加した後、下流局に送信する。
【００８１】
そして、ネットワークシステム上に唯一存在するマスタモジュール（図１の場合ＣＰＵモジュール“Ａ”）は、モジュール間でのタイマ値の同期化が終了すると、図１３に示すシステム制御処理を開始し、スレーブモジュール（図１の場合ＩＯモジュール“Ｂ”〜“Ｅ”は、図１４に示すシステム制御処理を開始する。
図１３に示すように、マスタモジュールは、まず初期処理を実行する（ステップＳ２１）。初期処理では、例えば外部接続機器ｘを初期位置に制御するため初期制御データの送信を行う。また、その応答として外部接続機器ｘの初期各種機器データを獲得する。
【００８２】
次いで、ステップＳ２２に移行し、タクト割込みの開始タイミングを決定するタイマ値を、タクト割込み発生開始タイミングとして決定する。例えば、自モジュールのタイマ１７のタイマ値に基づき、予め設定した規定時間後のタイマ値を、タクト割込み発生開始タイミングとして設定する。
この設定したタクト割込み発生開始タイミングを、リング状の伝送路を介して他のモジュールに送信する（ステップＳ２３）。
【００８３】
次いで、自モジュールのタイマ１７のタイマ値が、タクト割込み発生開始タイミングに達したか否かを判断し（ステップＳ２４）、タイマ値がタクト割込み発生開始タイミングになったとき、このタクト割込み発生開始タイミングを起点としてタクト周期のカウントを開始し（ステップＳ２５）、トークンフレーム方式により伝送され伝送処理部１３ａにより受信されてバッファ１３ｂに格納された各種機器データを読み込み（ステップＳ２６）、この各種機器データに基づき前記制御演算処理を行う（ステップＳ２７）。
【００８４】
次いで、この制御演算処理によって生成した各ＩＯモジュールの制御データをバッファ１３ｂに格納し、このバッファ１３ｂに格納された制御データを、マルチキャスト方式を用いて、伝送処理部１３ａにより各ＩＯモジュールに送信する（ステップＳ２８）。
そして、自モジュールのタイマ１７のタイマ値をもとに、次のタクト割込み発生タイミングに達したか否かを判断する（ステップＳ２９）。このタクト割込み発生タイミングは、タクト割込み発生開始タイミングを起点としてカウント開始したカウント値をもとに行い、例えば、現時点におけるタイマ１７のタイマ値が、タクト割込み発生開始タイミングにおけるタイマ値と、タクト周期に相当するタイマ値との和に達したとき、タクト割込み発生タイミングとして判断する。
【００８５】
前記タクト周期は、設計者が予め設定し、各モジュールに設定しておく。図１２に示すように、前記タクト周期は、プログラマブルコントローラシステムを構成するモジュールの種類や数に基づいて、トータルフレームデータ（以下、ＴＦデータともいう。）や、マルチキャストデータ（以下、ＭＣデータともいう。）の配信時間を演算し、このＴＦデータやＭＣデータの配信時間と、ＣＰＵモジュールでの制御演算処理や各ＩＯモジュールでの駆動処理の所要時間等とに基づき、タクト周期の開始時点から、次のタクト周期の開始時点までの間に、ＣＰＵモジュールにおいて、前記制御演算処理及びこの制御演算処理により生成された制御データの送信、さらに外部接続機器ｘの各種機器データの受信が完了し、且つ、ＩＯモジュールにおいて、前記駆動処理、この駆動処理により駆動された後の外部接続機器ｘの各部の位置情報等の各種機器データの送信、及び、ＣＰＵモジュールからの次の制御データの受信が完了するに十分な周期に設定される。
【００８６】
そして、タクト割込み発生タイミングに達したときに、ステップＳ２９からステップＳ２６に移行し、再度、バッファ１３ｂに記憶されたＩＯモジュールからの各種機器データを読み込み、これに基づき制御演算処理を行って各ＩＯモジュール宛の制御データを生成する（ステップＳ２７）。
以後、このステップＳ２６〜Ｓ２９の処理を繰り返し行うことにより、タクト割込み発生開始タイミングを起点としてタクト周期毎に、受信した各種機器データに基づく制御演算処理、制御演算処理で生成された制御データの送信及び、各種機器データの受信が行われることになる。
【００８７】
一方、スレーブモジュールであるＩＯモジュールでは、図１４に示すように、まず初期処理を実行する（ステップＳ３１）。初期処理では、例えば、ＣＰＵモジュールからの初期制御データを受信し、この初期制御データに応じてその外部接続機器ｘを駆動制御する。また、初期駆動制御後の各外部接続機器ｘについて各種機器データを収集しこれを初期各種機器データとしてＣＰＵモジュールに送信する。
【００８８】
次いで、ステップＳ３２に移行し、ＣＰＵモジュールからタクト割込み発生開始タイミングを規定するタイマ値を受信すると、自モジュールのタイマ１７のタイマ値が、通知されたタクト割込み発生開始タイミング（タイマ値）に達したか否かを判断する（ステップＳ３３）。そして、タクト割込み発生開始タイミング（タイマ値）となったとき、タクト周期のカウントを開始すると共に（ステップＳ３４）、マルチキャスト方式によりＣＰＵモジュールから伝送され伝送処理部１３ａにより受信されてバッファ１３ｂに記憶されたＣＰＵモジュールからの制御データを読み込み（ステップＳ３５）、この制御データに基づき駆動処理を行う（ステップＳ３６）。そして、駆動処理によって収集した各種機器データをバッファ１３ｂに記憶し、これを伝送処理部１３ａによりトークンフレーム方式を用いてＣＰＵモジュールに送信する（ステップＳ３７）。
【００８９】
そして、タイマ１７のカウント値をもとに、自モジュールのタイマ値がタクト割込み発生タイミングとなったか否かを判断し（ステップＳ３８）、タクト割込み発生タイミングとなったとき、ステップＳ３５に移行して、マルチキャスト方式によりＣＰＵモジュールから伝送されバッファ１３ｂに記憶されたＣＰＵモジュールからの制御データをもとに、所定の駆動処理を行う。なお、タクト割込み発生タイミングになったか否かの判断は、前記図１３のステップＳ２９におけるマスタモジュールでの処理と同様に、タイマ値が、タクト割込み発生開始タイミングにおけるタイマ値と、タクト周期に相当するタイマ値との和に達したか否かを判断することにより行う。
以後、ステップＳ３５からステップＳ３８の処理を繰り返し行うことにより、タクト割込み発生開始タイミングを起点として、タクト周期毎に、駆動処理、各種機器データの送信、制御データの受信が行われることになる。
【００９０】
次に、上記第１の実施の形態の動作を説明する。
プログラマブルコントローラシステムでは、起動されるとまず、モジュール間でのタイマ値の同期化を行う。これにより、各モジュール間でタイマ１７のタイマ値は同期化される。
タイマ値の同期化が終了すると、各モジュールでは、図１３または図１４のシステム制御処理を開始し、各モジュールでは、マスタモジュールで決定されたタクト割込み発生開始タイミングを起点としてタクト周期毎に設定されるタクト割込み発生タイミングで、所定の処理を実行し、ＣＰＵモジュールでは制御演算処理を行って各種機器データに基づき制御データを生成し、ＩＯモジュールでは駆動処理を行って制御データに基づきその外部接続機器ｘを駆動制御して各種機器データの収集を行う。
【００９１】
ここで、上述のように、各モジュール間でタイマ１７のタイマ値は同期している。このため、ＣＰＵモジュールで制御演算処理を開始するタイミング及びＩＯモジュールで駆動処理を開始するタイミングは、図１２に示すように一致する。また、タクト割込み発生タイミングはタクト周期毎に発生させており、タクト周期は、全てのＩＯモジュールが駆動処理、各種機器データの送信及び制御データの受信が完了し、且つＣＰＵモジュールが制御演算処理、制御データの送信及び各種機器データの受信が完了するに十分な周期に設定しているため、図１２（ｃ）に示すように、次のタクト割込み発生タイミングまでに、各ＩＯモジュールでは次の処理対象となる制御データの受信が完了している。
【００９２】
したがって、タクト割込み発生タイミングでは、全てのＩＯモジュールは、同一時点における制御データに基づいて駆動処理を行って外部接続機器ｘを駆動制御することになる。なお、ＩＯモジュールは、ＣＰＵモジュールで生成された制御データをもとに駆動処理を行なうため、あるタイミングにおいてＣＰＵモジュールで生成された制御データに基づく駆動処理を、次のタイミングで実行することになる。
【００９３】
このように、全ＩＯモジュールは同一時点における制御データに基づき駆動処理を行なうことができるため、各ＩＯモジュールが異なる時点での制御データに基づいてその外部接続機器ｘを駆動制御することを回避することができる。そのため、各ＩＯモジュールを高精度に同期させることができるため、外部接続機器ｘをより高精度に駆動制御することができ、結果的に、プログラマブルコントローラシステムの制御対象である、モーションシステム全体をより高精度に駆動制御することができる。
【００９４】
次に、本発明の第２の実施の形態を説明する。
この第２の実施の形態は、上記第１の実施の形態において、図１３及び図１４のマスタモジュール及びスレーブモジュールで実行されるシステム制御処理が異なること以外は同一であるので、同一部の詳細な説明は省略する。
この第２の実施の形態では、マスタモジュールは、図１５に示すシステム制御処理を行う。
【００９５】
すなわち、まず、ステップＳ２０ａで、ＣＰＵモジュールのタクト割込み発生開始タイミング及びＩＯモジュールのタクト割込み発生開始タイミングを設定するためのタイミング情報を読み込む。このタイミング情報は、プログラマブルコントローラシステムのオペレータが図示しない入力手段により入力操作を行うことにより入力する。このタイミング情報は、後述のタクト割込み発生開始タイミングに対して、ＣＰＵモジュール、ＩＯモジュールにおけるタクト割込み発生開始タイミングを設定するためのものであり、タクト割込み発生開始タイミングと、ＣＰＵモジュールにおけるタクト割込み発生開始タイミングとのタイマ値のずれ量がＣＰＵモジュールのタイミング情報として設定され、タクト割込み発生開始タイミングと、ＩＯモジュールにおけるタクト割込み発生開始タイミングとのタイマ値のずれ量がＩＯモジュールのタイミング情報として設定される。
【００９６】
ここで、第２の実施の形態では、ＣＰＵモジュール及びＩＯモジュールのタクト割込み発生タイミングは、異なるタイミングとなるように設定される。なお、タクト周期は同一値に設定され、その設定方法は上記第１の実施の形態と同様である。
そして、ＣＰＵモジュールのタクト割込み発生タイミングは、図１６（ａ）に示すように、トータルフレームの受信完了後の受信完了タイミングに比較的近いタイミングに設定される。一方、ＩＯモジュールのタクト割込み発生タイミングは、図１６（ｃ）に示すように、全てのＩＯモジュールがマルチキャストフレームの受信を完了した後の、この受信完了タイミングに比較的近いタイミングに設定される。
【００９７】
これらＣＰＵモジュール及びＩＯモジュールのタクト割込み発生タイミングは、前記タクト周期及び、トータルフレームデータや、マルチキャストデータの配信時間、ＣＰＵモジュールでの制御演算処理の開始タイミングに対する、次に受信するトータルフレームの受信完了までの所要時間、ＩＯモジュールでの駆動処理の開始タイミングに対する、次に受信するマルチキャストデータの受信完了までの所要時間等に基づいて演算する。
【００９８】
したがって、ＣＰＵモジュール及びＩＯモジュールのタイミング情報は、これらを満足するように設定される。例えば、タクト割込み発生開始タイミングとＣＰＵモジュールのタクト割込み発生開始タイミングとを同一タイミングに設定すると、ＣＰＵモジュールのタイミング情報は“零”として設定される。また、ＩＯモジュールのタイミング情報は、ＣＰＵモジュールのタクト割込み発生タイミングとＩＯモジュールのタクト割込み発生タイミングとの差相当のタイマ値に設定される。
【００９９】
このようにして設定されたＣＰＵモジュール及びＩＯモジュールのタイミング情報を読み込むと、ステップＳ２０ａからステップＳ２０ｂに移行し、ＩＯモジュールに対して、ＩＯモジュールのタイミング情報を送信する。
次いで、ステップＳ２１に移行して上記第１の実施の形態と同様の手順で初期処理を実行し、タイマ１７の現タイマ値に基づきタクト割込み発生開始タイミングに相当するタイマ値を決定し（ステップＳ２２）、これを各モジュールに通知する（ステップＳ２３）。
【０１００】
次いで、ステップＳ２４ａに移行し、ステップＳ２２で設定されたタクト割込み発生開始タイミングを表すタイマ値と、ステップＳ２０ａで読み込んだＣＰＵモジュールのタイミング情報との和を、ＣＰＵモジュールのタクト割込み発生開始タイミングとして演算し、自モジュールのタイマ１７のタイマ値が、ＣＰＵモジュールのタクト割込み発生開始タイミングとなったか否かを判断する。
【０１０１】
そして、タイマ値がＣＰＵモジュールのタクト割込み発生開始タイミングとなったときに、ステップＳ２４ａからステップＳ２５ａに移行し、このＣＰＵモジュールのタクト割込み発生開始タイミングを起点としてタクト周期のカウントを開始し、トータルフレーム方式により伝送され伝送処理部１３ａにより受信されてバッファ１３ｂに格納された各種機器データを読み込み（ステップＳ２６）、これに基づき制御演算処理を行う（ステップＳ２７）。そして、制御演算処理によって生成した各ＩＯモジュール宛の制御データをバッファ１３ｂに格納し、このバッファ１３ｂに格納された制御データを、マルチキャスト方式を用いて、伝送処理部１３ａにより送信する（ステップＳ２８）。
【０１０２】
そして、自モジュールのタイマ１７のタイマ値をもとに、次のＣＰＵモジュールのタクト割込み発生タイミングに達したか否かを判断する（ステップＳ２９ａ）。このＣＰＵモジュールのタクト割込み発生タイミングに達したか否かの判断は、ＣＰＵモジュールのタクト割込み発生開始タイミングを起点としてカウント開始したカウント値をもとに行い、例えば現時点におけるタイマ１７のタイマ値が、ＣＰＵモジュールのタクト割込み発生開始タイミングにおけるタイマ値と、タクト周期に相当するタイマ値との和に達したとき、ＣＰＵモジュールのタクト割込み発生タイミングであると判断する。
【０１０３】
以後、このステップＳ２６〜Ｓ２９ａの処理を繰り返し行うことにより、ＣＰＵモジュールのタクト割込み発生開始タイミングを起点として、タクト周期毎に、受信した各種機器データに基づく制御演算処理、制御演算処理で生成された制御データの送信、各種機器データの受信が行われることになる。
一方、スレーブモジュールであるＩＯモジュールでは、図１７に示すように、まず、ステップＳ３０で、ＣＰＵモジュールから前述のＩＯモジュールのタイミング情報を獲得する。
次いで、ステップＳ３１に移行し、上記第１の実施の形態と同様に初期処理を行い、ＣＰＵモジュールからの初期制御データに応じて外部接続機器ｘを初期状態に制御し、初期制御後に、各種機器データを収集しこれを初期各種機器データとしてＣＰＵモジュールに送信する。
【０１０４】
次いで、ステップＳ３２に移行し、ＣＰＵモジュールからタクト割込み発生開始タイミングを規定するタイマ値を受信するとステップＳ３３ａに移行し、このＣＰＵモジュールからのタクト割込み発生開始タイミングに、ＩＯモジュールのタイミング情報を加算し、ＩＯモジュールのタクト割込み発生開始タイミングを決定し、自モジュールのタイマ１７のタイマ値が、ＩＯモジュールのタクト割込み発生開始タイミングに達したかどうかを判断する。そして、タイマ値が、ＩＯモジュールのタクト割込み発生開始タイミングに達したときステップＳ３４に移行してタクト周期のカウントを開始し、マルチキャスト方式によりＣＰＵモジュールから伝送され伝送処理部１３ａにより受信されてバッファ１３ｂに記憶されたＣＰＵモジュールからの制御データを読み込み（ステップＳ３５）、これに基づき駆動処理を行う（ステップＳ３６）。
【０１０５】
そして、駆動処理によって生成した各種機器データをバッファ１３ｂに記憶し、これを伝送処理部１３ａによりトークンフレーム方式を用いてＣＰＵモジュールに送信する（ステップＳ３７）。
次いで、タクト周期のカウント値をもとに、自モジュールのタイマ値がＩＯモジュールのタクト割込み発生タイミングとなったか否かを判断し（ステップＳ３８ａ）、ＩＯモジュールのタクト割込み発生タイミングとなったとき、ステップＳ３５に移行して、マルチキャスト方式によりＣＰＵモジュールから伝送されバッファ１３ｂに記憶されたＣＰＵモジュールからの制御データをもとに、所定の駆動処理を行う。
【０１０６】
前記ＩＯモジュールのタクト割込み発生タイミングとなったかどうかの判断は、ＩＯモジュールのタクト割込み発生開始タイミングを起点としてカウント開始したカウント値をもとに行い、例えば現時点におけるタイマ１７のタイマ値が、ＣＰＵモジュールのタクト割込み発生開始タイミングにおけるタイマ値と、タクト周期に相当するタイマ値との和に達したとき、ＩＯモジュールのタクト割込み発生タイミングであると判断する。
以後、ステップＳ３５からステップＳ３８ａの処理を繰り返し行うことにより、ＩＯモジュールのタクト割込み発生開始タイミングを起点として、タクト周期毎に、駆動処理、各種機器データの送信、制御データの受信が行われることになる。
【０１０７】
次に、上記第２の実施の形態の動作を説明する。
プログラマブルコントローラシステムでは、上記第１の実施の形態と同様に、まず、モジュール間でのタイマ値の同期化を図る。このため、各モジュール間のタイマ値は同期化される。
各モジュールでは、図１５又は図１７のシステム制御処理を実行し、マスタモジュール（ＣＰＵモジュール）で設定されたタクト割込み発生開始タイミングと、オペレータにより設定されたＣＰＵモジュールまたはＩＯモジュールのタイミング情報に基づき、自モジュールのタクト割込み発生開始タイミングを決定する。すなわち、ＣＰＵモジュールではＣＰＵモジュールのタクト割込み発生開始タイミング、ＩＯモジュールではＩＯモジュールのタクト割込み発生開始タイミングを決定する。
【０１０８】
そして、ＣＰＵモジュールは、ＣＰＵモジュールのタクト割込み発生開始タイミングを起点としてタクト周期毎に生じるＣＰＵモジュールのタクト割込み発生タイミングで、制御演算処理を実行し、ＩＯモジュールからの各種機器データに基づき制御データを生成する。一方、ＩＯモジュールは、ＩＯモジュールのタクト割込み発生開始タイミングを起点としてタクト周期毎に生じるＩＯモジュールのタクト割込み発生タイミングで、駆動処理を実行し、ＣＰＵモジュールからの制御データに基づきその外部接続機器ｘを駆動制御して各種機器データの収集を行う。
【０１０９】
ここで、上述のように各モジュール間のタイマ値は同期している。そのため、各モジュールにおけるタクト割込み発生開始タイミングは一致する。このため、このタクト割込み発生開始タイミングに基づき設定される、ＩＯモジュールのタクト割込み発生開始タイミングを起点とするタクト周期毎のＩＯモジュールのタクト割込み発生開始タイミングは、図１６（ｃ）に示すように全てのＩＯモジュール“Ｂ”〜“Ｅ”間で一致する。
【０１１０】
また、ＩＯモジュールのタクト割込み発生タイミングは、全てのＩＯモジュールがマルチキャストデータを受信完了した後の受信完了時点に比較的近いタイミングとなるように設定されるため、図１６（ｃ）に示すように、ＩＯモジュール“Ｅ”がマルチキャストデータを受信し終えた後のタイミングで、ＩＯモジュールのタクト割込み発生タイミングとなる。このため、各ＩＯモジュール“Ｂ”〜“Ｅ”は、同一時点の制御データに基づいて駆動処理を行い、外部接続機器ｘを駆動制御することになる。なお、ＩＯモジュールは、ＣＰＵモジュールで生成された制御データをもとに駆動処理を行なうため、ＣＰＵモジュールは、あるタイミングにおいて生成した制御データに基づく駆動処理をＩＯモジュールが開始するよりも前の時点で、前述のあるタイミングにおいて生成した制御データの次の制御データを生成する処理を開始することになる。
【０１１１】
このように、全ＩＯモジュールは同一時点における制御データに基づき駆動処理を行なうことができるため、各ＩＯモジュールが異なる時点での制御データに基づいてその外部接続機器ｘを駆動制御することを回避することができる。
さらに、図１６（ａ）に示すように、ＣＰＵモジュールのタクト割込み発生タイミングは、ＣＰＵモジュールがトータルフレームを受信完了した後のタイミングであり且つ受信完了タイミングにより近いタイミングとなるように設定されており、一方、ＩＯモジュールのタクト割込み発生タイミングは、全ＩＯモジュールがマルチキャストフレームの受信を完了する受信完了タイミング以後に設定されているため、ＩＯモジュールが制御データに基づく駆動処理を開始する前に、ＣＰＵモジュールでの制御演算処理が実行されることになる。
【０１１２】
ここで、ＣＰＵモジュールでの制御演算処理に必要な情報は、各ＩＯモジュールからの各種機器データであるため、この各種機器データを伝送するためのトータルフレームの受信が完了した時点で、制御演算処理を実行しても何ら問題はない。
そして、制御演算処理はタクト周期毎に行う必要があるため、制御演算処理用の処理時間として確保することのできる時間は、マルチキャスト方式による制御データの送信及びトータルフレームによる各種機器データの受信に要する所要時間を除いた時間内に制限される。このため、トータルフレームの受信を完了した時点で制御演算処理を開始すればその分、制御演算処理としてより長い時間を確保することができることになる。
【０１１３】
つまり、次にトータルフレームを受信するまでの間に、制御演算処理及び制御データの送信が完了すればよいから、図１６に示すように、トータルフレームの受信を完了した時点で制御演算処理を開始すれば、制御演算処理用の処理時間をより多く確保することができることになる。これに対して、トータルフレームの受信完了時点から制御演算処理の開始までに空き時間があると、この空き時間相当分だけ、制御演算処理用の処理時間として確保できる時間が短くなってしまうことになる。
【０１１４】
このように、ＣＰＵモジュールが、トータルフレームの受信を完了した時点により近いタイミングで制御演算処理を開始することによって、制御演算処理用の処理時間をより多く確保することができる。これはすなわち、より複雑な演算処理やより多量のデータ処理を行うことができることを意味する。したがって、プログラマブルコントローラシステムの処理能力を向上させることができ、外部接続機器ｘをより高精度に制御することができる。したがって、異なるモジュールに接続されている外部接続機器ｘであっても、これら外部接続機器ｘ間で同期させ且つ強調動作を行わせることができる。
【０１１５】
なお、ＣＰＵモジュールのタクト割込み発生タイミングは、トータルフレームの受信を完了した時点以後のタイミングであればよいが、上述のように、トータルフレームの受信完了のタイミングに近いほど、ＣＰＵモジュールにおける制御演算処理用の処理時間を確保することができるため、制御演算処理用の処理時間として必要な処理時間を考慮して設定すればよい。
【０１１６】
同様に、ＩＯモジュールのタクト割込み発生タイミングは、全てのＩＯモジュールがマルチキャストデータを受信完了した時点以後のタイミングであればよいが、この場合も、全てのＩＯモジュールがマルチキャストデータを受信完了するタイミングに近いほど、ＩＯモジュールにおける駆動処理用の処理時間を確保することができる。
同様に、上記第１の実施の形態においても、タクト割込み発生タイミングは、全てのモジュールがマルチキャストデータ又はトータルフレームの受信を完了した後のタイミングであればよいが、この場合も、各モジュールが所定のデータを受信完了するタイミングに近いほど、各モジュールにおける受信データに対するデータ処理用の処理時間を確保することができる。
【０１１７】
また、上記各実施の形態において、タイマ１７は、水晶振動子を含んで構成されている。このため、起動時に、モジュール間でのタイマ値の同期化を図ったとしても、水晶振動子の誤差によりモジュール間でタイマ値にずれが生じる可能性があり、このずれが大きくなるとシステム停止等、システム全体に影響を与える可能性がある。つまり、マスタモジュール“Ａ”、スレーブモジュール“Ｂ”、“Ｃ”、“Ｅ”は、既にモジュール間でタイマ値の同期がとられているため、本来、これらモジュールのタイマ値は同等程度の値を示すはずであるが、水晶振動子の誤差によりタイマ値にずれが生じることがある。
【０１１８】
しかしながら、モジュール間でのタイマ値の同期化を定周期で実行しているため、水晶振動子の誤差によるタイマ値のずれを除去することができる。このため、モジュール間でのタイマ値を精度よく同期させることができ、よって、このタイマ値に同期して動作する各モジュール間において、外部接続機器ｘを同期させ且つ強調動作を行わせることができる。
【０１１９】
特に、モジュール間のタイマ値の同期精度として、マイクロ秒、ミリ秒の単位での精度を要求するモーションシステムにおいては、頻繁にタイマ値の同期化を図り、水晶振動子の影響を抑制する必要があるため効果的である。
なお、上記第２の実施の形態においては、ＣＰＵモジュールについては、ＣＰＵモジュールのタクト割込み発生タイミングで動作させ、ＩＯモジュールについては、ＩＯモジュールのタクト割込み発生タイミングで動作させる場合について説明したが、これに限るものではない。
【０１２０】
例えば、同じＩＯモジュールであっても、異なるタイミングで駆動処理を実行させる必要がある場合には、第１のタイミングで駆動処理を実行させるＩＯモジュールからなる第１のグループと、第２のタイミングで駆動処理を実行させるＩＯモジュールからなる第２のグループとに分類し、第１のグループ、第２のグループ、及びＣＰＵモジュールのそれぞれについて、駆動処理または制御演算処理の所望の実行タイミングに適したタクト割込み発生開始タイミングを設定し、これら第１のグループ、第２のグループ、ＣＰＵモジュールごとに、それぞれ異なるタクト割込み発生タイミングで所定の処理を実行するように構成してもよい。要は、受信したデータに対する処理を同一タイミングで実行させたいモジュールどうしを同一グループとし、グループ毎にタクト割込み発生開始タイミングを設定し、これに応じたタクト割込み発生タイミングで所定の処理を実行するように構成すればよい。また、ＣＰＵモジュール及びＩＯモジュールに限らず、他の種類のモジュールについても同様にグループに分類し、所定のタクト割込み発生タイミングで所定の処理を実行させるように構成することも可能である。
【０１２１】
また、上記各実施の形態においては、プログラマブルコントローラシステム中に、ＣＰＵモジュールを１台備えるシングルＣＰＵシステムの場合について説明したが、ＣＰＵモジュールを複数備えるマルチＣＰＵシステムの場合であっても適用することができる。
マルチＣＰＵシステムに適用するときには、上記第２の実施の形態を適用する場合は、ＣＰＵモジュールについては、このＣＰＵモジュールのタクト割込み発生タイミングをＴＦデータの受信完了後のタイミングとなるように設定し且つ、ＩＯモジュールについては、全てのＩＯモジュールが、そのタクト割込み発生タイミングでの駆動処理に必要な制御データを全て受信完了した時点を、ＩＯモジュールのタクト割込み発生タイミングとして設定すればよい。このとき、全てのＣＰＵモジュールがＴＦデータを受信完了した時点を、ＣＰＵモジュールのタクト割込み発生タイミングとすることにより全ＣＰＵモジュールでタクト割込み発生タイミングを共通としてもよく、また、ＣＰＵモジュール毎にＴＦデータを受信完了した時点をタクト割込み発生タイミングとして設定するようにしてもよい。
【０１２２】
また、上記実施の形態においては、端部のモジュール“Ｄ”、モジュール“Ｅ”では、モジュール内部で回線を折り返してリング状の伝送路を構成する場合について説明したが、これに限るものではない。例えば、折り返し用に、ケーブルＬｎが接続されない側の接続端子１１又は１２に、第１の配線Ｌ11側と第２の配線Ｌ22側とを単に接続するための折り返し用ケーブルを挿しておくことにより、リング状の伝送路を構成するようにしてもよい。この場合、端部のモジュールから送信された伝送メッセージは、折り返し用ケーブルを経由して再度端部のモジュールで受信されるため、ラッチ回路１５又は１６で検出され、タイマ値がラッチされることになる。このため、マスタモジュールでは、タイマ値有効フラグからは、端部のモジュールがどれであるかを認識することができない。
【０１２３】
そのため、折り返し用ケーブルを用いて折り返しを行なった場合には、端部のモジュールにおいてスイッチ操作を行なうことにより端部のモジュールに対して端部のモジュールであることを認識させ、端部のモジュールにおいて、自モジュールのタイマ情報として端部のモジュールであることを付加して送信するように構成すれば、マスタモジュールではタイマ情報から端部のモジュールが何れのモジュールであるかを容易に認識することができる。
【０１２４】
或いは、折り返し用ケーブルを用いて折り返しを行なった場合には、ラッチ回路１５でラッチしたタイマ値とラッチ回路１６でラッチしたタイマ値との差、すなわち、受信経過時間は折り返し用ケーブルにおける伝送時間相当の長さとなり、モジュール間のモジュールにおける受信経過時間に比較して短い。したがって、受信経過時間が、折り返し用ケーブルによる折り返しが行なわれているとみなされるしきい値よりも短いかどうかに基づき、端部のモジュールであるか否かを判断するようにしてもよい。
【０１２５】
また、上記実施の形態においては、モジュール“Ａ”からモジュール“Ｅ”の５つのモジュールを有するプログラマブルコントローラシステムを構成した場合について説明したが、これに限らず、複数のモジュールを有するプログラマブルコントローラシステムであれば適用することができ、さらに、プログラマブルコントローラが複数接続され、これら複数のプログラマブルコントローラを構成する複数のモジュールがデイジーチェーン接続されてリング状の伝送路を構成するシステムであっても適用することができる。
【０１２６】
また、上記実施の形態においては、ケーブルが接続されているか否かを検出することにより、端部のモジュールであるか否かを検出する場合について説明したが、これに限るものではない。例えば、端部のモジュールにおいてオペレータがスイッチ操作等を行なうことにより、端部のモジュールとして設定するように構成することもできる。また、このオペレータのスイッチ操作により、切り替え回路１８の接続先が物理的に切り替わるように構成してもよい。
【０１２７】
また、上記実施の形態においては、マスタモジュールでシステム同期処理が実行されたときに、マスタモジュールのタイマのタイマ値をスレーブモジュールに通知してタイマ値を同期させる場合について説明したがこれに限るものではない。
例えば、スレーブモジュールでは、システム同期処理が行なわれたときに通知された各モジュールにおける伝送遅延時間を記憶しておく。そして、マスタモジュールでは、一旦システム同期処理を行なった後は、マスタタイマ値配布メッセージのみを定期的に送信し、このマスタタイマ値配布メッセージを受信したスレーブモジュールが、記憶している伝送遅延時間と通知されたマスタタイマ値とから自モジュールのタイマのタイマ値を更新設定することにより、定期的に、タイマ値の同期を図るようにしてもよい。
【０１２８】
このように、システム同期処理全体を定期的に行なうのではなく、マスタタイマ値の送信及びスレーブモジュールでのタイマ値の更新設定のみを定期的に実行する場合であっても、プログラマブルコントローラシステムを構成するモジュール間のタイマ値の同期を的確に行なうことができる。
また、上記実施の形態においては、マスタモジュールがタイマラッチ指示メッセージを送信する場合について説明したが、これに限るものではない。つまり、ある伝送メッセージを、ラッチ回路１５で受信するタイミングと、同一の伝送メッセージをラッチ回路１６で受信するタイミングとがわかればよい。このため、各モジュールが、マスタモジュールに限らず他のモジュールが送信する任意の伝送メッセージをタイマラッチ指示メッセージとみなし、任意の伝送メッセージをラッチ回路１５及び１６で受信した時点におけるタイマ値をラッチするように構成してもよい。
【０１２９】
そして、マスタモジュールがタイマ値収集メッセージを定期的に、或いはイベント的に送信して、各モジュールが保持する最新のタイマ情報を収集しこれと、任意の伝送メッセージの一周時間とを用いて伝送遅延時間を演算し、最新の伝送遅延時間に基づき各モジュールがタイマの同期を行なうようにしてもよい。
また、上記実施の形態において、ラッチ回路１５及びラッチ回路１６は、タイマラッチ指示メッセージを受信するときにのみ、動作可能な状態となっていればよい。したがって、例えば、マスタモジュールがタイマラッチ指示メッセージを送信するタイミングが、システム起動時及びその後定期的に等、予め決まっている場合には、スレーブモジュール側でこれに合わせてラッチ回路１５及び１６を動作可能な状態にし、一旦同期を行なった後、ラッチ回路１５及び１６を休止状態に切り替え、その後、定期的に行なわれる同期のタイミングに合わせて、ラッチ回路１５及び１６を動作可能な状態に切り替えることにより消費電力の削減を図るようにしてもよい。
【０１３０】
また、タイマラッチ指示メッセージは、一方のラッチ回路で受信された後、他方のラッチ回路で受信されるため、タイマラッチ指示メッセージを先に受信するラッチ回路は常時動作可能状態とし、後に受信するラッチ回路は、先に受信するラッチ回路でタイマラッチ指示メッセージを受信したときに動作可能な状態に切り替え、タイマ値をラッチして処理部１３に通知した後、再度休止状態に切り替えるように構成してもよい。この場合には、後に受信するラッチ回路の消費電力の削減を図ることができる。
【０１３１】
また、各モジュールが、任意のメッセージをタイマラッチ指示メッセージとみなしてタイマ値をラッチするように構成した場合には、各モジュールがタイマ値をラッチするタイミングに合わせてラッチ回路１５及び１６を動作可能状態に切り替え、それ以外のときにはラッチ回路１５及び１６を休止状態に切り替えるように構成してもよい。
ここで、上記実施の形態において、図１３のステップＳ２６及びステップＳ２７の処理が出力データ生成手段に対応し、ステップＳ２８の処理が出力データ送信手段に対応し、図５のシステム同期処理が同期化手段に対応している。
【０１３２】
また、図１４のステップＳ３５の処理が受信手段に対応し、ステップＳ３６の処理が出力手段に対応している。
さらに、第１の配線Ｌ11、第２の配線Ｌ22が、第１の伝送路、第２の伝送路に対応している。
また、図１５のステップＳ２９ａの処理がマスタタクト割込み発生手段に対応し、図１７のステップＳ３０、Ｓ３２、Ｓ３３ａ、Ｓ３４、Ｓ３８ａの処理がスレーブタクト割込み発生手段に対応している。
【符号の説明】
【０１３３】
１１  第１の接続端子
１２  第２の接続端子
１３  処理部
１３ａ  伝送処理部
１３ｂ  バッファ
１５、１６  ラッチ回路
１７  タイマ
Ｌ１〜Ｌ４  ケーブル
Ｌ11  第１の配線
Ｌ22  第２の配線
Ｔ  メッセージ一周時間
【図１】
0005655460.tif 000002
【図２】
0005655460.tif 000003
【図３】
0005655460.tif 000004
【図４】
0005655460.tif 000005
【図５】
0005655460.tif 000006
【図６】
0005655460.tif 000007
【図７】
0005655460.tif 000008
【図８】
0005655460.tif 000009
【図９】
0005655460.tif 000010
【図１０】
0005655460.tif 000011
【図１１】
0005655460.tif 000012
【図１２】
0005655460.tif 000013
【図１３】
0005655460.tif 000014
【図１４】
0005655460.tif 000015
【図１５】
0005655460.tif 000016
【図１６】
0005655460.tif 000017
【図１７】
0005655460.tif 000018
【図１８】
0005655460.tif 000019