以下、図面を参照して本発明の実施の形態について説明する。
尚、本例のプログラマブルコントローラシステムは、コントローラ(CPUモジュール)と各I/O機器とがデバイスレベルネットワークに接続されて成る上記“コンフィグレーション”を複数有すると共に、各コントローラがコントローラレベルネットワークに接続された構成のプログラマブルコントローラシステムである。本手法は、例えばこの様なマルチコンフィグ構成のシステムにおける、各コンフィグレーションの周期開始タイミングの同期に関する。
図1は、本例のプログラマブルコントローラシステムの構成図である。
図示の構成自体は、概略的には上記従来の図22等の構成と略同様であってよいが、本例の場合、従来の通信モジュールの機能がCPUモジュールに組み込まれている。
すなわち、図示の各コンフィグレーション10(点線で囲む部分)は、CPUモジュール11、I/Oモジュール12等から成る。各モジュール11、12は、デバイスレベルネットワーク13に接続されている。尚、コンフィグレーション10は、制御ユニット10等と呼んでもよい。制御ユニット10は、CPUモジュール11(コントローラ)とI/Oモジュール12(入出力対象の一例)が、デバイスレベルネットワーク13に接続されて成る構成と見做してよい。
CPUモジュール11は、デバイスレベルネットワーク13を介して、各I/Oモジュール12との通信を行う。また、CPUモジュール11は、コントローラレベルネットワーク1にも接続している。CPUモジュール11は、上記の通り従来の通信モジュールの機能も有しており、コントローラレベルネットワーク1を介して、他のコンフィグレーション10のCPUモジュール11との通信を行う。尚、従来の通信モジュールの機能とは、コントローラレベルネットワーク1上の通信機能である。
また、コントローラレベルネットワーク1には、従来と同様、更に、システム全体の監視制御や生産管理を行うためのサーバ装置2等が接続されていてもよい。各CPUモジュール11は、コントローラレベルネットワーク1を介して、サーバ装置2との通信も行える。
ここで、CPUモジュール11は、例えば先願(PCT/JP2013/050121)におけるコントローラレベルネットワーク機能内蔵のコントローラを用いるが、この例に限らない。例えば上記従来の通信モジュールから処理周期に応じた割込み信号を取得する構成のCPUモジュール等であってもよい。つまり、必ずしも通信モジュールの機能を有しなくてもよい。
図2は、上記CPUモジュール11の構成図である。上記の通り、CPUモジュール11は、デバイスレベルネットワーク13上の通信機能だけでなく、コントローラレベルネットワーク1上の通信機能も有するので、それに応じた構成も有している。
図示の例のCPUモジュール11は、CPU21、コントローラレベルネットワーク制御LSI(NET LSI)22、デバイスレベルネットワーク制御LSI(DEV LSI)24等をメインの構成とする。更に、フラッシュメモリ(FLASH MEM)23、SRAM25、DDR SDRAM26、信号線27、PC I/F28等を有する。
CPU21は、コントローラアプリケーションの実行(制御演算)や、上記NET LSI22、DEV LSI24等を制御する。尚、CPU21にこの様な各種機能を実行させる為のプログラム(システムソフトウェア、コントローラアプリケーション等)は、予め不揮発メモリである上記FLASH MEM23に記憶されている。CPU21は、このプログラムを実行することで上記制御等を含む各種機能を実現する。尚、プログラムは、実行時に高速なメモリデバイスである上記DDR SDRAM26等へ展開されて実行される。
尚、CPU21は、1個のCPUで構成されていてもよいが、複数のCPUで構成されていてもよい。これに関して、複数のCPUそれぞれが各機能に対応するものであってもよい。
また、本例では、DEV LSI24に対して、制御データ等を格納するためのSRAM25が設けられている。SRAM25には、例えば後述するTFフレームやMCフレーム等が一時的に格納される。尚、CPU21もDEV LSI24を介してSRAM25にアクセス可能である。
また、DEV LSI24は、タイマー(TIMER)24aを内蔵している。TIMER24aは、デバイスレベルネットワーク13上の各接続機器(I/Oモジュール12など)に対して、データ出力タイミングを同期させるために用いられる。TIMER24aの一例が後述するタクトカウンタ41であると見做しても構わない。つまり、TIMER24aは、本例では基本的に1(ms)周期のタクト周期を作り出すものである。勿論、この例に限らない。
同様に、NET LSI22もタイマー(TIMER)22aを内蔵している。コントローラレベルネットワーク1上の通信に関して、TIMER22aを用いて各コントローラ(CPUモジュール11)間の同期を実現している。本例では基本的に5(ms)周期のコントローラ周期を作り出すものである。
尚、本説明では、デバイスレベルネットワーク13に係わる周期をタクト周期と呼ぶものとし、コントローラレベルネットワーク1に係わる周期をコントローラ周期と呼ぶものとする。これより、上記具体例では、タクト周期は1(ms)周期であり、コントローラ周期は5(ms)周期となる。周期開始タイミングは、各周期の開始のタイミングであり、例えばタクト周期の場合、任意のタクト周期開始タイミングから1(ms)後が次のタクト周期開始タイミングとなる。
尚、NET LSI22は、図示のNETコネクタを介して、コントローラレベルネットワーク1に接続している。同様に、DEV LSI24は、図示のDEV NETコネクタを介して、デバイスレベルネットワーク13に接続している。
また、NET LSI22とDEV LSI24との間を接続する上記信号線27が設けられている。NET LSI22とDEV LSI24とは、信号線27を介して直接的に信号を送受信できる。
信号線27は、一例としては、NET LSI22とDEV LSI24の双方からの割込み信号線と見做しても良い。ここで、本例のコントローラレベルネットワーク1、デバイスレベルネットワーク13上の通信は、何れも各々の所定周期で実行されるものであり、基本的に、コントローラレベルネットワーク1は、デバイスレベルネットワーク13よりも長周期である。ここでは具体例として上記の通り、コントローラレベルネットワーク1は5(ms)周期、デバイスレベルネットワーク13は1(ms)周期であるものとする。そして、NET LSI22とDEV LSI24は、相互に上記信号線27を介して自己の周期開始タイミングを示す割込みを通知するようにしてもよい。
ここで、本手法では、上記複数のCPUモジュール11に関して、そのうちの1台をマスタ局とし、残りはスレーブ局とする。そして、コントローラレベルネットワーク1に関して、マスタ局のコントローラ周期開始タイミングを基準として各スレーブ局のコントローラ周期開始タイミングを同期させる。但し、その前に、マスタ局は、例えば下記のようにして自己のコントローラ周期開始タイミングを決定する。
すなわち、本手法では、マスタ局において、自己の上記タクト周期開始タイミングに基づいて、自己の上記コントローラ周期開始タイミングを生成する。その際、上記図2の信号線27を介したLSI相互の割込み通知を利用する。つまり、上記具体例の場合、NET LSI22は、DEV LSI24に対して信号線27を介して、5(ms)毎に割込み通知を送ることになる。一方、DEV LSI24は、NET LSI22に対して信号線27を介して、1(ms)毎に割込み通知を送ることになる。
これを利用して、NET LSI22は、上記DEV LSI24からの1(ms)毎に割込み通知に基づいて、コントローラ周期開始タイミングを決定する。上記の例では、DEV LSI24からの割込み通知5回で、コントローラレベルネットワーク1の1周期とすることになる。
そして、上記決定(調整)後のマスタ局のコントローラ周期開始タイミングに基づいて、各スレーブ局のコントローラ周期開始タイミングを調整(補正)する。つまり、各スレーブ局のコントローラ周期を、マスタ局のコントローラ周期に同期させる。これには、例えば上記先願(PCT/JP2013/050121)の方法を用いる。
更に、各スレーブ局毎に、調整(補正)後のコントローラ周期開始タイミングに基づいて、自己のデバイスレベルネットワーク13のタクト周期開始タイミングを調整する。つまり、各スレーブ局毎に、上記図2の構成において、DEV LSI24が、NET LSI22からの信号線27を介した割込み通知(5msに1回の通知)に基づいて、自己のデバイスレベルネットワーク13のタクト周期開始タイミングの調整を行う。この調整処理については後述する。
尚、図2に示す構成は、一例であり、この例に限らない。例えば他の例としてCPU21にNET LSI22の機能が含まれていても良い。これは、例えばコントローラレベルネットワーク1をEthernet(登録商標)ベースのものとして、CPU21にEthernet(登録商標)機能が搭載されている形態などであっても構わない。そして、この例では当然、信号線27はCPU21とDEV LSI24との間に設けられる。そして、例えば、DEV LSI24からCPU21へ信号線27を介して割込み信号が送信される。CPU21からは、例えば、DEV LSI24へのレジスタリード/ライトのインタフェースで割込みを行う。但し、この例に限らず、信号線27は。例えば、双方に対するレジスタリード/ライトのインタフェースと見做しても構わない。
あるいは、本例ではNET LSI22とDEV LSI24とに別チップとして示しているが、大規模LSIを用いて、NET LSI22及びDEV LSI24の機能を同一LSI上に実現することも可能である。
何れにしても、本例では、各CPUモジュール11において、例えば上記信号線27を介して、NET LSI22とDEV LSI24との間で、各々の割込みタイミングを相手に通知することができる。これより、CPUモジュール11内で、自己のコントローラ周期開始タイミングを、自己のタクト周期開始タイミングに合わせるように補正することができる。その逆に、自己のタクト周期開始タイミングを、自己のコントローラ周期開始タイミングに合わせるように補正することもできる。
そして、これによって、例えば全てのコンフィグレーションのコントローラ周期開始タイミング及びタクト周期開始タイミングを、同期させることができる。その具体的イメージを図3に示す。
図3の例でも、上記と同様、コントローラレベルネットワーク1の周期(コントローラ周期)が5ms、タクト割込みタイミングの周期(タクト周期)が1msであるものとする。
そして、図3では、マスタ局においては既に自己のコントローラ周期開始タイミングを、自己のタクト周期開始タイミングと同期させた後の状態を示している。
マスタ局は、例えば立上り時に自局がマスタであると認識すると、自局のタクト周期開始タイミングをコントローラ周期開始タイミング生成の基準のタイマとする。つまり、本例では、タクト周期開始タイミング5回毎に、コントローラ周期開始タイミングとする。これより、マスタ局においては、自己のタクト周期開始タイミングとコントローラ周期開始タイミングとが同期していることになる。
その後、各スレーブ局のコントローラ周期開始タイミングを、マスタ局のコントローラ周期開始タイミングと同期させる。これより、図示していないが、スレーブ局のコントローラ周期開始タイミングは、マスタ局と同じとなっているものとする。そして、図示のように、任意のスレーブ局に関して、自己のコントローラ周期開始タイミングと自己のタクト周期開始タイミングとにズレが生じているものとする。このズレ量が図3や図4に示す“P”である。
これより、本手法では、スレーブ局において、自己のコントローラ周期開始タイミングに基づいて、自己のタクト周期開始タイミングの上記ズレPを修正する。これによって、自己のタクト周期開始タイミングを、自己のコントローラ周期開始タイミングに同期させる。これは、自己のタクト周期開始タイミングを、マスタ局のタクト周期開始タイミングに同期させることを意味することになる。
上記のことから、各スレーブ局は、コントローラ周期を介して間接的に、自己のタクト周期開始タイミングとマスタ局のタクト周期開始タイミングとのズレ量Pを検出して、このズレを補正することで、自己のタクト周期開始タイミングをマスタ局のタクト周期開始タイミングに同期させる。
但し、後に図4で説明するように、検出したズレ量Pをそのまま補正量とする場合もあれば、そうではない場合もある。また、補正量分を一度に補正するとは限らず、1回当たりに補正出来る上限値を設けている。一例としては、ここでは、補正の上限値(補正値)を0.05msとする。よって、補正量>上限値である場合には、複数回に分けてズレを補正することになる。例えば補正量が仮に0.15msであるとした場合には、0.05msずつ3回、補正を行うことになる。この様なズレ量・補正量の検出・算出のイメージと補正のイメージを、図4(a)、(b)に示す。
図4(a)、(b)には、上記のことから、マスタ局と任意のスレーブ局のそれぞれのタクト周期開始タイミングを示し、以ってズレ量の一例を示す。ここで、検出されるズレ量“P”は、上述したように、任意のコントローラ周期開始タイミングから、その直後のスレーブ局のタクト周期開始タイミングまでの時間である。但し、検出されるズレ量“P”をそのまま補正量とするとは限らない。尚、後述するAJUST_TIMEが、補正量を意味する。
例えば本例では、図4(a)のような例の場合には、検出されるズレ量“P”を、そのまま後述する補正量“AJUST_TIME”とすると共に、後述する補正方向“AJST_VEC”を“+”とする。一方、図4(b)のような例の場合には、検出されるズレ量“P”から「タクト周期−P」を算出して、これを後述する補正量“AJUST_TIME”とすると共に、後述する補正方向“AJST_VEC”を“−”とする。尚、後述するAJUST_TIMEは、スレーブ局が調整すべき位相ずれ時間(補正量)である。
一例としては、上記ズレ量“P”が「タクト周期/2」(本例では0.5msとなる)以上であるか未満であるかによって、補正量と補正方向が変わることになる。ズレ量“P”が「タクト周期/2」以上である場合、補正量を「タクト周期―P」とすると共に、+方向へ修正する。ズレ量“P”が「タクト周期/2」未満である場合、ズレ量Pをそのまま補正量とすると共に、−方向へ修正する。
図4(a)は、ズレ量“P”が「タクト周期/2」未満であるケースの一例を示す。図4(b)は、ズレ量“P”が「タクト周期/2」以上であるケースの一例を示す。
また、本例では、補正値(1回当たりの補正量)に上限を設けており、この上限値は後述する「調整の単位時間AJST_UNIT」として設定されている。本例ではAJST_UNIT=0.05msであるものとする。
そして、上記−方向へ修正する場合には、タクト周期=「タクト周期−AJST_UNIT」とする。本例では、タクト周期=1−0.05=0.95msとなる。これより、図4(a)に示すように、補正期間中はタクト周期==0.95msとなっている。
一方、上記+方向へ修正する場合には、タクト周期=「タクト周期+AJST_UNIT」とする。本例では、タクト周期=1+0.05=1.05msとなる。これより、図4(b)に示すように、補正期間中はタクト周期==1.05msとなっている。
この様に、本例では、タクト周期の長さを一時的に変更することで、ズレを補正する。特に、デバイスレベルネットワークの複数の周期にわたって補正を行うことで、つまり1回当たりの補正量に上限を設けたことで、デバイスレベルネットワークのデータ破壊、処理抜けを起こさずにシステム全体の同期を可能とする。
尚、ズレの補正は、処理的には各スレーブ局毎に自己のコントローラ周期開始タイミングとタクト周期開始タイミングとのズレの補正となるが、本質的には図4(a)、(b)に示すようにマスタ局のタクト周期開始タイミングと各スレーブ局のタクト周期開始タイミングとのズレの補正となる。
上記のように、本手法では、「マスタ局のタクト周期開始タイミング」を基準として、そこから、「マスタ局のコントローラ周期開始タイミング」→「各スレーブ局のコントローラ周期開始タイミング」→「各スレーブ局のタクト周期開始タイミング」の順で周期開始タイミング補正を行うことで、全体を同期化させることができる。
例えば上記図3、図4で説明したような、各スレーブ局における自己のタクト周期開始タイミングの補正機能(タイマ制御部)は、例えばDEV_LSI24に搭載される。
図5に、DEV_LSI24のタイマ制御部の構成例を示す。
尚、本例においては、タイマ補正機能をDEV LSI24に搭載されるハードウェア機能とするが、この例に限らず、例えばCPU21上で動作するソフトウェアとして実現することも可能である
また、図6には、図5のタイマ制御部に係わる各種信号のレジスタインタフェース例を示す。
まず、図6を参照して、各種信号について説明する。
図6に示すように、本例のタイマ制御部では、AJUST_EN31、AJUST_VEC32、AJUST_TIME33、AJUST_UNIT34、AJUST_STA35、及びREMAIN_TIME36等の各種信号が、利用されるものとする。尚、これらだけでなく、タイマ制御部内では更に図5に示す“takt_ajust”信号、“is_updated”信号なども生成される。
AJUST_EN31、AJUST_TIME33、AJUST_UNIT34は、図5に示す補正値生成部42への入力となる。尚、図5については後に説明する。補正値生成部42は、これらの入力等に基づいて、AJUST_STA35、REMAIN_TIME36等を生成する。AJUST_EN31、AJUST_TIME33、AJUST_UNIT34、AJUST_VEC32は、外部(例えばNET LSI22)で生成される。
尚、AJUST_VEC32は図5に示す加減算器43への入力となる。また、尚、図6に示すレジスタは、補正値生成部42に内蔵されているものと見做しても構わないが、この例に限らない。
AJUST_UNIT34は、既に説明したように予め設定される上限値(調整の単位時間)であり、ここではAJUST_UNIT=0.05msとしている。AJUST_TIME33は、上述したように、検出される上記ズレ量“P”に基づいて算出/決定される、スレーブ局が調整すべき位相ずれ時間(補正量)である。また、AJUST_VEC32も、上述したように、上記ズレ量“P”に基づいて決定される、調整方向(+か−)を示すものである。
AJUST_EN31は、調整要求を示すビットであり、その立上りで調整開始と認識される。AJUST_EN31は、上位ソフトウェアあるいはコントローラレベルネットワークから送信される、補正要求受付ビットである。
AJUST_EN31は、例えば上記のようにNET LSI22が生成して補正値生成部42へ入力させる。NET LSI22は、自己が生成するコントローラ周期開始タイミング(5ms周期)と、DEV LSI24から信号線27を介して通知される上記1(ms)毎の割込み通知とに基づいて、上記ズレ量“P”を求める。そして、これより上記AJUST_TIME33やAJST_VEC32を生成する。尚、AJST_TIME33は補正量を示す。AJST_VEC32は、補正方向を示すビットである。
NET LSI22は、例えばこのAJUST_TIMEが‘0’ではない場合または所定値以上である場合、タイミング調整が必要と見做して、AJUST_EN31をONする。勿論、その際、生成したAJUST_TIME33やAJST_VEC32を、補正値生成部42に入力させる。
補正値生成部42は、AJUST_EN31の立ち上がりタイミングで、AJST_TIME33をREMAIN_TIME36にコピーする。あるいは、AJST_TIME33を後述するタクトカウンタ41のカウンタ値に換算して、これをREMAIN_TIME36とする。
補正値生成部42は、その後、調整を行う毎に、AJST_UNIT34の分だけREMAIN_TIME36から減算する。つまり、「REMAIN_TIME36=REMAIN_TIME36−AJST_UNIT34」によってREMAIN_TIME36を更新する。
また、補正値生成部42は、REMAIN_TIME36が‘0’より大きいときはAJST_STA35(1ビット)をONする。
AJST_STA35は、補正処理中および補正完了を示すビットである。ONで補正処理中を示し、OFFになると補正完了を示す。
REMAIN_TIME36は、上位から設定されたAJST_TIME33に基づいて上記のように生成・更新されるものであり、残りの補正量を示すものであり、以って補正処理の残り時間を示すものと言える。
AJST_UNIT34は、デバイスレベルネットワークの周期に関して一度に補正可能な単位時間を示す。当該補正可能単位時間AJST_UNIT34は、固定の値でもよいし、デバイスレベルネットワークの制御周期に応じてソフト的に設定してもよい。補正可能単位時間AJST_UNIT34は、予め開発者等が決定して設定している数値であり、例えばタクト周期と入出力処理の帯域時間により決定される数値である(IOモジュール数、IOサイズ、タクト周期が決まれば、一意に計算できる)。
補正可能単位時間AJST_UNIT34は、例えば、MSG帯域後から次のTFフレームを送信するまでの余裕時間、またはTFフレーム送信からMCフレーム送信までの余裕時間の何れか短い時間以下に設定すればよい。勿論、この例に限らない。
上記AJST_UNIT34の決定方法について、以下、図8を参照して説明する。
まず、図24で説明したように、タクト周期(ここでは、上記“バス・タクト周期”)は、TF、MC、MSGの各帯域に分割されている。そして、通常は、ある程度のマージンが与えられている。これより、上記タクト周期=1(ms)の例において、例えば図8(a)に示すようにTF帯域=0.2(ms)、MS帯域=0.3(ms)、MSG帯域=0.4(ms)とした場合には、0.1(ms)分の空き時間(マージン)がある。よって、この例では、次のタクト周期開始タイミングを0.05(ms)早くしても、これは図示のように空き時間帯における任意のタイミングとなるので、特に問題ないことになる。尚、次のタクト周期開始タイミングが0.05(ms)早くなることで、例えば図4(a)に示すようにタクト周期は0.95(ms)となることになる。例えばこの様にしてAJST_UNIT34は決定される。
一方、図4(b)に示す例では、次のタクト周期開始タイミングを0.05(ms)遅くすることになるが、遅くし過ぎると以下に説明する問題が生じるので、これを考慮してAJST_UNIT34の値を設定する必要がある。
まず、前提として、一例として各I/Oモジュール毎に自己のタクト周期開始タイミングをTFフレーム受信時を基準にして決定している。例えば図8(b)に示すように、I/OモジュールAは、TFフレーム受信時からta時間経過時をタクト周期開始タイミングとする。同様に、I/OモジュールBは、TFフレーム受信時からtb時間経過時をタクト周期開始タイミングとする。I/OモジュールCは、TFフレーム受信時からtc時間経過時をタクト周期開始タイミングとする。これらta、tb、tcは、CPUモジュールが決定して各I/Oモジュールに通知する。決定方法については特に説明しないが、図8(b)に示すように全I/Oモジュールでタクト周期開始タイミングが同一になるように、ta、tb、tcを決定する。
但し、実際には、TFフレームが途中で消失する場合があることから、各I/Oモジュールは、上記のようにTFフレーム受信時を基準にしてタクト周期開始タイミングを決定したら、その後は内蔵のタイマ等に基づいて例えば1秒周期でタクト周期開始タイミングを決定していた。
ここで、図8(b)は通常時を示し、図8(c)は上記図4(b)等のように次のタクト周期開始タイミングを遅くした場合を示している。
CPUモジュールにおいて次のタクト周期開始タイミングを遅くすると、その分だけCPUモジュールによるMCフレーム送信タイミングが遅くなり、それによって図8(c)に示すように各I/OモジュールのMCフレーム受信タイミングも遅れることになる。
ここで、タクト周期開始タイミングは直ちに修正することは困難である為、例えば図8(b)に示すタイミングのままであり、従ってMCフレーム受信タイミングがタクト周期開始タイミングに近づくことになる。そして、遅れを大きくすれば、特に一番遅く受信するI/OモジュールCにおいて、図8(c)に示すようにMCフレーム受信タイミングがタクト周期開始タイミングより遅くなる場合が起こり得る。この場合、I/OモジュールA,Bは今回のMCフレームで得た最新の出力(指令等)に基づいて演算動作するが、I/OモジュールCのみは前回のMCフレームで得た旧い出力のままで演算動作することになる。
尚、図24で説明したように、各IOモジュールは、自己のタクト周期タイミングで、その時点での最新のMCデータを用いて演算開始する。
ここで、各I/Oモジュールは、図24に示す演算時間において、例えばMCフレームで得たCPUモジュール出力(指令等)に基づいて、制御対象機器(モータ等)を制御している。ここで、仮に図示のI/OモジュールA,B,Cが1つのベルトコンベアに係わる3台のモータをそれぞれ制御する場合、I/OモジュールA,Bは最新の指令(起動指令とする)に応じてモータを起動して運転開始させたが、I/OモジュールCだけはモータ停止状態を維持すること等が起こり得る。当然、この例の場合、制御対象機器は異常動作することになる。
例えば上述した理由等により、例えば最も遅くMCフレームを受信するI/OモジュールCのMCフレーム受信時からタクト周期開始タイミングまでの時間をtc2とした場合、AJST_UNIT34の値はtc2未満となるように決定する。
尚、上述したことから、AJST_UNIT34の値は、CPUモジュールにおいてタクト周期開始タイミングを早める場合と遅くする場合それぞれに応じて2種類設定してもよい。
以下、図5に示すタイマ制御部について説明する。
タイマ制御部は、タクトカウンタ41、補正値生成部42、加減算器43、比較器44等から成る。
タクトカウンタ41は、所定のクロック信号によってカウントアップするロード機能付カウンタであり、デバイスレベルネットワークのタクト周期開始タイミング(タクト割込み信号)を生成・出力する。尚、タクトカウンタ41自体は、既存の構成である。
タクトカウンタ41は、ロード付アップカウンタであり、クロック信号CLKの立上り毎にカウントアップしてカウント値Qを+1インクリメントする。LOAD端子への入力がONになると、Data端子への入力(=0)に応じてカウント値Qを‘0’リセットする。尚、クロック信号CLKは、DEV LSI24のクロック等を用いる。
加減算器43は、補正処理中にタクト周期を補正する為の構成であり、後に説明する。
比較器44は、タクトカウンタ41の出力(カウント値Q)と、加減算器43によって補正後のタクト周期とを比較し、カウント値Qが“補正後タクト周期”以上である場合に出力(“is_updated”信号)をONする。この“is_updated信号”が上記LOAD端子への入力となると共に補正値生成部42に入力している。
補正値生成部42は、上記AJST_TIME、AJST_UNIT、AJUST_ENを入力とし、AJUST_ENの立上りで補正処理を開始し、まずAJST_TIMEをREMAIN_TIMEにコピーする。その後は、REMAIN_TIMEを随時更新しつつ、REMAIN_TIMEとAJST_UNITの何れか小さい方の値を、図示の補正値“takt_ajust”として加減算器43へ出力する。
AJST_STAは、AJUST_ENの立上りでONし、REMAIN_TIMEが‘0’になるとOFFする。AJST_STAのON/OFFは補正値生成部42が行う。尚、上記の通り、AJST_STA=ONの状態は補正処理中を意味し、OFFになると補正完了を意味する。
加減算器43は、加算(+)か減算(−)かを示すAJST_VECと、デバイスレベルネットワークのタクト周期(本例では1ms)と、上記補正値“takt_ajust”とを入力とし、これら入力に基づく演算結果を比較器44へ出力する。
加減算器43は、AJST_VECが+の場合には、「タクト周期+“takt_ajust”」を上記“補正後タクト周期”として生成して比較器44へ出力する。加減算器43は、AJST_VECが−の場合には、「タクト周期−“takt_ajust”」を上記“補正後タクト周期”として生成して比較器44へ出力する。
比較器44は、タクトカウンタ41の出力Qが上記比較器44への入力(補正後タクト周期)以上になった場合にONする。比較器44の出力(is_updated)は、タクトカウンタ41のLOAD端子に入力しており、ONすることでタクトカウンタ41がリセット(リロード)されることになると共に、タクトカウンタ41から不図示のタクト割込み信号が出力されることになる。尚、従来では、タクトカウンタ41と比較器44のみが存在する構成であったと見做してもよい。従来では、この構成において、比較器44にはタクト周期と上記カウント値Qが入力された構成によって、タクト割込み信号を生成していたものと見做してよい。
ここで、本例では、比較器44の出力(“is_updated”)は、補正値生成部42にも入力している。そして、補正値生成部42は、上記出力(is_updated)がONする際の立上りにより、REMAIN_TIMEからAJST_UNITを減算する。つまり、「REMAIN_TIME=REMAIN_TIME−AJST_UNIT」によって、REMAIN_TIMEを更新する。
尚、AJST_UNITは、コントローラのタクト周期がユーザにより設定されれば、パソコン(支援ツール等)で一意に計算される値である。AJUST_ENはコントローラがコントローラレベルネットワークのスレーブとして動作し、上位コントローラレベルのネットワークタイマの割込みがデバイスレベルネットワークのタクト周期とずれていることを認識したコントローラ上のソフトウェアによりONされる。
ここで、補正値生成部42において、各出力信号は以下の論理で生成される(ここでは、C言語的に記述する)
・REMAIN_TIME
IF (AJUST_EN == ON) {
IF (AJUST_EN前回値 == OFF) { /*AJUST_EN立上り*/
REMAIN_TIME = AJST_TIME;
} ELSE IF (is_updated == ON) {
IF (REMAIN_TIME >= AJST_UNIT) {
REMAIN_TIME = REMAIN_TIME - AJST_UNIT;
} ELSE {
REMAIN_TIME = 0;
}
}
}
上記REMAIN_TIME信号の生成処理について、以下、説明する。
上記のように、AJUST_ENの立ち上がりすなわちOFFからONになるときに、AJST_TIMEをREMAIN_TIMEに代入する。また、AJUST_ENがONの状態において、もし“is_updated”がONになったならば、REMAIN_TIMEを更新する。この更新方法は、もしREMAIN_TIMEがAJST_UNIT以上である場合には、現在のREMAIN_TIMEからAJST_UNITを差し引いた値を、新たなREMAIN_TIMEとする。一方、もしREMAIN_TIMEがAJST_UNIT未満である場合には、REMAIN_TIMEを‘0’にする。
後述する図7の例では、REMAIN_TIMEが‘18’でAJST_UNITが‘5’であるので、図示のようにAJUST_ENの立ち上がりでREMAIN_TIMEが‘18’にセットされ、その後は、“is_updated”がONとなる毎にREMAIN_TIMEの値が‘5’ずつ減少していくことになる。つまり、REMAIN_TIMEの値は図示のように18→13→8→3と順次更新されていくことになる。そして、最後は、REMAIN_TIME(=3)がAJST_UNIT(=5)未満であることから、REMAIN_TIMEは‘0’になる。
・AJST_STA
AJST_STA = (REMAIN_TIME <> 0);
上記AJST_STA信号の生成処理について、以下、説明する。
AJST_STA35は、REMAIN_TIME36が‘0’より大きいときにONする。図7の例の場合、上記のようにAJUST_ENの立ち上がりでREMAIN_TIMEが‘18’にセットされることでAJST_STA35はONする。そして、その後、上記のようにREMAIN_TIMEが‘5’ずつ減少していき最後に‘0’になるまでの間、AJST_STA35はON状態となっている。
・takt_ajust
IF (AJUST_STA == ON) {
IF (REMAIN_TIME >= AJST_UNIT) {
takt_ajust = AJST_UNIT;
} ELSE {
takt_ajust = REMAIN_TIME;
}
} ELSE {
takt_ajust = 0;
}
上記takt_ajust信号の生成処理について、以下、説明する。
REMAIN_TIMEをAJST_UNITと比較して、何れか小さい方の値をtakt_ajustとして加減算器43へ出力する。これより、図7の例の場合、REMAIN_TIMEが‘18’、‘13’、‘8’のときには、AJST_UNITの値(=5)がtakt_ajustとして出力される。そして、REMAIN_TIMEが‘3’のときには、この値‘3’がtakt_ajustとして出力される。
尚、AJUST_STAがOFFになったら、takt_ajustは‘0’とする。
図7は、上記補正値生成部42に係わる各種信号のタイミングチャート図である。
この例は、下記の条件の場合の動作例である。
すなわち、クロックCLK=1μs、タクト周期=1ms、AJST_UNIT=5μs、AJST_VEC −方向、AJST_TIME 18μsの場合とする。尚、タクトカウンタ41は0からカウントするため、1ms(1000μs)の場合999をセットする。尚、ここでは−方向を例とするが、+方向の場合も基本的に動きは同様であり、補正後タクト周期が+方向に調整される点で相違するのみである。
ここで、図7に示す各種信号について、その殆どは既に説明済みであり、上述したように、AJUST_ENがONになった後は、takt_ajustの値は、しばらくの間は‘5’になっており、その後に‘3’になった後、最後は‘0’に戻る。これによって、タクトカウンタ41の動作は、図7にその出力値Qで示すと共に“is_updated”に示す通りとなる。すなわち、takt_ajustの値が‘5’であるときには、Q値が‘994’(=999−5)のときに“is_updated”がONとなり、カウンタ41はリセットされて、再び‘0’からカウントアップしていく。つまり、通常よりも短い時間でリセットされ、以って通常よりもタクト周期が短くなる。
その後、タクトtakt_ajustの値が‘3’であるときには、Q値が‘996’(=999−3)のときに“is_updated”がONとなる。
尚、補正値生成部42の上述した処理機能・動作は、CPU等がプログラムを実行することで実現してもよいし、プログラマブルロジックデバイス (programmable logic device: PLD)等によって実現してもよいが、実現方法はこれらの例に限らない。
ここで、図9に、コントローラレベルネットワーク、デバイスレベルネットワークの周期開始タイミング制御の一例を示す。
この例では、コントローラ周期は、図示のTC帯域、TS帯域、MSG帯域に時分割される。TC帯域は、同期フレームを送信するための帯域である。TS帯域は、コモンメモリデータを交換するための帯域である。MSG帯域は、任意の局間で1対1のメッセージ交換を行う為の帯域である。
尚、図9の例では、タクト周期の2周期分が、コントローラ周期の1周期となっているが、勿論、この例に限らず、ユーザによる設定等により任意に定められる。但し、一般的に、コントローラレベルネットワークの制御周期の方が、デバイスレベルネットワークの制御周期に比べて長い。また、本手法では、上述したことから、コントローラ周期の1周期が、タクト周期の整数倍となるように設定することが望ましい。これによって、デバイスレベルネットワークとコントローラレベルネットワークを同期して運用することができる。
また、図9に示す例では、コントローラレベルネットワークのTC帯域開始位置を、デバイスレベルネットワークにおけるMCフレーム送信タイミングとする例を示している。尚、これは、コントローラ周期開始タイミングとタクト周期開始タイミングとを同期させることと同義と見做しても良い。つまり、図9に示す通り、コントローラ周期開始タイミングは、TC帯域開始位置を意味する。また、上記図24におけるタクト周期開始タイミング(タクト周期の開始位置224)は、バス上へのMCフレーム送信開始タイミングに相当する。尚、ここではバスとは、デバイスレベルネットワークを意味するものとする。
図10は、上記図9の例に基づいて、特に上限を設けることなく、コントローラ周期開始タイミングに基づいてタクト周期開始タイミングの補正を行った場合の一例を示す。つまり、ここでは、ずれ量分を一度に補正した場合の動作例を示す。
まず、図10の図上上側に示すように、上記図9に示す例から、マスタ局においては、タクト周期開始タイミングの2回に1回を、コントローラレベルネットワークのTC帯域開始位置(コントローラ周期開始タイミング)とする。これは、タクト周期開始タイミングからコントローラ周期開始タイミングを決定することに相当する。
尚、ここでは、タクト周期開始タイミングが、図示のアプリ演算周期の開始タイミングであると共に、図示のバス・タクト周期におけるMCフレーム送信開始タイミングであるものとする。尚、ここではCPUモジュールにおけるタクト周期が、アプリ演算周期とバス・タクト周期の2種類あるものと見做して説明するものとする。アプリ演算周期とバス・タクト周期については、既に従来技術等で説明している。また、タクト周期には更に図示のようなIOモジュール側のタクト周期もある。従来技術で説明したように、全てのIOモジュールにおいてそのタクト周期開始タイミングを図10に示すように同期させること、すなわち演算開始タイミングを同期させることは、既存技術である。
その後、特に図示しないが、任意のスレーブ局のコントローラ周期開始タイミングを、マスタ局のコントローラ周期開始タイミングと同期させたものとする。そして、ここでは、このスレーブ局に関しては、MCフレーム送信開始タイミングとTC帯域開始位置とに、図示の符号50で示すズレが生じているものとする。このズレを一度に修正するようにタクト周期開始タイミングを調整した場合、図示のように各IOモジュールをTFフレームが巡回している状態で、MCフレーム送信が行われることになる。この為、TFフレームの巡回が途中で疎外され、TFフレームがCPUモジュールに正しく戻らなくなる、すなわち各IOモジュールからの入力データがCPUモジュールに正しく収集されなくなる可能性がある。
図11に、図10の例に対して、本手法を適用した場合の動作例を示す。
図11に示すように、図示の符号51で示すズレ量、すなわちMCフレーム送信開始タイミングとTC帯域開始位置とのズレ量は、図10の例よりも大きくなっている。しかし、図示の符号52、53に示すように、1回当たりの補正量は小さくなっている。つまり、例えば1回当たりの補正量が上記上限値(=0.05ms)等となっている。これによって、問題なく補正できる。
そして、上記1回当たりの補正量に上限を設けた補正を繰り返し実行することで、最終的には図12に示す状態となる。すなわち、図12に示すように、スレーブ局において、MCフレーム送信開始タイミングとTC帯域開始位置とが一致した状態となる。これは、換言すれば、スレーブ局において、タクト周期開始タイミングがコントローラ周期開始タイミングと同期していることを意味する。そして、これは、スレーブ局のタクト周期開始タイミングが、マスタ局のタクト周期開始タイミングと一致していることも意味している。
以上の実施例により、複数プログラマブルコントローラからなるマルチコンフィグレーションシステムにおいて、全てのコンフィグレーションのネットワーク制御周期を、データ交換抜けなく同期させることが可能となる。
尚、以上の実施例を実施例1とする。
実施例1の上述した特徴は、換言すれば例えば下記のように言うこともできる。
まず、複数のコントローラ(CPUモジュール)を、マスタ局と、それ以外(スレーブ局)とし、マスタ局では、コントローラレベルネットワークの周期制御に、デバイスレベルネットワークのタイマカウンタを使用する。このタイマカウンタは、上記タスク周期(1ms)をカウントするものであり、一例が上記タクトカウンタ41である。マスタ局では、コントローラ周期を、タスク周期の整数倍とする。マスタ局では、自局におけるタスク周期に基づいてコントローラ周期を生成し、以って当該コントローラ周期は当該タスク周期に同期している。
そして、例えば先願に記載の処理によって、各スレーブ局のコントローラ周期を、上記マスタ局のコントローラ周期に同期させる。尚、各スレーブ局は、同期完了後、自局のコントローラ周期用のカウンタを用いて、例えば上記5ms周期のコントローラ周期開始タイミングを生成してもよい。また、各スレーブ局も上記デバイスレベルネットワークのタイマカウンタを有している。
その後、各スレーブ局毎に、上記マスタ局のコントローラ周期に同期させた自局のコントローラ周期に、自局のタクト周期を同期させる。これは、上記補正方向や補正量を求めて、これらに基づいて上記タイマカウンタの周期を一時的に変更させること等で実現する。その際、補正量が上限値を超えている場合には、デバイスレベルネットワークの複数周期に分けて補正を実施する。尚、上限値は、一度に補正可能な単位であり、予め決定されて設定されている。
尚、コントローラレベルネットワークに接続されるコントローラは常に同期を必要としているとは限らない。これより、デバイスレベルネットワークのタイマカウンタを使用してコントローラレベルネットワークの周期制御を行うか、別のタイマカウンタを使用してコントローラレベルネットワークの周期制御を行うかを、選択可能としてもよい。
以上、実施例1について説明した。
次に、以下、実施例2について説明する。
近年の金属圧延加工等の大規模高速システムでは、圧延ローラの制御パラメータ、圧延ローラの回転速度、圧力等の実測値や圧延対象の温度、板厚等のデバイスレベルネットワークに接続された機器のアナログ計測値を収集し、分析する。この様にすることで、製品品質向上のためのパラメータチューニングや、測定データの変異を取得しシステム構成機器の予防保全へ適用するシステムが求められている。
このような課題に対し、システムのデータ収集対象となる機器のデータを収集する方法として、上記特許文献2のような方式が提案されている。
しかしながら特許文献2のような方式では、例えば上記図25に示したように、データ収集対象となる機器に対しデータ収集用に別ネットワークを接続する必要があり、以下のような課題がある。
・ データ収集対象機器にてシステム制御、データ収集で別処理を行う必要があり、機器のソフト的負荷が増大する。
・ 別途敷設するデータ収集用のケーブルのため、部品コスト、ケーブル敷設コスト、システム試験コストなどが増大する。
また、別ネットワークを用いずに、コントローラレベルネットワークを活用したデータ収集を行う場合では、収集されるデータについて以下の課題がある。
・ コントローラレベルの制御データしか収集できない。
・ コントローラレベルネットワークとアプリケーション制御周期(アプリ演算周期)に依存関係がない。
・ 一般的に、コントローラレベルネットワークの制御周期がコントローラのアプリケーション制御周期より長い。
別の収集ネットワーク等を設ける必要なく、以ってコストアップを避けつつ、上記のようなデバイスレベルの各種データを収集するためには、コントローラレベルネットワークに接続される全てのコントローラにおいて、デバイスレベルネットワークの制御周期を同期化すると共に、コントローラレベルネットワークにてデバイスレベルネットワークのデータをシステム全体で基準となる時間情報と共に扱うようにすればよい。
これらの条件のうち、前者の条件(同期化)は、上記実施例1によって実現される。すなわち、実施例1によって、全てのコントローラのタクト周期開始タイミングが同期化できている。後者の条件(基準となる時間情報)に関しては後述する。
また、コントローラレベルネットワークの制御周期が、デバイスレベルのネットワークの制御周期の整数倍(特に2倍以上)となるような場合(たとえばコントローラ周期が10msであるのに対して、タクト周期が2msなど)には、デバイスレベルネットワークに係わるデータ(各IOモジュールのデータ等)をコントローラにて収集し、この収集データをコントローラレベルネットワークの制御周期で一括して上位パソコン等へ通知できるようにすることが望ましい。
その為に、例えば、デバイスレベルネットワーク上でのIOモジュール等とのデータ交換の度に、この収集データをコントローラレベルネットワークに係わる送信データバッファ領域(NET_LS22内に不図示のバッファメモリ等)へコピーし、かつ収集時のデバイスレベル制御周期(タクト周期)を示す識別情報をデータに付加して、コントローラレベルネットワーク上へ送信する。
上位パソコンは、コントローラレベルネットワークを介して、各コントローラからの上記送信データを受信する。そして、上記付加データ等に基づいて各データの時系列を判別できる。
上述した各処理について、詳しくは後述する。
ここで、実施例2は、システム構成自体は、上記実施例1と略同様であってよく、ここでは特に図示、説明は行わないものとする。
ここで、上述したコンフィグレーション内では、上位支援ツール等から制御アプリケーションのダウンロードやアプリケーション起動/停止などの制御、モニタによる監視などが行われる。
各コンフィグレーションにおける各種処理は、制御アプリケーションの実行を制御するCPUモジュールを中心に行われるのが一般的であり、通信機能も含まれる。各コンフィグレーションは機能的、物理的に離れて配置されるので、通信機能によるデータ交換は非同期となるのが一般的である。
例えば上記サーバ装置2は、個々のコンフィグレーションの情報収集や指示通知のため、コントローラレベルネットワークを介して各コントローラと個別に通信を行う。サーバ装置2が、デバイスレベル機器(IOモジュール等)のデータを一括収集しようとしても、通信タイミングによりデータ取得時期がずれてしまい、一連の処理の中で収集されたデータであっても取得タイミングの保証はない。
ここで、本出願人は、上記先願(PCT/JP2013/050121)において、コントローラレベルネットワークに接続された複数のコントローラコンフィグレーションに係わる同期方式を提案している。
この発明によれば、コントローラレベルネットワークに先願2(国際公開番号;WO2013/121568A1)の発明を用い、かつこのコントローラレベルネットワークで用いられる「タイマ」をコントローラアプリケーションの実行周期管理に用いることにより、異なるコンフィグレーションに属するコントローラを同期させることができる。
ところで、コントローラのデバイスレベルに適用されるネットワークとして特開2012-68856号公報に開示されているようなネットワークがある。このネットワークは、リング形状を構成しているネットワークにおいて、IO機器への出力タイミングを同期させることを特徴とするネットワークである。このデバイスレベルネットワークを本発明のコントローラに適用すれば、コントローラレベルネットワークを介して接続されるコントローラおよびその制御デバイスが同期されたタイミングで制御データを与えられることになり、その結果、収集されるデータ(コントローラからみて各デバイス機器からの入力データ)も同一のタイミングで得ることができる。
図13に、実施例2におけるデータ収集動作例を示す。
尚、図13では、タクト周期がコントローラ周期と同じ長さである場合を例にするが、通常は、上記の通り、コントローラ周期の長さはタクト周期の整数倍(特に、2倍以上)である。また、図13には、上記実施例1によって、システム上の全てのコントローラのコントローラ周期及びタクト周期が同期している状態を示している。
まず、コントローラレベルネットワークに関して、マスタ局は、各スレーブ局に対して、コントローラ周期開始タイミング毎に同期化フレーム(TCフレーム)を送信する。図13に示す「TC」が、TCフレーム送信タイミングを示している。
尚、同期化フレームは、先願2(国際公開番号;WO2013/121568A1)等に開示されているように、本来はシステム全体で各コントローラの制御周期開始タイミングを調整するためのものである。但し、本手法では、同期化フレームによって制御周期開始タイミングの調整を行うとは限らない。本手法では、同期化フレームに含める時間情報等を用いて、各収集データの時系列管理を行う。
ここで、図示の符号51は、制御周期開始タイミングを示す。
上記の通り、図示の例の場合、コントローラ周期=タクト周期となっており、且つ、実施例1によって全制御周期開始タイミングが合っている状態であるので、図示の符号51は、全てのコントローラ(マスタ局と各スレーブ局)のコントローラ周期開始タイミング、及びタクト周期開始タイミング(ここでは、アプリ演算周期の開始タイミング)を意味している。
また、図24に示す例では、CPUモジュールにおけるバス上の動作(TF、MC、MSG)に関しては、タクト周期開始タイミングの直前にTFフレーム受信完了、直後にMCフレーム送信処理がある。上記の通り、CPUモジュールは、TFフレームをバス上に送出し、これが各IOモジュールを巡回して再びCPUモジュールに戻ってくる。その際、各IOモジュールは、自己の何等かの情報をTFフレームに付加している。これより、上記TFフレーム受信完了は、CPUモジュールが各IOモジュールの情報を収集したことを意味する。
ここで、CPUモジュールの処理を図2に示すCPU21の処理とDEV_LSI24とに分けて説明するならば、上記バス上の動作(TF、MC、MSG)はDEV_LSI24が実行する。上記収集した各IOモジュールの情報は、例えばSRAM25に格納される。これが、上記TFフレーム受信完了に相当する。CPU21は、例えば図24に示すように、タクト周期開始タイミングが到来する毎に、例えばSRAM25からTFフレームの情報を取得して、この情報等に基づいて所定の演算処理等を実行し、演算結果を例えばSRAM25に格納する。DEV_LSI24は、MCフレーム送信タイミングが到来する毎に、当該演算結果を上記MCフレームとしてバス上に送出する。これは、各IOモジュールに対して演算結果を出力することに相当する。
上記のように、上記バス上の動作(TF、MC等)は、アプリ演算周期を基準にして考えた場合、上記の通り、周期開始タイミングの直前にTFフレーム受信完了(入力)、直後にMCフレーム送信処理(出力)が行われるものと見做すことができる。図13では、これを図示の「入力」、「出力」として示している。そして、上記実施例1によって制御周期開始タイミング補正を行っていることで、図示のように全てのコントローラ(CTL1,CTL2)で「入力」のタイミング、及び「出力」のタイミングが一致していることになる。尚、ここではコントローラ(CPUモジュール)の一例としてCTL1,CTL2の2つのみを示している。
また、従来より、コントローラレベルネットワークにおけるTS帯域は、各コントローラに割り当てられた帯域に時分割されている。図13に示す例では、CTL1には図示の「D1」の帯域が割り当てられており,CTL2には図示の「D2」の帯域が割り当てられているものとする。これより、各コントローラCTL1,CTL2は、各コントローラ周期毎に、自己に割り当てられた帯域のときに、その時点の最新の上記「入力」及び「出力」を出力することになる。そして、これは、図示の通り、全てのコントローラにおいて同じタイミングで得られた「入力」及び「出力」が、コントローラレベルネットワーク上の送信先にパケット送信されることになる。このパケット送信先は例えばマスタ局あるいはサーバ装置2等である。
マスタ局あるいはサーバ装置2は、任意のコントローラ周期において受信したパケットは、全てが、当該コントローラ周期の開始時(コントローラ周期開始タイミング)の直前の「入力」と直後の「出力」であるものと見做すことができる。よって、サーバ装置2では、受信したパケットのデータの収集時間と出力時間を正しく推定することができる。しかし、より確実に推測する為に、後述するように上記TCフレームに含まれる時間情報を利用することが望ましい。これについては後に図14等を参照して説明する。
尚、実施例1で説明したように、コントローラ周期の1サイクルは、TC帯域、TS帯域等から成り、上記TCフレームはTC帯域内で送受信される。また、そして、上述したように、各局のデータ送信は、TS帯域内に行われる。TS帯域内を時分割して各局に割り当てられる。各局は、自己に割り当てられたタイミングでデータ送信を行う。例えば図示のように、コントローラCTL1は図示のデータD1、コントローラCTL2は図示のデータD2を図示のタイミングで送信する。
上記実施例1のタイミング調整処理によって、全コントローラ間で、コントローラ周期開始タイミングが同期していると共に、タクト周期も同期している。これより、図示のように、入力処理がコントローラCTL1とCTL2とで同一タイミングとなると共に、出力処理もコントローラCTL1とCTL2とで同一タイミングとなる。よって、各コントローラ周期毎に、そのデータD1とデータD2とは、同一タイミングで入力/出力されたデータであることになる。これは他のコントローラの送信データ(図示のデータD3等)も同様である。よって、例えば任意のコントローラ周期内で送信される各データフレーム(データD1とデータD2とデータD3)は、同一タイミングで入力/出力されたデータであることになる。
このようにすることで、図26の場合と異なり、入出力データの抜け、重複がなくなり、かつ全てのコントローラが、同一のタイミングの入出力データを、コントローラレベルネットワーク上の送信先へ送信することになる。
尚、「入力」、「出力」のタイミングは、必ずしも図13に示すタイミングでなくても構わない。例えば「入力」は、図13では周期開始タイミングの直前となっているが、この例に限らない。但し、全てのコントローラで同一のタイミングとなるように予め設定しておく必要がある。例えば、「入力」は周期開始タイミングの直後とするとしたならば、全てのコントローラにおいて周期開始タイミングの直後に「入力」(TFフレーム受信完了)が行われるように構成する必要がある。
この様に、各コントローラ毎に、自己の周期開始タイミング等に基づいて「入力」、「出力」のタイミングを決定するが、この「入力」、「出力」タイミングは予め全てのコントローラで同一設定とする。これより、実施例1によって全てのコントローラの周期開始タイミングが一致するように調整すれば、全てのコントローラで同じタイミングで「入力」、「出力」が行われることになる。
コントローラレベルネットワーク上で収集されるデータは、フレームの異常や上位PCの処理負荷などにより、データ抜けが発生することがあり、また各コントローラから収集したデータの取得タイミングの一意性を保障するために、システム全体で同一のタイミングを保障する情報が必要となる。
各局から送信されるデータフレームの一意性を示すには、マスタ局から各周期毎に必ず全スレーブ局にブロードキャスト送信される同期化フレーム(TCフレーム)に含まれる“マスタ局の「タイマ値」(NET_TIME)(96)”を利用すればよい。すなわち、各スレーブ局は、自己の送信データフレームに、“マスタ局の「タイマ値」(NET_TIME)(96)”を格納して、送信すればよい。
図14に、上記同期化フレーム(TCフレーム)、データフレームのフレームフォーマット例を示す。
尚、例えばマスタ局がTCフレームを全スレーブ局へ送信し、各スレーブ局は上記独自のタイミングでデータフレームを返信する。
図示の例のTCフレーム90は、H_TYPE91、SIZE92、FC93、S_ADDR94、R_ADDR95、NET_TIME96、F_SEQ97、STA98等から成る。尚、これらはフレームヘッダのデータ構成と見做してよい。
H_TYPE91はフレームヘッダタイプを示し、SIZE92はフレーム全体のサイズを示している。FC93は、フレーム種別を示しており、ここでTCフレームのフレーム種別が格納される。S_ADDR94、R_ADDR95は、送信局番、受信局番を示している。
F_SEQ97は、フレーム番号であり、フレーム種別によらずフレーム送信毎にインクリメントして付加される通し番号である。これは、受信側においてNET_TIME96等と合わせてフレーム受信抜けをチェックする為の情報である。
そして、NET_TIME96は、例えば当該TCフレーム90の送信時間を示すものであり、例えば不図示のタイマの現在値を用いるが、この例に限らない。本例ではデータ収集タイミングを一意に示す情報として「タイマ値」(NET_TIME)を使用するが、コントローラレベルネットワークの周期を示すカウンタ値(スキャンシーケンス番号)等を用いてもよい。尚、上記タイマ値は、TCフレームの送信元の装置(例えばマスタ局)内蔵のタイマの値である。
一方、図示の例では、データフレーム100は、H_TYPE101、SIZE102、FC103、S_ADDR104、R_ADDR105、NET_TIME106、F_SEQ107、STA108、制御データ109、収集データ110等から成る。
上記H_TYPE101〜STA108は、上記H_TYPE91〜STA98と略同様と見做してよく、ここでは説明を省略する。但し、FC103には、データフレームのフレーム種別が格納されることになる。
ここで、制御データ109には、例えば上記MCフレームによる各IOモジュールへの出力データが格納される。
収集データ110には、例えば上記TFフレームによって各IOモジュールから収集したデータ(上記「入力」)である図示のデータ115が含まれるが、これ以外にも図示のD_TYPE111、データ部サイズ(DT_SIZE)112、NET_TIME113、自局番(S_ADDR)114等も含まれる。尚、D_TYPE111は、収集データであることを示す識別情報である。
ここで、NET_TIME113は、上記TCフレーム90のNET_TIME96をコピーしたものである。これより、この収集データ110等を取得した装置側(マスタ局やサーバ装置2等)では、各収集データ110がどのコントローラ周期に係わるものであるかを判別できる。よって、上述したことから、各収集データ110の収集タイミングを判別できる。
ここで、上記実施例2では、コントローラ周期がタクト周期のN倍(N=2,3,4,5、・・・;2倍以上の整数倍)となっている場合、コントローラ周期開始タイミング直近のデータしか収集されない。
そこで、各コントローラ(スレーブ局)内に上記IOモジュールからの収集データ等を一時的に蓄積する中間バッファ(不図示)を設け、当該中間バッファに各タクト周期毎の収集データ等を順次蓄積する。そして、コントローラ周期開始タイミング毎に、中間バッファに蓄積したデータ全てをコントローラレベルネットワークの送信先(マスタ局など)へパケット送信すると共に、中間バッファの蓄積データを消去する。これを実施例2の変形例とする。
ここで、任意のコントローラ周期でパケットを受信したマスタ局などでは、これが当該コントローラ周期の直前等の所定期間内の収集データ群等であることは分かるが、その各データがどのタクト周期に係わるデータであるのかまでは分からない。そこで、図15に示すように、各データに、どのタクト周期に係わるデータであるのかを識別させる為の識別情報を付加することが望ましい。この識別情報は、例えば中間バッファに蓄積する際に付加している。よって、この例では、パケット生成・送信時には、単に、中間バッファの蓄積データをパケットに格納するだけである。
図15は、上記実施例2の変形例で用いられるデータフレーム100のデータ構成例である。
図15において図14に示すデータフレーム100のデータ構成と略同様のものには同一符号を付してあり、その説明は省略する。
図15に示す例では、図14に示す例に対して、収集データ110において更に図示のIO_SIZE121、収集数(IO_NUM)122を追加すると共に、複数の各収集データ124毎にデバイスレベルでの収集周期を示すIO_SEQ123(識別情報)を付加している。
図16は、実施例2の変形例におけるデータ収集動作例を示す図である。
図16に示す例では、コントローラ周期の長さは、タクト周期の3倍となっている。
従って、各コントローラ周期毎に、タクト周期3回分の収集データを、コントローラレベルネットワーク上の送信先に送信することになる。
この例では、1回のコントローラ周期に対して、3回のタクト周期開始タイミング毎に、収集データを中間バッファに格納・蓄積することになる。その際、上記識別情報(IO_SEQ123に相当)を各収集データに付加する。
これは、図16に示す例では、上記3回のタクト周期のうち、まず最初のタクト周期において、そのときの収集データ等を中間バッファに格納する。その際、上記識別情報として図では‘1’を付加する。これは、このときの収集データ等全てに対して‘1’を付加する。これによって、中間バッファには図示の蓄積データ133が格納された状態となる。
同様にして、2回目のタクト周期において、そのときの収集データ等を中間バッファに追加格納すると共に、当該収集データ等に上記識別情報として‘2’を付加する。これによって、中間バッファには図示の蓄積データ134が格納された状態となる。
同様にして、3回目のタクト周期において、そのときの収集データ等を中間バッファに追加格納すると共に、当該収集データ等に上記識別情報として‘3’を付加する。これによって、中間バッファには図示の蓄積データ135が格納された状態となる。
この様にして任意のコントローラ周期内の収集データを識別情報を付加して中間バッファに蓄積する。そして、次のコントローラ周期における所定のタイミング(例えば図示のコントローラCTL1の場合は図示の「D1」のタイミング)で、中間バッファの蓄積データ全てをコントローラレベルネットワークの送信先(マスタ局など)へパケット送信する。上記の例では、蓄積データ135を所定の送信先へ送信する。
送信先側では、上記各データの識別情報に基づいて、各データが上記コントローラ周期内のどのタイミング(1回目のタクト周期、2回目のタクト周期、3回目のタクト周期)における収集データであるのかを判別できる。
上述した実施例2によれば、まず、図26で説明した問題を解消できる。すなわち、全てのコントローラにおいて、デバイスレベルネットワークに係わるデータの入力、出力のタイミングを、同期化させることができる。更に、例えば、送信先装置等に集められた各I/Oデータの同時性を保証できると共に、時系列の判別精度を高めることができる。つまり、どのデータがどのデータと同じときに収集されたデータであるのか、あるいは各データ毎の他のデータとの時系列的な前後関係等が、高精度で判別可能となる。高精度とは、タクト周期の長さ(ここでは1ms)に応じたものを意味する。
尚、従来では、図26で説明したように、同じコントローラ周期で各コントローラから集めたデータであっても、同じタイミングで収集されたデータであるとは限らなかった。また、従来では、コントローラ周期の長さ(ここでは5ms)に応じた精度しか得られなかった。実施例2では、この様な問題を解消できる。
図17は、本例のプログラマブルコントローラシステムの機能ブロック図である。
本例のプログラマブルコントローラシステムは、基本的には、コントローラと各入出力対象とが第2ネットワークに接続されて成る制御ユニットを複数有し、該複数のコントローラは第1ネットワークにも接続されており、各コントローラが前記第1ネットワークに係わる第1周期と前記第2ネットワークに係わる第2周期に従って演算/通信動作するプログラマブルコントローラシステムである。
上記第1ネットワークの一例が上記コントローラレベルネットワーク1であり、よって上記第1周期の一例が上記コントローラ周期となる。上記第2ネットワークの一例が上記デバイスレベルネットワーク13であり、よって上記第2周期の一例が上記タクト周期となる。
上記複数のコントローラは、特定コントローラ150と、該特定コントローラ150以外の各コントローラ160(以下、他コントローラ160と記す)等である。尚、特定コントローラ150の一例が上記マスタ局のコントローラ(CPUモジュール等)である。他コントローラ160の一例が上記各スレーブ局のコントローラである。
上記特定コントローラ150は、自己の前記第2周期開始タイミングに基づいて自己の前記第1周期開始タイミングを決定する第1周期生成部151を有する。
上記他コントローラ160は、それぞれ、第1周期同期部161、第2周期補正部162等を有する。
第1周期同期部161は、自己の上記第1周期開始タイミングを、特定コントローラ150の第1周期開始タイミングに同期させる。これは、一例としては上記先願(PCT/JP2013/050121)によるコントローラレベルネットワーク上の各コントローラのコントローラ周期の同期処理によって実現させるが、この例に限らない。
第2周期補正部162は、自己の第2周期開始タイミングを自己の第1周期開始タイミングに基づいて補正する。尚、上記の通り、自己の第1周期開始タイミングは、特定コントローラ150の第1周期開始タイミングと同期している。更に、上記第1周期生成部151によって、特定コントローラ150においてはその第1周期開始タイミングは第2周期開始タイミングに同期化されている。従って、上記第2周期補正部162による補正が行われることで、全ての他コントローラ160における第2周期開始タイミングが、特定コントローラ150における第2周期開始タイミングと同期することになる。
上記第2周期補正部162は、例えば、上記第2周期開始タイミングの補正量が所定の上限値を越える場合には、該上限値以下の補正値によって複数回に分けて前記第2周期開始タイミングの補正を行う。上記補正量の一例が上記ズレ量Pや「タクト周期−P」等であり、上記上限値の一例が上述したAJST_UNIT等である。
上記上限値は、例えば、第2周期内の予め割り当てられた各帯域以外の空き時間帯に基づいて決定されている。
あるいは、例えば、上記第2周期内は、コントローラ160等が第2ネットワークを介して各入出力対象からデータを収集する帯域であるTF帯域と、コントローラ160等が各入出力対象への出力を行う帯域であるMC帯域と、任意の1対1のメッセージ送受信帯域であるMSG帯域とから成る。そして、上記上限値は、上記MSG帯域後の空き時間に基づいて決定されている。
あるいは、例えば、上記第2周期内は、コントローラ160等が第2ネットワークを介して各入出力対象からデータを収集する帯域であるTF帯域、コントローラ160等が各入出力対象への出力を含むMCフレームを第2ネットワーク上に巡回させる帯域であるMC帯域と、任意の1対1のメッセージ送受信帯域であるMSG帯域とから成る。そして、各入出力対象は、第2周期に基づくIO周期に従って動作している。そして、上記上限値は、上記補正によって第2周期開始タイミングが補正値分変わっても、上記MCフレームを最後に受信する入出力対象が該MCフレームを受信する前に、次のIO周期とならないようにして決定されている。
尚、上記上限値の決定方法は、例えば上述したAJST_UNITの値の決定方法に準じている。これより、上記IO周期は、例えば図24の符号223に示す各IOモジュールA,B,Cに係わるタクト周期に相当する。
また、上記第2周期補正部162は、例えば、補正方向を−方向とするか+方向とするかを決定し、補正方向を−方向とする場合には自己の第2周期の長さを一時的に短くすることで該第2周期開始タイミングの補正を行う。一方、補正方向を+方向とする場合には自己の第2周期の長さを一時的に長くすることで該第2周期開始タイミングの補正を行う。この処理の一例を上記図4(a)、(b)に示して説明しているが、この例に限らない。
また、上記第2周期補正部162は、例えば、自己の第1周期開始タイミングからその直後の第2周期開始タイミングまでのズレ量が、該第2周期の長さの半分未満である場合には前記補正方向を前記−方向とし、該ズレ量が該第2周期の長さの半分以上である場合には前記補正方向を前記+方向とする。この処理の一例を上記図3に関して説明している。上記ズレ量の一例が、図3の説明におけるズレ量Pであるが、この例に限らない。
また、上記第2周期補正部162は、例えば、上記補正方向を上記−方向とする場合には上記ズレ量を第2周期の補正量とし、上記補正方向を上記+方向とする場合には「第2周期の長さ−ズレ量」を第2周期の補正量とする。この処理の一例を上記図3に関して説明している。上記補正方向の一例が図3の説明におけるAJST_VECであり、上記第2周期の補正量の一例が図3の説明におけるAJST_TIMEであるが、これらの例に限らない。
また、例えば、前記各コントローラ160は、上記第1周期毎に、上記第2ネットワークを介して得た各入出力対象からの直近の収集データを、上記第1ネットワークを介して所定の送信先装置へ送信する送信部163を更に有する。
これに関して、例えば、上記送信先装置は、各第1周期開始時に、そのときの時間情報を含む特定パケットを各コントローラ160へ送信する。そして、各コントローラ160の上記送信部163は、各第1周期毎に、受信した特定パケットに含まれる上記時間情報を、上記直近の収集データの送信パケットに付加して、上記送信先装置へ送信する。尚、この処理の一例を上記図13、図14等で説明している。
また、上記第1周期は、例えば、上記第2周期の整数倍の長さである。これは、特に2倍以上の長さである。例えば図3の例では、コントローラ周期はタクト周期の5倍の長さとなっている。
このような例において、例えば、上記送信部163は、上記第1周期毎に、該第1周期内の各第2周期毎に各入出力対象から取得した収集データを、どの第2周期の際の収集データであるのかを示す識別情報と共に蓄積し、最後に該蓄積データをまとめて前記送信先装置へ送信する。尚、この処理の一例を上記図15、図16等で説明している。
尚、上記送信先装置は、例えばコントローラ150(マスタ局など)であるが、この例に限らず、例えばサーバ装置2等であってもよい。
最後に、先願(PCT/JP2013/050121)によるコントローラレベルネットワーク上の各コントローラのコントローラ周期の同期処理について説明する。これは、図18、図19、図20を参照して一例について説明する。
尚、上記CPUモジュール11は、一例としては以下に説明する先願のCPUモジュール180の機能の一部(特に、同期補正処理)を有するものと見做して構わないが、この例に限らない。
図18は、先願におけるCPUモジュール180の各機能部を説明するための機能ブロック図である。
CPUモジュール180は、遅延時間計測部181、同期化フレーム送信部182、遅延時間受信部184、同期補正部186、アプリケーション実行部188、データ更新部190、データ送信部192等の各種機能部を有する。
これらの各機能部は、そのプログラマブルコントローラがマスタとして動作するか、スレーブとして動作するかに応じて機能する場合と機能しない場合がある。ここでは、図上左側にマスタとして動作する場合のCPUモジュール180であるマスタCPUモジュール180aの構成例を示す。同様に、図上右側にはスレーブとして動作するCPUモジュール180であるスレーブCPUモジュール180bの構成例を示す。そして、マスタであるかスレーブであるかによって機能しない機能部については破線で示している。
なお、本実施形態は、上記の構成に限定されるものではなく、1つのCPUモジュール122がマスタCPUモジュール180aにもスレーブCPUモジュール180bにもなり得るように同一の構成を有している。
遅延時間計測部181は、CPUモジュール180がマスタCPUモジュール180aとして機能する場合に、マスタCPUモジュール180aとスレーブCPUモジュール180bとの伝送遅延時間を計測するための伝送遅延時間リクエストフレームを、任意のスレーブCPUモジュール180bに送信する。この伝送遅延時間リクエストフレームは、同期化フレームとフォーマットが実質的に等しく、同期化フレーム内の所定部分(例えば、コマンド部)のデータが異なるフレームである。この伝送遅延時間リクエストフレームは、マスタCPUモジュール180a内で生成された基準信号に同期して送信される。
また、遅延時間計測部181は、伝送遅延時間リクエストフレームを送信後、任意のスレーブCPUモジュール180bから受信完了フレームを受信すると、受信完了フレームを受信したときの時刻を取得する。そして、遅延時間計測部181は、伝送遅延時間リクエストフレームを送信したときの時刻と受信完了フレームを受信したときの時刻との差分から、マスタCPUモジュール180aと任意のスレーブCPUモジュール180b間の往復伝送遅延時間を計算する。そして、遅延時間計測部181は、計算した往復伝送遅延時間を2で除算し、その結果である伝送遅延時間を含む伝送遅延時間通知フレームを次の基準信号に同期させて任意のスレーブCPUモジュール180bに送信する。こうして、任意のスレーブCPUモジュール180bに、ネットワーク194による伝送遅延時間を通知することができる。尚、ネットワーク194は、上記コントローラレベルネットワーク1に相当すると見做してもよいが、この例に限らない。
同期化フレーム送信部182は、CPUモジュール180がマスタCPUモジュール122aとして機能する場合に、基準信号に同期して、予め用意された同期化フレームを複数のスレーブCPUモジュール180bに送信する。この同期化フレームは、スレーブCPUモジュール180bの基準信号生成部の計数値をマスタCPUモジュール180aの基準信号生成部の計数値に合わせるための信号である。
遅延時間受信部184は、CPUモジュール180がスレーブCPUモジュール180bとして機能する場合に、マスタCPUモジュール180aから伝送遅延時間リクエストフレームを受信し、その伝送遅延時間リクエストフレームに応じて、受信完了フレームをマスタCPUモジュール180aに送信する。また、遅延時間受信部184は、マスタCPUモジュール180aから伝送遅延時間通知フレームを受信すると、そのフレームに含まれる伝送遅延時間をRAM164等に退避する。このようにして、スレーブCPUモジュール180bは、マスタCPUモジュール180aとスレーブCPUモジュール180b間の伝送遅延時間を得ることができる。
同期補正部186は、CPUモジュール180がスレーブCPUモジュール180bとして機能する場合に、スレーブCPUモジュール180b内の基準信号生成部(不図示)によって生成された基準信号を伝送遅延時間分進める。
具体的に、同期補正部186は、まず、マスタCPUモジュール180aから同期化フレームを受信すると、基準信号生成部から計数値を取得し、伝送遅延時間に相当する値(基準信号生成部(不図示)の時間換算値)と、取得した計数値との差分である補正量を算出する。続いて、基準値から補正量を減算して補正基準値を導出し、その補正基準値を新たな基準値として一時的に基準信号生成部に設定する。したがって、補正基準値は、「基準値−(“伝送遅延時間に相当する値”−“基準信号生成部の計数値”)」で表される。
そして、補正基準値を設定し、基準信号生成部において、その補正基準値での計数が完了すると、同期補正部186は、速やかに、元の基準値を、基準信号生成部に設定する。こうして、一時的に基準値を伝送遅延時間分だけ進めることができる。ここでは、伝送遅延時間分の補正を一度に実行する例を挙げているが、かかる場合に限らず、複数回に分けて実行してもよい。なお、本実施形態において、同期補正部186が、マスタCPUモジュール180aから伝送遅延時間を得ることなく同期化フレームを受信した場合でも、伝送遅延時間をゼロ(0)として上記の補正処理を行えばよい。
こうして、本実施形態では、マスタCPUモジュール180aの基準信号生成部(不図示)とスレーブCPUモジュール180bの基準信号生成部(不図示)とを高精度に同期させることができる。なお、このような同期補正処理は、連続的に行ってもよいし、所定の時間毎に間欠的に行ってもよい。
アプリケーション実行部188は、マスタCPUモジュール180aおよびスレーブCPUモジュール180bのいずれにおいても、基準信号生成部で生成された基準信号に応じて(基準信号を割込信号として受けて)、実行プログラムを実行し、入出力モジュール191を介して被制御機器192を制御する。したがって、当該実行プログラムは、基準信号に応じて周期的に実行されることとなる。
データ更新部190は、マスタCPUモジュール180aおよびスレーブCPUモジュール180bのいずれにおいても、データ(例えば、ステータス情報、センサの検出結果、制御結果等)が生成されると、生成されたデータで、自己のCPUモジュール180内のコモンメモリ(不図示)の内容を更新する。
また、データ更新部190は、他のCPUモジュール180にそのデータを転送する。また、データ更新部190は、他のCPUモジュール180からデータが転送されると、かかるデータに基づいて自己のCPUモジュール180内のコモンメモリ(不図示)の内容を更新する。こうして、他のCPUモジュール180とデータを共有化できる。また、データ更新部190がデータを他のCPUモジュール180に送信する送信タイミングは、基準信号生成部(不図示)に基づいてCPUモジュール180毎に予め定められている。
データ送信部192は、マスタCPUモジュール180aおよびスレーブCPUモジュール180bのいずれにおいても、アプリケーション実行部188が実行プログラムを遂行することで生成されたデータのうち、管理装置193に収集要求されているデータを、管理装置193へ送信する。かかる送信タイミングは、データ更新部190の送信タイミングに倣う。本実施形態では、CPUモジュール180同士が同期しているので、管理装置193に、生成タイミングの等しいデータが収集される。
尚、管理装置193は、上記サーバ装置2の一例と見做しても構わないが、この例に限らない。
(同期補正処理)
図19は、同期補正処理例を説明するためのタイムチャート図である。ここでは、仮に、スレーブCPUモジュール180bの基準信号が、マスタCPUモジュール180aの基準信号より10μsec遅れているとする。なお、基準値(処理周期)は、1000μsecとするが、これに限定されるものではなく、例えば管理装置1930により適宜設定を変更することができる。また、図中、簡略のためμsecをμsと表現する。
図19では、マスタCPUモジュール180aの基準信号生成部が計数を行っている。その計数値が“図19に図上(1)で示す時点”(以下、“図19の(1)時点”と記す。他の同様)で基準値に達すると、マスタCPUモジュール180a内において基準信号を出力する。そして、アプリケーション実行部188は、当該基準信号に応じて実行プログラムを遂行する。図19中、ハッチングで示した三角形の領域は、計数値の推移を示し、時間の経過に従い計数値が増加し、計数目標(例えば基準値)に達するとリセットされる。
また、マスタCPUモジュール180aと並行して、スレーブCPUモジュール180bの基準信号生成部も計数を行っている。その計数値が図19の(2)時点で基準値に達すると基準信号を出力する。そして、アプリケーション実行部188は、当該基準信号に応じて実行プログラムを遂行する。このように、マスタCPUモジュール180aおよびスレーブCPUモジュール180bでは、それぞれ、独立した基準信号に応じて所定の処理が遂行されている。
また、マスタCPUモジュール180aにおいて同期補正処理が開始されると、マスタCPUモジュール180aの遅延時間計測部181は、伝送遅延時間を算出するために伝送遅延時間リクエストフレームを送信する(図19の(3))。スレーブCPUモジュール180bの遅延時間受信部184は、マスタCPUモジュール180aから伝送遅延時間リクエストフレームを受信すると、その伝送遅延時間リクエストフレームに応じて受信完了フレームをマスタCPUモジュール180aに送信する(図19の(4))。
続いて、マスタCPUモジュール180aの遅延時間計測部181は、受信完了フレームを受信すると、マスタCPUモジュール180aとスレーブCPUモジュール180b間の往復伝送遅延時間を計算する。そして、遅延時間計測部181は、計算した往復伝送遅延時間(400μsec)を2で除算した伝送遅延時間(200μsec)を含む伝送遅延時間通知フレームを、スレーブCPUモジュール180bに送信する(図19の(5))。スレーブCPUモジュール180bの遅延時間受信部184は、伝送遅延時間通知フレームを受信すると、そのフレームに含まれる上記往復伝送遅延時間(相当値)をメモリ/バッファに退避する(図19の(6))。
同期補正処理を開始後、マスタCPUモジュール180aの同期化フレーム送信部182は、同期化フレームを割り込み信号としてスレーブCPUモジュール180bに送信する(図19の(7))。そして、スレーブCPUモジュール180bは、ネットワーク194の片道の伝送遅延時間(200μs)を経て図19の(8)の時点で同期化フレームを受信すると、同期補正部186は、基準信号生成部から計数値(190μsecに相当)を取得する(図19の(9))。そして、同期補正部186は、伝送遅延時間(200μsec)と、基準値(1000μsec)を用いて、「基準値−(“伝送遅延時間に相当する値”−“基準信号生成部の計数値”)=1000−(200−190)」によって、補正基準値990μsecを得る。そして、同期補正部186は、その補正基準値を新たな基準値として一時的に基準信号生成部に設定する(図19の(10))。
その後、基準信号生成部は、図19の(11)時点で計数値が一時的な補正基準値990μsに達したため、リスタートしている。こうして、スレーブCPUモジュール180bの基準信号が、マスタCPUモジュール180aの基準信号と同期する。
図20は、同期補正処理の概略的なシーケンス例を示す図である。図20の例では、説明の便宜上、マスタCPUモジュール180aとスレーブCPUモジュール180bとを用いた同期について説明するが、本実施形態においてはこれに限定されるものではなく、1つのマスタCPUモジュール180aに対して複数のスレーブCPUモジュール180bを同期させることができる。
図20の同期補正処理において、まず、マスタCPUモジュール180aの基準信号生成部(不図示)は基準信号を生成し(S11)、スレーブCPUモジュール180bの基準信号生成部(不図示)は、マスタCPUモジュール180aと独立して基準信号を生成する(S12)。また、この処理は、周期的に行われる。
マスタCPUモジュール180aの同期補正処理が開始されると、マスタCPUモジュール180aの遅延時間計測部181は、伝送遅延時間を算出するために伝送遅延時間リクエストフレームをスレーブCPUモジュール180bに送信する(S13)。スレーブCPUモジュール180bの遅延時間受信部184は、伝送遅延時間リクエストフレームを受信すると、マスタCPUモジュール180aに受信完了フレームを送信する(S14)。
マスタCPUモジュール180aの遅延時間計測部181は、受信完了フレームを受信すると、例えば伝送遅延時間を算出し(S15)、算出した伝送遅延時間等を含む伝送遅延時間通知フレームを生成する(S16)。そして、遅延時間計測部181は、生成した伝送遅延時間通知フレームを、ネットワーク194を介してスレーブCPUモジュール180bに送信する(S17)。スレーブCPUモジュール180bの遅延時間受信部184は、伝送遅延時間通知フレームを受信すると、その伝送遅延時間通知フレームに含まれる伝送遅延時間(換算値)を、メモリ/バッファ等に退避する(S18)。
そして、マスタCPUモジュール180aの同期化フレーム送信部182は、基準信号に同期させて、同期化フレームを割り込み信号としてスレーブCPUモジュール180bに送信する(S19)。
スレーブCPUモジュール180bが同期化フレームを受信すると、同期補正部186は、基準信号生成部(不図示)から計数値を取得する(S20)。そして、同期補正部186は、伝送遅延時間と基準値を用いて、「基準値−(“伝送遅延時間に相当する値”−“基準信号生成部の計数値”)」を計算して、補正基準値を得る(S21)。そして、その補正基準値を新たな基準値として一時的に基準信号生成部に設定する(S22)。また、補正基準値を設定し、その補正基準値での計数が完了すると、同期補正部186は、速やかに、元の基準値を基準信号生成部に設定する(S23)。
このような同期補正処理を、制御システムに含まれる全てのスレーブCPUモジュール180bに対して実行する。こうして、スレーブCPUモジュール180bの基準信号は、マスタCPUモジュール180aの基準信号に同期する。すなわち、各CPUモジュール180上で動作する実行プログラム(アプリケーション)を同期させることができる。
以上説明したように、実施例2やその変形例によれば、複数プログラマブルコントローラからなるマルチコンフィグレーションシステムにおいて、各コンフィグレーション毎のデバイスレベルネットワークを介した収集データを、システム全体における時系列(収集タイミング;どのデータがどのデータより前か後か等)が分かる形で取得・管理できる。これは、例えば上位装置等が、コントローラレベルネットワークを介して各コンフィグレーションのコントローラから取得するものである。これより、既存システムよりも高精度にシステムパラメータチューニングや故障診断が可能となる。
尚、上記デバイスレベルネットワークは、例えばリング形状ネットワークであるが、この例に限らない。コントローラレベルネットワークは、例えば従来のタイマ同期機能を有するネットワークであるが、この例に限らない。