(57)【要約】【課題】  誤差範囲を特定でき、以って誤差保証範囲を特定できるようにする。【解決手段】  新たに稼動系となるＣＰＵモジュール２０は、等値化されていた前回フリーランカウンタ値をクリア（＝０）すると共に、自己のフリーランカウンタを初期化・再起動する。その後の例えば１スキャン目のタイマ命令実行の際、タイマ現在値には、切替え処理からの経過時間が加算されることになるが、切替え要因が発生する前の最終等値化から切替え処理までの時間が加算されないことになり、これが誤差時間となる。この誤差時間は、アプリケーション実行周期に依存するので、アプリケーション実行周期によって誤差範囲を特定することができる。【選択図】      図３
2005107776.tif 000002
【特許請求の範囲】
【請求項１】
一方が稼動系、他方が待機系となる２つのＣＰＵモジュールを有する２重化コントローラシステムにおいて、
前記各ＣＰＵモジュールは各々、フリーランカウンタを有し、
稼動系となるＣＰＵモジュールは、各タイマ命令毎に保持されるタイマ現在値、前回フリーランカウンタ値を前記フリーランカウンタを用いて更新すると共に、更新後のタイマ現在値、前回フリーランカウンタ値を待機系ＣＰＵモジュールへ転送して等値化させる制御手段を備え、
前記待機系ＣＰＵモジュールは、稼動／待機切替え要因発生によって新たな稼動系となる際の切替え処理において、前記タイマ現在値は等値化された値を継続し、前記等値化されている前回フリーランカウンタ値はクリアすると共に自己のフリーランカウンタを初期化・再起動する切替手段を有することを特徴とする二重化コントローラシステム。
【請求項２】
一方が稼動系、他方が待機系となる２つのＣＰＵモジュールを有し、該ＣＰＵモジュールにおいてタイマ命令を実行する２重化コントローラシステムにおいて、
前記各ＣＰＵモジュールは各々フリーランカウンタを有し、
稼動系となるＣＰＵモジュールは、各タイマ命令毎に保持されるタイマ現在値、前回フリーランカウンタ値を前記フリーランカウンタを用いて更新すると共に、更新後のタイマ現在値、前回フリーランカウンタ値、フリーランカウンタ値を待機系ＣＰＵモジュールへ転送して等値化させる制御手段を備え、
前記待機系ＣＰＵモジュールは、前記制御手段により転送される前記タイマ現在値、前回フリーランカウンタ値によって等値化処理を行うと共に前記フリーランカウンタ値を自己の停止状態のフリーランカウンタにセットする等値化手段と、
稼動／待機切替え要因発生によって新たな稼動系となる際の切替え処理において、前記停止状態のフリーランカウンタを起動して前記セットされた値から継続してカウント開始させると共に前記等値化されたタイマ現在値、前回フリーランカウンタ値を継続して用いさせる切替手段と、
を有することを特徴とする二重化コントローラシステム。
【請求項３】
２重化コントローラシステムにおける稼動／待機切替方法であって、
稼動系側において、各タイマ命令毎に保持されるタイマ現在値、前回フリーランカウンタ値を前記フリーランカウンタを用いて更新すると共に、更新後のタイマ現在値、前回フリーランカウンタ値を待機系側へ転送して等値化させ、
待機系側において、稼動／待機切替え要因発生によって新たな稼動系となる際の切替え処理において、前記タイマ現在値は等値化された値を継続し、前記等値化されている前回フリーランカウンタ値はクリアすると共に自己のフリーランカウンタを初期化・再起動することを特徴とする稼動／待機切替方法。
【請求項４】
２重化コントローラシステムにおける稼動／待機切替方法であって、
稼動系側において、各タイマ命令毎に保持されるタイマ現在値、前回フリーランカウンタ値を前記フリーランカウンタを用いて更新すると共に、更新後のタイマ現在値、前回フリーランカウンタ値、フリーランカウンタ値を待機系ＣＰＵモジュールへ転送して等値化させ、
待機系側において、前記転送される前記タイマ現在値、前回フリーランカウンタ値によって等値化処理を行うと共に前記フリーランカウンタ値を自己の停止状態のフリーランカウンタにセットし、稼動／待機切替え要因発生によって新たな稼動系となる際の切替え処理において、前記停止状態のフリーランカウンタを起動して前記セットされた値から継続してカウント開始させると共に前記等値化されたタイマ現在値、前回フリーランカウンタ値を継続して用いさせることを特徴とする稼動／待機切替方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、待機冗長２重化コントローラ（プログラマブルコントローラ）に関する。
【背景技術】
【０００２】
現在、プラント、工場などでは、工作機械や計測装置等の機器のシーケンス制御に多くのプログラマブルコントローラ等のコントローラを用い、ＦＡ（ファクトリーオートメーション）化を実現している。
【０００３】
プログラマブルコントローラでは、通常、プログラマブルコントローラのコントローラ本体であるＣＰＵモジュールにおいて、システムバス等を介して接続している各Ｉ／Ｏ機器を制御させる為のアプリケーション・プログラムが、複数のタイマ命令を使用している。
【０００４】
図７に示すように、各タイマ命令１〜Ｎは、ＣＰＵモジュール１００のアプリケーションプログラム１０１により使用される。ＣＰＵモジュール１００は、全てのタイマ命令１〜Ｎのベース時間を生成する１つのフリーランカウンタ１０２を備える。また、各タイマ命令１〜Ｎ毎にタイマ現在値１０３と前回フリーランカウンタ値１０４とをメモリ上に保持する。
【０００５】
上記タイマ命令、フリーランカウンタに関しては、例えば特許文献１等に記載されている。
そして、ある１つのタイマ命令が実行される毎に、以下の（１）、（２）の処理を実行することで、タイマ現在値１０３、前回フリーランカウンタ値１０４を更新する。
（１）タイマ現在値  ＋  （フリーランカウンタ値  −  前回フリーランカウンタ値）
＝＞  タイマ現在値
（２）フリーランカウンタ値  ＝＞  前回フリーランカウンタ値
尚、上記フリーランカウンタ値は、当該タイマ命令実行時のフリーランカウンタ１０２の値であり、以下、フリーランカウンタの現在値等と記するものとする。
【０００６】
ここで、近年、プログラマブルコントローラにおいて、信頼性を向上させるためにＣＰＵモジュールを待機冗長の２重化構成にする場合がある。待機冗長の冗長２重化構成は、２つのＣＰＵモジュールを１組とし、一方を稼動系、他方を待機系とし、稼動系のＣＰＵモジュールを待機系のＣＰＵモジュールが監視して、稼動系ＣＰＵモジュールに障害等の切替え要因が生じたならば待機系ＣＰＵモジュールが稼動系に切り替る構成である。
【０００７】
このような二重化コントローラシステムにおいては、稼動系／待機系の切替えが生じたときに制御データ整合性を持たせる為、稼動系ＣＰＵモジュールから待機系ＣＰＵモジュールに対して随時、制御データを転送して待機系ＣＰＵモジュールにおいても稼動系ＣＰＵモジュールと同じ制御データを保持させる等値化処理を行っている。
【０００８】
このような等値化すべき制御データには、図８に示すように、上記タイマ現在値、前回フリーランカウンタ値等も含まれる。
図８は、二重化コントローラシステムにおけるタイマ命令のデータ等値化について説明する為の図である。
【０００９】
図８には、待機冗長の２重化構成とした二重化コントローラシステムにおける２つのＣＰＵモジュールを示す。すなわち、ＣＰＵモジュール１１０、ＣＰＵモジュール１２０とを示す。ここでは、ＣＰＵモジュール１１０が稼動系、ＣＰＵモジュール１２０が待機系であるものとする。
【００１０】
図８において、稼動系のＣＰＵモジュール１１０で実行される任意のアプリケーション１１１により使用される各タイマ命令１〜Ｎ毎に、そのタイマ命令実行毎に、フリーランカウンタ１１２の現在値を参照して、上記（１）、（２）の処理により、実行したタイマ命令のタイマ現在値１１３、前回フリーランカウンタ値１１４を更新する。
【００１１】
一方、待機系のＣＰＵモジュール１２０は、アプリケーション１１１と同一のアプリケーション１２１を有するが（使用するタイマ命令１〜Ｎも同一）、待機系である為、アプリケーション１２１は実行されていない。しかしながら、アプリケーション１２１により使用される各タイマ命令１〜Ｎのタイマ現在値１２３、前回フリーランカウンタ値１２４は、上記等値化処理により、随時更新されている。
【００１２】
上記のように、従来では、タイマ現在値、前回フリーランカウンタ値の等値化は行っていたが、フリーランカウンタの値（現在値）の等値化は行っていなかった。稼動系ＣＰＵモジュール１１０のフリーランカウンタ１１２と待機系ＣＰＵモジュール１２０のフリーランカウンタ１２２は、互いに独立して動作している為、例えばＣＰＵモジュール１１０、ＣＰＵモジュール１２０の電源ＯＮの時間差により、フリーランカウンタのカウント値が異なることになる。例えば、ＣＰＵモジュール１１０を電源ＯＮしてから、数十秒後にＣＰＵモジュール１２０を電源ＯＮした場合、両モジュールのフリーランカウンタ値の差は、数十秒程度となる。
【特許文献１】特開平９−２４４７１６号公報
【発明の開示】
【発明が解決しようとする課題】
【００１３】
上述した従来の待機冗長２重化コントローラ（プログラマブルコントローラ）では、例えば稼動系ＣＰＵモジュール１１０に何らかの異常が生じる等して、稼動／待機切替えが行われた場合に、新たに稼動系となったＣＰＵモジュール１２０においてタイマ命令実行に不具合が生じていた。これについて、図９に示す例を参照して説明する。
【００１４】
図９は、稼動／待機切替え前後における従来のタイマ命令の実行状態を示す図である。
図９においては、各タイマ命令１〜Ｎの中でタイマ命令１の実行状態を例にして示す。
上述したように、フリーランカウンタは、稼動系のＣＰＵモジュール１１０と待機系のＣＰＵモジュール１２０とでは全く非同期にカウントしており、図示の例では、ＣＰＵモジュール１１０のフリーランカウンタ１１２の値は、ＣＰＵモジュール１２０のフリーランカウンタ１２２の値より、約‘３１’程小さくなっている。つまり、この例では待機系のＣＰＵモジュール１２０のほうが先に電源ＯＮしたことになる。
【００１５】
稼動系であるＣＰＵモジュール１１０では、タイマ命令１が実行される毎に、そのときのフリーランカウンタ１１２の値に基づいて上記（１）（２）の処理によりタイマ現在値１１３、前回フリーランカウンタ値１１４を更新している。図示の例では、例えばフリーランカウンタ１１２の値が‘２２’のタイミングで命令実行された際には、タイマ現在値１１３は‘１０’、前回フリーランカウンタ値１１４は‘１８’となっているので、上記（１）の処理により、１０＋（２２−１８）＝１４が新たなタイマ現在値１１３として求められて更新され、また上記（２）の処理により現在のフリーランカウンタ値‘２２’によって前回フリーランカウンタ値１１４が更新されるので、図示の通り、タイマ現在値＝‘１４’、前回フリーランカウンタ値＝‘２２’となる。
【００１６】
更にそのとき、当該更新されたタイマ現在値１１３、前回フリーランカウンタ値１１４は、図示のように、待機系のＣＰＵモジュール１２０へ転送されて等値化される。つまり、タイマ現在値１２３、前回フリーランカウンタ値１２４の値は、タイマ現在値１１３、前回フリーランカウンタ値１１４の値と同じになる。
【００１７】
そして、図示のｔ３のタイミングで、稼動系のＣＰＵモジュール１１０に何等かの切替え要因が発生した為、稼動／待機切替え処理が行われると、新たに稼動系となったＣＰＵモジュール１２０は、等値化されたタイマ現在値１２３、前回フリーランカウンタ値１２４と、自己のフリーランカウンタ１２２の値とにより、タイマ命令を実行する。しかしながら、上記の通り、フリーランカウンタ１１２と１２２とではカウント値が異なっている為、タイマ現在値１２３の誤差が非常に大きくなってしまう可能性がある。
【００１８】
例えば図９に示す例では、切替え要因が発生する直前のタイマ命令１実行時に（図示のｔ１の時点）、タイマ現在値１１３は‘１６’となっているが、切替え後にＣＰＵモジュール１２０のアプリケーション１２１が最初にタイマ命令１を実行した時（図示のｔ２の時点）に、上記（１）の処理によってタイマ現在値１２３を更新すると、ＣＰＵモジュール１２０のフリーランカウンタ１２２の値は‘６０’となっている為、更新後のタイマ現在値１２３は、１６＋（６０−２４）＝‘５２’となってしまう。
【００１９】
もし、切替え要因が発生せずに、ＣＰＵモジュール１１０側でｔ２の時点でタイマ命令１を実行したとすると、更新後のタイマ現在値１１３は‘２１’になるので、誤差は３１となる。この誤差は、ＣＰＵモジュール１１０とＣＰＵモジュール１２０のフリーランカウンタ値の差によって決まるので、誤差が更に拡大することが想定される。また、プログラマブルコントローラでは、通常、タイマ命令の誤差保証範囲が決められており、タイマ現在値に誤差が生じたとしてもこの誤差保証範囲内で使用するのであれば問題ないようになっているが、上記の誤差の場合、誤差が何処まで拡大するのか想定することは難しい為、タイマ命令の誤差保証範囲を特定することができないという問題がある。
【００２０】
本発明の課題は、待機冗長２重化コントローラにおいて、稼動／待機切替え後のタイマ命令のタイマ現在値の誤差の範囲を特定でき、以って誤差保証範囲を特定することを可能にし、また従来に比べて誤差を小さくすることができる２重化コントローラシステム、方法、プログラム等を提供することである。
【課題を解決するための手段】
【００２１】
本発明による第１の２重化コントローラシステムは、一方が稼動系、他方が待機系となる２つのＣＰＵモジュールを有する２重化コントローラシステムにおいて、前記各ＣＰＵモジュールは各々、フリーランカウンタを有し、稼動系となるＣＰＵモジュールは、各タイマ命令毎に保持されるタイマ現在値、前回フリーランカウンタ値を前記フリーランカウンタを用いて更新すると共に、更新後のタイマ現在値、前回フリーランカウンタ値を待機系ＣＰＵモジュールへ転送して等値化させる制御手段を備え、前記待機系ＣＰＵモジュールは、稼動／待機切替え要因発生によって新たな稼動系となる際の切替え処理において、前記タイマ現在値は等値化された値を継続し、前記等値化されている前回フリーランカウンタ値はクリアすると共に自己のフリーランカウンタを初期化・再起動する切替手段を有するように構成する。
【００２２】
上記構成の第１の２重化コントローラシステムでは、たとえ稼動系ＣＰＵモジュールのフリーランカウンタと、待機系ＣＰＵモジュールのフリーランカウンタとで、カウンタ値の差が大きくなっていたとしても、待機系ＣＰＵモジュールは、新たな稼動系となる際に、前回フリーランカウンタ値、フリーランカウンタを初期化するので、その後の最初のタイマ命令実行時には、初期化後の経過時間（フリーランカウンタ値）がタイマ現在値に加算されることになる。この場合、切替え要因が発生する前の最終等値化から切替え処理までの時間が加算されないことになり、これが誤差時間となるが、この誤差時間は、アプリケーション実行周期（タイマ命令実行周期）に依存するので、アプリケーション実行周期によって誤差範囲を特定することができる。すなわち、誤差は、最大で“タイマ命令実行周期＋切替処理に掛かる時間”となり、これ以上誤差は大きくならない。フリーランカウンタによる時間経過を初期状態として演算を再開することにより、タイマ現在値の実時間経過の誤差を最小限にすることができる。また、アプリケーション実行周期を短くすることにより誤差を更に縮小することもできる。
【００２３】
本発明による第２の２重化コントローラシステムは、一方が稼動系、他方が待機系となる２つのＣＰＵモジュールを有し、該ＣＰＵモジュールにおいてタイマ命令を実行する２重化コントローラシステムにおいて、前記各ＣＰＵモジュールは各々フリーランカウンタを有し、稼動系となるＣＰＵモジュールは、各タイマ命令毎に保持されるタイマ現在値、前回フリーランカウンタ値を前記フリーランカウンタを用いて更新すると共に、更新後のタイマ現在値、前回フリーランカウンタ値、フリーランカウンタ値を待機系ＣＰＵモジュールへ転送して等値化させる制御手段を備え、前記待機系ＣＰＵモジュールは、前記制御手段により転送される前記タイマ現在値、前回フリーランカウンタ値によって等値化処理を行うと共に前記フリーランカウンタ値を自己の停止状態のフリーランカウンタにセットする等値化手段と、稼動／待機切替え要因発生によって新たな稼動系となる際の切替え処理において、前記停止状態のフリーランカウンタを起動して前記セットされた値から継続してカウント開始させると共に前記等値化されたタイマ現在値、前回フリーランカウンタ値を継続して用いさせる切替手段とを有するように構成する。
【００２４】
上記構成の第１の２重化コントローラシステムでは、待機系側のフリーランカウンタは停止状態にしておき、等値化処理の際にフリーランカウンタ値（現在値）も等値化しているので、稼動系と待機系とで電源ＯＮの時間差が大きくても関係なく、稼動系側と待機系側のフリーランカウンタの値はほぼ同じとなっている。この状態で、稼動／待機切替が生じると、新たに稼動系となったＣＰＵモジュールのフリーランカウンタは、稼動／待機切替前に最後に等値化されたときにセットされた値から継続してカウント開始するので、上記第１の構成と同様、誤差は、最大で“タイマ命令実行周期＋切替処理に掛かる時間”となり、これ以上誤差は大きくならない。よって、上記第１の構成と同様、誤差の上限を特定でき、以って誤差保証範囲を特定できる。また、アプリケーション実行周期を短くすることにより誤差を更に縮小することもできる。
【発明の効果】
【００２５】
本発明の２重化コントローラシステム、方法、プログラム等によれば、稼動／待機切替え後のタイマ命令のタイマ現在値の誤差の範囲を特定でき、以って誤差保証範囲を特定することを可能にし、また従来に比べて誤差を小さくすることができる。
【発明を実施するための最良の形態】
【００２６】
以下、図面を参照して、本発明の実施の形態について説明する。
図１は、本実施の形態による２重化コントローラシステムにおけるプログラマブルコントローラ本体（ＣＰＵモジュール）の構成ブロック図である。
【００２７】
図１に示す２重化コントローラシステムは、ＣＰＵモジュール１０、ＣＰＵモジュール２０とを有し、ＣＰＵモジュール１０、ＣＰＵモジュール２０、及び不図示の各種Ｉ／Ｏ群は、システムバス４０を介して接続されている。更に、ここでは、ＣＰＵモジュール１０とＣＰＵモジュール２０との間に、等値化の為のデータ転送用のバス（等値化バス３０）が設けられている構成を例にするが、この例に限るわけではなく、等値化の為のデータ転送はシステムバス４０を介して行ってもよい（この場合には、図示の等値化バス制御部１３、２３、受信バッファ用ＲＡＭ１４，２４は存在しない）。
【００２８】
尚、ここでは、ＣＰＵモジュール１０が稼動系、ＣＰＵモジュール２０がその待機系となっているものとして説明する。また、ＣＰＵモジュール１０、２０は、プログラマブルコントローラ本体であるが、ここでは本例の説明に係わる構成のみを示し、他の構成は省略して示す。
【００２９】
図１において、稼動系のＣＰＵモジュール１０は、プログラムＲＡＭ１１、データＲＡＭ１２、等値化バス制御部１３、受信バッファ用ＲＡＭ１４、及び制御部１５等を有する。これら以外の構成については、上記の通り、ここでの説明には特に関係ないので省略している。
【００３０】
プログラムＲＡＭ１１には、ユーザプログラム１１ａが格納される。ユーザプログラム１１ａとは、例えば各Ｉ／Ｏ機器の制御、等値化処理を制御部１５により実行させる為の各種アプリケーションプログラム、各タイマ命令１〜Ｎ等である。
【００３１】
データＲＡＭ１２は、ユーザデータ領域１２ａを有する。ユーザデータ領域１２ａには、例えば等値化すべきデータ（例えば各タイマ命令毎のタイマ現在値、前回フリーランカウンタ値等）が格納されている。
【００３２】
等値化バス制御部１３は、等値化バス３０を介して等値化を行う為の等値化処理専用の構成であり、制御部１５から等値化すべきデータを渡されると、待機側の等値化バス制御部２３と連動して、この等値化データを待機側の受信バッファ用ＲＡＭ２４に転送・格納させる機能を有する。尚、上記の通り、等値化バス制御部１３、受信バッファ用ＲＡＭ２４は必ずしも必要な構成ではない。
【００３３】
制御部１５は、ＣＰＵモジュール１０全体を制御する中央処理装置（ＣＰＵチップ等）であり、上記プログラムＲＡＭ１１に格納されているユーザプログラム１１ａを用いて、不図示のＩ／Ｏ群に接続された制御対象機器の制御や、後述する図５（ａ）に示す等値化処理等を実行する。また、制御部１５は、フリーランカウンタ１５ａを備える。
【００３４】
また、待機系のＣＰＵモジュール２０は、プログラムＲＡＭ２１、データＲＡＭ２２、等値化バス制御部２３、受信バッファ用ＲＡＭ２４、及び制御部２５等を有する。これらの構成自体は、稼動系のＣＰＵモジュール１０と同じであるので、特に説明しないが、制御部２５は、特に等値化処理、稼動／待機切替処理の際に、プログラムＲＡＭ２１に格納されているアプリケーションプログラムを用いて、後述する図２の処理や、図５（ａ）、（ｂ）における待機側の処理を実行する。また、制御部２５は、制御部１５とは異なり、不図示のＩ／Ｏ群に接続された制御対象機器の制御は行っていない。但し、これは、ＣＰＵモジュール２０が待機系のときの話であり、稼動系のときには制御部２５は制御対象機器の制御を行うし、勿論、各タイマ命令実行毎にタイマ現在値、前回フリーランカウンタ値の更新も行う。また、制御部２５は、フリーランカウンタ２５ａを備える。
【００３５】
上記構成の２重化コントローラシステムにおける等値化処理、稼動／待機切替処理について、以下、２つの実施例を挙げて説明する。
以下、まず、図２、図３を参照して、第１の実施例について説明する。
【００３６】
第１の実施例では、通常動作時すなわち切替え要因発生前の稼動ＣＰＵモジュール、待機ＣＰＵモジュールの動作（特に等値化処理）は、従来と同じである。すなわち、図３に示すように、切替え要因発生前には、タイマ命令実行毎に、タイマ現在値、前回フリーランカウンタ値の等値化は行うが、フリーランカウンタ値（現在値）の等値化は行わない。
【００３７】
第１の実施例では、稼動／待機切替え時のＣＰＵモジュール２０（新たに稼動系となる）の切替処理内容が、従来とは異なる。
図２は、ＣＰＵモジュール２０の稼動／待機切替え処理及びその後の処理のフローチャート図である。
【００３８】
稼動系のＣＰＵモジュール１０に何らかの切替え要因が発生した為に、新たに稼動系となるＣＰＵモジュール２０は、図２において、等値化されていた前回フリーランカウンタ値をクリア（＝０）すると共に、自己のフリーランカウンタ２５ａを初期化・再起動する（ステップＳ１１）。また、等値化されていたタイマ現在値は、そのまま継続して使用する。これにより、フリーランカウンタ２５ａは０から再びカウントを開始し、その後、最初にタイマ命令実行された際には（ステップＳ１２）、０クリアされた前回フリーランカウンタ値、フリーランカウンタ値（現在値）、及び等値化された値が継続して用いられるタイマ現在値とによって、上記（１）の処理を実行すると、
（１）タイマ現在値  ＋  （フリーランカウンタ値  −  ０）
＝＞  タイマ現在値
によって、タイマ現在値を更新することになる（ステップＳ１３）。勿論、前回フリーランカウンタ値も上記（２）の処理により更新する。
【００３９】
このようにすることで、新たに稼動となったＣＰＵモジュール２０における１スキャン目のタイマ命令実行の際の上記更新処理では、タイマ現在値には、切替え処理からの経過時間が加算されることになるが、切替え要因が発生する直前の等値化処理実行時点から切替え処理実行時点までの時間が加算されないことになり、これが誤差時間となる。この誤差時間は、アプリケーション実行周期（タイマ命令実行周期）に依存するので、アプリケーション実行周期によって誤差範囲を特定することができる。すなわち、誤差は、最大で“タイマ命令実行周期＋切替処理に掛かる時間”となり、これ以上誤差は大きくならない。尚、切替処理に掛かる時間とは、切替え要因発生時点から上記前回フリーランカウンタ値のクリア（＝０）及びフリーランカウンタ２５ａの初期化・再起動が完了する時点までを意味する。また、アプリケーション実行周期を短くすることにより誤差を更に縮小することもできる。
【００４０】
上述した処理について、図３に示す例を用いて説明する。
図３に示す例では、図示のｔ４の時点で切替え要因が発生し、切替え処理によって、図示のｔ３の時点で前回フリーランカウンタ値は‘０’クリアされ且つフリーランカウンタは初期化・再起動されて、フリーランカウンタ２５ａはこの時点から‘０’から順にカウントアップされる。
【００４１】
その後、図示のｔ２の時点で、新たに稼動となったＣＰＵモジュール２０における１スキャン目のタイマ命令が実行された場合、図示の例ではこの時点でのフリーランカウンタのカウント値は‘１’となっており、前回フリーランカウンタ値は‘０’であり、タイマ現在値は‘１６’のままであるので、上記（１）の処理により、新たなタイマ現在値は、１６＋（１−０）＝１７となる。つまり、切替え処理時点ｔ３からの経過時間がタイマ現在値に加算されることになる。もし、切替え要因が発生せずに、ＣＰＵモジュール１０がｔ２の時点でタイマ命令を実行したとすると、タイマ現在値は２１になるので、誤差は４となる。ここで、図示のｔ１からｔ３までの経過時間はタイマ現在値には加算されないことになり、この経過時間が誤差時間となるが、この経過時間はアプリケーション実行周期に依存するので、誤差範囲を特定することができる。また、従来方式に比べて誤差が少なくなる。更に、等値化実行周期を短くすることにより誤差を縮小することもできる。
【００４２】
上述してある通り、通常、プログラマブルコントローラでは、タイマ命令の誤差保証範囲が特定されていれば、実際の現場ではこの誤差保証範囲で使用する限り、問題はない。例えばバルブの開閉システムにおいて、バルブの開時間の誤差が±２秒までは許容できる場合、例えばタイマ命令の誤差保証範囲が±１秒であるプログラマブルコントローラであれば、問題なく使用できることになる。一方、タイマ命令の誤差保証範囲が、許容できる範囲を越えている場合には、ユーザは、最初からそのプログラマブルコントローラは使用しないという判断が行えることになる。
【００４３】
次に、以下、第２の実施例について図４〜図６を参照して説明する。
第２の実施例では、図４に示すように、タイマ現在値、前回フリーランカウンタ値だけでなく、フリーランカウンタ値（現在値）の等値化も行っている。
【００４４】
そして、稼動系のＣＰＵモジュール１０、待機系のＣＰＵモジュール２０は、等値化処理においては図５（ａ）に示す処理、稼動／待機切替処理においては図５（ｂ）に示す処理を実行する。
【００４５】
図５（ａ）において、まず、ＣＰＵモジュール２０は、自己が待機系となっている間は、自己のフリーランカウンタ２５ａは停止状態にしている。そして、稼動系となっているＣＰＵモジュール１０は、各タイマ命令を実行すると共に、等値化処理において、タイマ現在値、前回フリーランカウンタ値に加えてフリーランカウンタ値（現在値）を、待機系のＣＰＵモジュール２０へ転送する（ステップＳ２１）。ＣＰＵモジュール２０は、転送されてきたタイマ現在値、前回フリーランカウンタ値によって、自己が保持するタイマ現在値、前回フリーランカウンタ値を更新する（ステップＳ３１）。更に、転送されてきたフリーランカウンタ値（現在値）を、停止状態にしている自己のフリーランカウンタ２５ａにセットする（ステップＳ３２）。
【００４６】
その後、任意のときに、稼動系のＣＰＵモジュール１０に異常発生等の切替え要因が生じると、ＣＰＵモジュール２０は、稼動／待機切替え処理において、自己のフリーランカウンタを（初期化せずに）起動する（ステップＳ４１）。また、タイマ現在値、前回フリーランカウンタ値は、等値化された値をそのまま継続して用いる。これによって、新たに稼動系となるＣＰＵモジュール２０では、フリーランカウンタ２５ａは、切替え要因発生直前の等値化処理によってセットされた値からカウント開始することになる。また、タイマ現在値、前回フリーランカウンタ値は、等値化された値をそのまま継続して用いる。
【００４７】
以上の状態から、その後、随時、タイマ命令を実行することになる（ステップＳ４２）。
これによって、新たに稼動系となったＣＰＵモジュール２０の１スキャン目のタイマ命令実行結果は、タイマ現在値には、切替処理からの経過時間が加算されることになるが、切替え要因が発生する直前の等値化処理時点から切替処理完了時点まで時間が加算されないことになり、これが誤差時間となる。よって、第１の実施例と同様、誤差範囲を特定することができる。また、従来方式に比べて誤差が少なくなる。更に、等値化実行周期を短くすることにより誤差を縮小することもできる。
【００４８】
上述した処理について、図６に示す例を用いて説明する。
図６に示す例では、図示のｔ４の時点で切替え要因が発生し、ＣＰＵモジュール２０は、切替え処理において、停止していたフリーランカウンタ２５ａを起動することで、フリーランカウンタ２５ａは、切替え要因発生直前にセットされた値‘２４’からカウント開始する。すなわち、図示のｔ３の時点から、‘２５’、‘２６’・・・とカウントアップする。
【００４９】
その後、図示のｔ２の時点で、新たに稼動系となったＣＰＵモジュール２０における１スキャン目のタイマ命令が実行された場合、図示の例ではこの時点でのフリーランカウンタ２５ａのカウント値は‘２６’となっており、前回フリーランカウンタ値は‘２４’、タイマ現在値は‘１６’のままであるので、上記（１）の処理により、新たなタイマ現在値は、１６＋（２６−２４）＝１８となる。
【００５０】
つまり、切替え処理時点ｔ３からの経過時間がタイマ現在値に加算されることになるが、図示のｔ１からｔ３までの経過時間はタイマ現在値には加算されないことになり、この経過時間が誤差時間となるが、この経過時間はアプリケーション実行周期に依存するので、誤差範囲を特定することができる。また、従来方式に比べて誤差が少なくなる。尚、図示の例では、もし、切替え要因が発生せずに、ＣＰＵモジュール１０がｔ２の時点でタイマ命令を実行したとすると、タイマ現在値は２１になるので、誤差は３となる。
【図面の簡単な説明】
【００５１】
【図１】２重化コントローラシステムにおけるプログラマブルコントローラ本体（ＣＰＵモジュール）の構成ブロック図である。
【図２】第１の実施例による稼動／待機切替処理、及びその後の処理のフローチャート図である。
【図３】第１の実施例における稼動／待機切替え前後におけるタイマ命令の実行状態を示す図である。
【図４】第２の実施例における等値化処理を示す図である。
【図５】（ａ）は第２の実施例における等値化処理、（ｂ）は稼動／待機切替処理を説明する為のフローチャート図である。
【図６】第２の実施例における稼動／待機切替え前後におけるタイマ命令の実行状態を示す図である。
【図７】従来のフリーランカウンタを用いるタイマ命令実行を説明する為の図である。
【図８】二重化コントローラシステムにおけるタイマ命令のデータ等値化について説明する為の図である。
【図９】稼動／待機切替え前後における従来のタイマ命令の実行状態を示す図である。
【符号の説明】
【００５２】
１０  ＣＰＵモジュール（稼動系）
１１  プログラムＲＡＭ
１１ａ  ユーザプログラム
１２  データＲＡＭ
１２ａ  ユーザデータ領域
１３  等値化バス制御部
１４  受信バッファ用ＲＡＭ
１５  制御部
２０  ＣＰＵモジュール（待機系）
２１  プログラムＲＡＭ
２１ａ  ユーザプログラム
２２  データＲＡＭ
２２ａ  ユーザデータ領域
２３  等値化バス制御部
２４  受信バッファ用ＲＡＭ
２５  制御部
【図１】
2005107776.tif 000003
【図２】
2005107776.tif 000004
【図３】
2005107776.tif 000005
【図４】
2005107776.tif 000006
【図５】
2005107776.tif 000007
【図６】
2005107776.tif 000008
【図７】
2005107776.tif 000009
【図８】
2005107776.tif 000010
【図９】
2005107776.tif 000011