(57)【要約】【課題】  稼動系と待機系とで相互に定周期プログラムが異なっていても問題なく稼動／待機切り替え後の制御が行えるようにする。【解決手段】  制御部１５、２５は、通常時はマルチ等値化処理を実行しており、定周期プログラムの一致／不一致を確認する必要がある状況では、図２〜図４の何れかの処理を実行してプログラム不一致の場合には一時的にシングル等値化処理モードへと移行する。【選択図】      図１
2005092695.tif 000002
【特許請求の範囲】
【請求項１】
稼動系と待機系のコントローラを有し、複数の定周期プログラムを実行する２重化コントローラシステムにおいて、
前記稼動系のコントローラ、待機系のコントローラは、それぞれ、
前記稼動系コントローラにおいて各定周期プログラムが実行される毎に、システム情報も等値化するマルチ等値化処理を実行する等値化処理手段と、
互いに他方のコントローラの定周期プログラムを読み出し、自コントローラの定周期プログラムと一致するか否かを照合する照合手段と、
該照合手段によって不一致と判定された場合には、システム情報を必要としないシングル等値化モードによる等値化処理に切り替える等値化モード切替手段と、
を有することを特徴とする二重化コントローラシステム。
【請求項２】
前記照合手段による照合処理は、システムイニシャル時に実行することを特徴とする請求項１記載の二重化コントローラシステム。
【請求項３】
前記照合手段による照合処理は、前記稼動系コントローラが運用中に待機系コントローラが起動した時、該待機系コントローラにおいては該起動に伴って実行され、前記稼動系コントローラにおいては起動した待機系コントローラから出されるチェック要求に応じて実行されることを特徴とする請求項１記載の二重化コントローラシステム。
【請求項４】
前記照合手段による照合処理は、前記稼動／待機系の両方のコントローラが運用中に、一方のコントローラの定周期プログラムが変更されたとき、該一方のコントローラにおいては該プログラム変更に伴って実行され、他方のコントローラにおいては前記一方のコントローラから出されるチェック要求に応じて実行されることを特徴とする請求項１記載の二重化コントローラシステム。
【請求項５】
前記照合手段による照合処理実行中は、定周期プログラムの一致／不一致に関係なく、前記シングル等値化モードによる等値化処理を実行することを特徴とする請求項１〜４の何れかに記載の二重化コントローラシステム。
【請求項６】
稼動系と待機系のコントローラを有し、複数の定周期プログラムを実行する２重化コントローラシステムにおける等値化モード決定方法であって、
少なくとも前記稼動／待機系の何れか一方のイニシャル時に又は何れか一方の前記定周期プログラム変更の際に、
互いに他方のコントローラの定周期プログラムを読み出し、自コントローラの定周期プログラムと一致するか否かを判定し、
該判定において不一致と判定された場合には、各定周期プログラム実行毎にシステム情報も等値化するマルチ等値化モードから、システム情報を必要としないシングル等値化モードへと切り替えることを特徴とする等値化モード決定方法。
【請求項７】
稼動系と待機系のコントローラを有し、複数の定周期プログラムを実行する２重化コントローラシステムのコンピュータにおいて、
少なくとも前記稼動／待機系の何れか一方のイニシャル時に又は何れか一方の前記定周期プログラム変更の際に、
互いに他方のコントローラの定周期プログラムを読み出し、自コントローラの定周期プログラムと一致するか否かを判定する機能と、
該判定において不一致と判定された場合には、各定周期プログラム実行毎にシステム情報も等値化するマルチ等値化モードから、システム情報を必要としないシングル等値化モードへと切り替える機能と、
を実現させるためのプログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、待機冗長の二重化構成にした二重化コントローラ（プログラマブルコントローラ）における等値化処理等に関する。
【背景技術】
【０００２】
現在、プラント、工場などでは、工作機械や計測装置等の機器のシーケンス制御に多くのプログラマブルコントローラ等のコントローラを用い、ＦＡ（ファクトリーオートメーション）化を実現している。
【０００３】
このようなプログラマブルコントローラ・システムでは、信頼性を向上させるためにＣＰＵモジュール（コントローラ本体）を待機冗長の２重化構成にする場合がある。待機冗長の冗長２重化構成は、２つのＣＰＵモジュールを１組とし、一方を稼動系、他方を待機系とし、稼動系ＣＰＵモジュールを待機系ＣＰＵモジュールが監視して、稼動系ＣＰＵモジュールに障害等の切替え要因が生じたならば待機系ＣＰＵモジュールが稼動系に切り替る構成である。
【０００４】
図７に２重化して冗長性を持たせたコントローラの一般的なシステム構成を示す。
図示の２重化コントローラシステムは、ＣＰＵモジュール１０１−１、ＣＰＵモジュール１０１−２、及び各制御対象機器とのデータ入出力を行う複数のＩ／Ｏユニット１０２−１〜１０２−ｎより成るＩ／Ｏ群１０２から構成されている。尚、ここでは、ＣＰＵモジュール１０１−１が稼動系、ＣＰＵモジュール１０１−２がその待機系となっている場合を例にして説明する。
【０００５】
稼動系となっているＣＰＵモジュール１０１は、その内部に格納されたプログラム（通常、定周期に実行されるプログラム；定周期プログラム）を実行することで、各Ｉ／Ｏユニット１０２−１〜１０２−ｎに対して制御データを出力して（又は各Ｉ／Ｏユニットからセンサ計測値等を読み出して）、各制御対象機器を制御する。
【０００６】
一方、待機系となっているＣＰＵモジュール１０１−２は、稼動系のＣＰＵモジュール１０１−１を監視しており、稼動系ＣＰＵモジュール１０１−１に故障等の何らかの切替え要因が生じると、稼動／待機切り替え処理を実行して、ＣＰＵモジュール１０１−２が稼動系となって、ＣＰＵモジュール１０１-１が行っていた処理を引き継ぐ。
【０００７】
ＣＰＵモジュール１０１−１及びＣＰＵモジュール１０１−２には、一定周期で起動されて実行される複数の定周期プログラム（ここでは、仮にＡ、Ｂ、Ｃの３つの定周期プログラム）が格納されており、稼動系となっているＣＰＵモジュール１０１−１のみがこれらの定周期プログラムを実行してＩ／Ｏ機器の制御処理を行い、待機系となっているＣＰＵモジュール１０１−２ではこれらの定周期プログラムは実行されない。これらの定周期プログラムには、優先レベルがあり（優先レベル：Ａ＞Ｂ＞Ｃ）、優先レベルが高い定周期プログラムの起動周期になると、優先レベルの低い実行中の定周期プログラムは割り込みがかかって中断され、優先レベルの高い定周期プログラムが優先的に実行される。
【０００８】
ＣＰＵモジュール１０１−１、ＣＰＵモジュール１０１−２及びＩ／Ｏ群１０２は、システムバス１０３によって接続されており、稼動系ＣＰＵモジュール１０１−１はシステムバス１０３を介して各Ｉ／Ｏユニット１０２−１〜１０２−ｎに対して出力データ（制御データ）を送信し、またＩ／Ｏユニット１０２−１〜１０２−ｎからは接続されている制御対象機器からの計測値等の入力データを受信している。
【０００９】
また２重化されているＣＰＵモジュール１０１−１とＣＰＵモジュール１０１−２との間には等値化バス１０４を備え、稼動系／待機系の切替えが生じたときに制御データの整合性を持たせる為、この等値化バス１０４を介して稼動系ＣＰＵモジュール１０１−１から待機系ＣＰＵモジュール１０１−２に制御データを送信して等値化処理を行っている。
【００１０】
図８に示すように、従来の２重化コントローラでは、稼動系ＣＰＵモジュール１０１−１にて定周期プログラムＡ、Ｂ、Ｃが実行された場合、他の定周期プログラムによる処理が完了して固定で優先レベルが最も低い定周期プログラムＣに処理が戻り、その定周期プログラムＣによる演算処理が終了後に、定周期プログラムＡ、Ｂ、Ｃで使用される全ての制御データに対する等値化を行う。よって定周期プログラムＡ、Ｂ、Ｃ内で行われる各処理の実行順序は、入力処理→プログラム演算→出力処理となり、また最も優先レベルが低い定周期プログラムＣは等値化処理が入るのでその処理実行順序は、入力処理→プログラム演算→制御データ等値化→出力処理となる。尚、図上に示す“入”が入力処理、“演”がプログラム演算、“等”が制御データ等値化、“出”が出力処理を意味する。
【００１１】
図９は、定周期プログラム実行中に稼動系／待機系ＣＰＵの切替えが発生した時のプログラムの実行状態を示す図である。尚、図９では、定周期プログラムはＡ〜Ｅの５つとなっているが、定周期プログラムが幾つであるかは関係ない（２つ以上であれば、本問題は発生する）。
【００１２】
稼動系ＣＰＵモジュール１０１−１の各定周期プログラムの演算中に、稼動系／待機系切替え要因が発生した場合、稼動／待機の切替えを行って新たに稼動系となったＣＰＵモジュール１０１−２は、制御データの整合性を保証するため、最後に制御データが等値化された図９のｔ１の時点の状態から処理を引き継いだ形で定周期プログラムを実行する。
【００１３】
例えば、図９のｔ２の時点でＣＰＵの切替え要因が発生した場合、新たに稼動系となるＣＰＵモジュール１０１−２はｔ１の時点の状態からプログラムを実行する。しかしこの場合、定周期プログラムＡ、Ｂ、Ｃは、ｔ２の時点で既にＩ／Ｏユニットに出力データの送信を行っている為、制御データとＩ／Ｏユニットからの出力の状態が不整合となる場合がある。また、最後に制御データが等値化された状態まで戻して処理を引き継ぐので戻り時間が大きくなってしまうことがある。
【００１４】
また従来のコントローラでは、稼動系／待機系ＣＰＵの切替えが生じると切替え後の処理において、定周期プログラムの実行周期時間や各定周期プログラムの実行順番を維持できないという問題が生じる。
【００１５】
また従来のコントローラでは、稼動系／待機系ＣＰＵモジュールの切替えが生じると切替え後の処理において、定周期プログラムの実行周期時間や各定周期プログラムの実行順番を維持できないという問題が生じる。
【００１６】
以上説明した従来技術に関しては、例えば特許文献１、非特許文献１等に記載されている。
【特許文献１】特開２００２−１４９２１２号公報
【非特許文献１】「統合化制御システムＭＩＣＲＥＸ−ＩＸのコントロールステーションの制御機能」；富士時報  Ｖｏｌ．６７  ＮＯ．６，１９９４、３４５−３４８頁
【発明の開示】
【発明が解決しようとする課題】
【００１７】
上述した問題に対して、本出願の出願人は、既に、特願２００２−１０４３８０号の発明（以下、先出願と呼ぶ）を提案している。
尚、ここでは特に図示しないが、先出願の二重化コントローラシステムは、不図示のＣＰＵモジュールａ、ＣＰＵモジュールｂを有し、図７の構成と同様、ＣＰＵモジュールａ−ＣＰＵモジュールｂ間に等値化バスを設け、この等値化バスを介して等値化を行う構成であるものとする。また、ここでは、ＣＰＵモジュールａが稼動系、ＣＰＵモジュールｂが待機系であるものとして説明する。
【００１８】
図１０に示すように、先出願の二重化コントローラでは、稼動系ＣＰＵモジュールａにて定周期プログラムＡ、Ｂ、Ｃ（優先レベル：Ａ＞Ｂ＞Ｃ）が実行される場合、各定周期プログラムの処理実行順番は、入力処理→プログラム演算→制御データ等値化→出力処理である。すなわち、各定周期プログラムＡ、Ｂ、Ｃを実行する毎に、制御データの等値化処理を行う（以下、このような等値化を“マルチ等値化”と呼ぶ。一方、上記従来の等値化を“シングル等値化”と呼ぶ）。このようなマルチ等値化を行うことによって、稼動／待機切り替えが生じたときに、等値化データとＩ／Ｏユニットへの出力データとの整合性が確保できると共に、稼動／待機切り替え時のオーバーヘッドを縮小できるという効果が得られる。
【００１９】
また、従来のシングル等値化処理ではユーザが使用しているユーザデータを等値化しているのに対して、先出願のマルチ等値化処理では更にプログラム割り込み情報やプログラム実行スケジュール情報等のシステム情報も等値化している。
【００２０】
図１１はプログラム割り込み情報、図１２はプログラム実行スケジュール情報の一例を示す図である。
図１１では、定周期プログラムＡ、Ｂ，及びＣと搭載している全ての定周期プログラムに対して、プログラム割込み情報としてプログラムカウンタや各種フラグやレジスタの値等を等値化している。尚、図１１では、搭載されている全ての定周期プログラムに対しての情報をプログラム割込み情報として等値化しているが、等値化処理を行う時点で割込み退避されているプログラム等、必要なプログラムに対する情報のみを等値化する構成としても良い。また、尚、プログラムカウンタは、各定周期プログラム毎に、最後に実行したプログラム（行）を示すものである。
【００２１】
稼動／待機の切替えが行われ、新たに稼働系となったＣＰＵモジュールｂは、等値化してあるプログラム割込み情報を使用して、割込み中断されていたプログラム実行を、中断時の状態から継続して行うことができる。
【００２２】
また、図１２に示すプログラム実行スケジュール情報は、各定周期プログラム毎に、その定周期プログラムの実行周期である定周期設定時間や、その定周期プログラムを前回実行した後の経過時間を示す実行周期経過時間等である。
【００２３】
上記先出願の二重化コントローラシステムにおいては、稼動／待機の切り替えが起きると、図１３に示すように、新たに稼動系になったＣＰＵモジュールｂは、等値化されていたシステム情報を元に、中断された定周期プログラムＢ、Ｃを、それぞれ、中断時点の状態から継続させて制御を続けることができる。図示の例では、定周期プログラムＢを実行中に何らかの異常が発生した為に、稼動／待機の切り替えが行われたが、上記先出願ではシステム情報も等値化されているので、新たに稼動系になったＣＰＵモジュールｂは、定周期プログラムＢの中断時点から継続してプログラム実行することができる。
【００２４】
しかしながら、このような制御は、ＣＰＵモジュールａが保持する定周期プログラムと、ＣＰＵモジュールｂが保持する定周期プログラムとが一致していることが前提条件になっている。
【００２５】
もし、稼動系のＣＰＵモジュールａが保持する定周期プログラムと待機系のＣＰＵモジュールｂが保持する定周期プログラムとが同一ではない場合、例えば図１４に示すように稼動系のＣＰＵモジュールａは定周期プログラムＢ、待機系のＣＰＵモジュールｂは定周期プログラムＢ’（Ｂ’はＢの一部を変更したもの、すなわち改造版、バージョンアップ版等とする）を保持している状態で、稼動／待機切り替えが起きると、例えばプログラムカウンタが一致しないまま、定周期プログラムＢ’を実行をしてしまい、継続して制御ができなくなるという問題点があった。
【００２６】
上記稼動系と待機系とで定周期プログラムが同一ではない場合とは、例えば以下に説明する状況で起こりえる。
すなわち、プログラマブルコントローラの運用現場では、現地で定周期プログラムの一部改造を行う場合があり、その際、システムを止めずに、改造後の定周期プログラムが正常に動作できるか否かを確認したい場合がある。この場合、稼動系のＣＰＵモジュールａが定周期プログラム実行中に、待機系のＣＰＵモジュールｂに対してのみ改造後の定周期プログラムをダウンロードする。その後、稼動／待機切り替えを行い、新たに稼動系となったＣＰＵモジュールｂにおいて改造後の定周期プログラムを実行して、正常動作するか否かを確認する。もし、異常動作した場合には、再度、稼動／待機切り替えを行い、再度稼動系となったＣＰＵモジュールａによって改造前の定周期プログラムが実行される状態に戻すと共に、待機系になったＣＰＵモジュールｂの定周期プログラムを改造前の状態に戻す。一方、もし正常動作することを確認できた場合には、稼動／待機の再切り替えは行わずに、ＣＰＵモジュールａ（待機系になっている）に対して改造後の定周期プログラムをダウンロードする。
【００２７】
以上述べた状況では、稼動系のＣＰＵモジュールと待機系のＣＰＵモジュールとで相互に定周期プログラムとが不一致となる時間帯が存在することになる。
あるいは、どちらか一方のＣＰＵモジュールが故障する等してＣＰＵモジュールを交換した場合（もし、稼動系のＣＰＵモジュールが故障した場合、待機系のＣＰＵモジュールが新たな稼動系となるが、通常、その後、人手により、故障したＣＰＵモジュールを別のものに交換する）、交換したＣＰＵモジュールには、本来、ペアＣＰＵと同じ定周期プログラムが格納されているはずであるが、例えば人的ミス等により、異なる定周期プログラムが格納されている可能性がある。尚、ここで言う“異なる定周期プログラム”とは、全く異なることを意味するのではない。上記の通り、各定周期プログラムは、通常、随時改造（バージョンアップ）を行うものであり、ここではバージョンが異なる事を意味するものとする。
【００２８】
また、あるいは、新たなシステムを構築する場合、新たに設置した稼動／待機の２つのＣＰＵモジュールには、同じ定周期プログラムが格納されているはずであるが、例えば人的ミス等により、相互に異なる定周期プログラムが格納されている場合も有り得る。例えば、一方には新バージョンを格納したのに、他方には間違えて旧バージョンの定周期プログラムを格納してある場合も有り得る。
【００２９】
上述した状況は一例であるが、とにかく、何らかの理由で、本来同一であるべき稼動系ＣＰＵモジュールの定周期プログラムと待機系ＣＰＵモジュールの定周期プログラムとが同一ではなくなっている場合があり、このような状態で稼動／待機切り替えが生じると、上述した問題が発生することになる。
本発明の課題は、定周期プログラムの制御データ等値化処理の際に、各定周期プログラム実行毎に制御データ等値化処理を行うマルチ等値化を行う２重化コントローラシステムであって、稼動系と待機系とで相互に定周期プログラムが異なっていても問題なく稼動／待機切り替え後の制御が行える２重化コントローラシステム、その方法等を提供することである。
【課題を解決するための手段】
【００３０】
本発明による二重化コントローラシステムは、稼動系と待機系のコントローラを有し、複数の定周期プログラムを実行する２重化コントローラシステムにおいて、前記稼動系のコントローラ、待機系のコントローラは、それぞれ、前記稼動系コントローラにおいて各定周期プログラムが実行される毎に、システム情報も等値化するマルチ等値化処理を実行する等値化処理手段と、互いに他方のコントローラの定周期プログラムを読み出し、自コントローラの定周期プログラムと一致するか否かを照合する照合手段と、該照合手段によって不一致と判定された場合には、システム情報を必要としないシングル等値化モードによる等値化処理に切り替える等値化モード切替手段とを有するように構成する。
【００３１】
上述した構成の二重化コントローラシステムでは、通常時、先出願と同様、各定周期プログラム実行毎に等値化処理を行うマルチ等値化処理を実行しているので、等値化データとＩ／Ｏユニットへの出力データとの整合性が確保できると共に稼動／待機切り替え時のオーバーヘッドを縮小できる。更にこのマルチ等値化処理ではシステム情報も等値化されているので、稼動／待機切り替え要因が発生した場合、新たに稼動系になったコントローラは、定周期プログラムの中断時点から継続してプログラム実行することができる。
【００３２】
しかしながら、各コントローラが保持する定周期プログラムが相互に異なる場合（例えば、一方のみバージョンアップ版となった場合等）、等値化されたシステム情報を用いてプログラムの継続実行しようとすると、問題が生じる。
【００３３】
よって、上記照合手段によってプログラム不一致と判定された場合には、一時的に、シングル等値化モード（従来の等値化手法）へと切り替える。シングル等値化モードでは、定周期プログラムの中断時点から継続してプログラム実行することはできないので、上記の問題が生じることはない。尚、後にオペレータ等によって２つのコントローラの定周期プログラムを一致させる為の作業が行われた後には、再び、マルチ等値化モードへ戻すことになる。
【００３４】
前記照合手段による照合処理は、例えば、システムイニシャル時に実行する。
または、前記照合手段による照合処理は、例えば、前記稼動系コントローラが運用中に待機系コントローラが起動した時、該待機系コントローラにおいては該起動に伴って実行され、前記稼動系コントローラにおいては起動した待機系コントローラから出されるチェック要求に応じて実行される。
【００３５】
あるいは、前記照合手段による照合処理は、前記稼動／待機系の両方のコントローラが運用中に、一方のコントローラの定周期プログラムが変更されたとき、該一方のコントローラにおいては該プログラム変更に伴って実行され、他方のコントローラにおいては前記一方のコントローラから出されるチェック要求に応じて実行される。
【００３６】
上記チェック要求を出すのは、シングル等値化とマルチ等値化とでは、等値化するデータが異なる為（上記の通り、マルチ等値化ではシステム情報も等値化している）、どちらか一方のコントローラのみ、等値化モードを変更するのは問題が生じる為である。
【００３７】
また、例えば、前記照合手段による照合処理実行中は、フェイルセーフの考え方により、定周期プログラムの一致／不一致に関係なく、前記シングル等値化モードによる等値化処理を実行する。
【発明の効果】
【００３８】
本発明の２重化コントローラシステム、そのプログラム単位等値化方法によれば、定周期プログラムの等値化処理において、各定周期プログラム実行毎にシステム情報を含むデータ等値化処理を行うことで、上記先出願の効果、すなわち等値化データとＩ／Ｏユニットへの出力データとの整合性が確保でき、稼動／待機切り替え時のオーバーヘッドを縮小でき、更に中断途中からプログラムを継続実行できるという効果が得られると共に、更に、稼動系と待機系とで定周期プログラムが異なる可能性がある場合に、稼動系、待機系それぞれにおいて相互に定周期プログラムが同一であるか否かはチェックして、同一ではない場合にはシングル等値化モードに移行することで、定周期プログラムが異なっていても問題なく稼動／待機切り替え後の制御が行える。
【発明を実施するための最良の形態】
【００３９】
以下、図面を参照して、本発明の実施の形態について説明する。
図１は、本実施の形態による２重化コントローラシステムにおけるプログラマブルコントローラ本体（ＣＰＵモジュール）の構成ブロック図である。
【００４０】
図１に示す２重化コントローラシステムは、ＣＰＵモジュール１、ＣＰＵモジュール２とを有し、ＣＰＵモジュール１、ＣＰＵモジュール２、及び不図示の各種Ｉ／Ｏ群は、システムバス４を介して接続されている。更に、ＣＰＵモジュール１とＣＰＵモジュール２との間には等値化バス３が設けられている。尚、ここでは、ＣＰＵモジュール１が稼動系、ＣＰＵモジュール２がその待機系となっているものとして説明する。
【００４１】
ＣＰＵモジュール１、２は、プログラマブルコントローラ本体であるが、ここでは本例の説明に係わる構成のみを示し、他の構成は省略して示す。
図１において、稼動系のＣＰＵモジュール１は、プログラムＲＡＭ１１、データＲＡＭ１２、等値化バス制御部１３、受信バッファ用ＲＡＭ１４、及び制御部１５等を有する。これら以外の構成については、上記の通り、ここでの説明には特に関係ないので省略している。
【００４２】
プログラムＲＡＭ１１には、ユーザプログラム１１ａが格納される。ユーザプログラム１１ａとは、例えば上記定周期プログラムである。尚、本例のシステムにおいては、プログラムＲＡＭ１１には、更に、後述する図２〜図４に示すＣＰＵモジュール１側の処理を制御部１５によって実現させるアプリケーションプログラムも格納されている。
【００４３】
データＲＡＭ１２は、ユーザデータ領域１２ａを有する。ユーザデータ領域１２ａには、例えば各定周期プログラム毎に対応する等値化データ（ユーザデータ）が格納されている。
【００４４】
等値化バス制御部１３は、等値化バス３を介して等値化を行う為の等値化処理専用の構成であり、制御部１５から等値化すべきデータを渡されると、待機側の等値化バス制御部２３と連動して、この等値化データを待機側の受信バッファ用ＲＡＭ２４に格納させる機能を有する。尚、等値化バス制御部１３は、例えば上記非特許文献１記載の“ＳＧＭ(Sameness data Gather Memory control)”に相当する。
【００４５】
制御部１５は、ＣＰＵモジュール１全体を制御する中央処理装置（ＣＰＵチップ等）であり、上記プログラムＲＡＭ１１に格納されているアプリケーションプログラムを用いて、通常時は先出願と同様のマルチ等値化による等値化処理を実行し、定周期プログラムの一致／不一致を確認する必要がある状況では図２〜図４に示すＣＰＵモジュール１側の処理を実行し、場合によっては一時的にシングル等値化による等値化処理へと移行する。つまり、制御部１５は、各定周期プログラム実行毎に等値化を行うと共にこの等値化データにはシステム情報も含むようにするマルチ等値化処理を実行する等値化処理機能と、待機系のＣＰＵモジュール２の定周期プログラムを読み出し、自ＣＰＵモジュールの定周期プログラムと一致するか否かの照合を行う照合機能と、この照合機能によって不一致と判定された場合には、上記等値化処理を、システム情報を必要としないシングル等値化モードによる等値化処理に切り替える等値化モード切替機能とを実現する。また、制御部１５は、その内部のメモリに、上記システム情報を保持している。
【００４６】
また、待機系のＣＰＵモジュール２は、プログラムＲＡＭ２１、データＲＡＭ２２、等値化バス制御部２３、受信バッファ用ＲＡＭ２４、及び制御部２５等を有する。この構成自体は、稼動系のＣＰＵモジュール１と同じであるので、特に説明しないが、制御部２５は、プログラムＲＡＭ２１に格納されているアプリケーションプログラムを用いて、後述する図２〜図４に示すＣＰＵモジュール２側の処理を実行する。また、制御部２５は、制御部１５とは異なり、各定周期プログラムの実行は行っていない。但し、これは、ＣＰＵモジュール２が待機系のときの話であり、稼動系のときには制御部２５は各定周期プログラムの実行も行う。
【００４７】
図２、図３、図４に、制御部１５、制御部２５によって実行される等値化モード決定処理の具体例を示す。尚、図２〜図４の処理は、基本的には同じであり、上記“発明が解決しようとする課題”で述べた様々な状況に応じて、図２、図３、図４に各々示す場合に、稼動系と待機系とで定周期プログラムが一致するか否かをチェックし、必要に応じて一時的にシングル等値化モードへ移行する。尚、図２〜図４におけるＣＰＵモジュール１−ＣＰＵモジュール２間のコマンド、プログラム送受信は、等値化バス３を介して行ってもよいし、システムバス４を介して行ってもよい。
【００４８】
図２は、第１の実施例による等値化モード決定処理のフローチャート図である。
第１の実施例では、稼動系／待機系ＣＰＵモジュールの両方をほぼ一緒に起動したときに、等値化モード決定処理を実行する。これは、例えば上述した“稼動系／待機系ＣＰＵモジュールを新たに設置した場合”等を想定している。
【００４９】
図２に示すように、稼動系のＣＰＵモジュール１の制御部１５は、システムイニシャル時、アプリケーションプログラム（定周期プログラム）の照合要求を出すと（ステップＳ１１）、まず、それまでの等値化モードが何であるかに係わらず、強制的にシングル等値化モードにする（ステップＳ１２）。つまり、フェイルセーフの考え方により、当該等値化モード決定処理中は、シングル等値化モードによる等値化処理を実行させる。次に、待機系のＣＰＵモジュール２に対して、プログラム読出しコマンドを送信し、これに対して後述する待機系のＣＰＵモジュール２側のステップＳ２３の処理によって返信されてくる待機系のＣＰＵモジュール２側のアプリケーションプログラムを受信して、例えば不図示のバッファ等に格納する（ステップＳ１３）。
【００５０】
また、別途、後述する待機系のＣＰＵモジュール２側のステップＳ２４の処理によって、待機系のＣＰＵモジュール２側からプログラム読出しコマンドが送られてきた場合には、稼動系のＣＰＵモジュール１側のアプリケーションプログラムを待機系のＣＰＵモジュール２に返信する（ステップＳ１４）。
【００５１】
次に、稼動系のＣＰＵモジュール１は、ステップＳ１３で受信・格納した待機系のＣＰＵモジュール２側のアプリケーションプログラムと、自己のアプリケーションプログラムとの照合を行い、両者が一致するか否かを判定する（ステップＳ１５）。この照合・一致判定は、既存の手法を用いればよく、例えば各プログラムを一行ずつ比較して一致・不一致を判定し、たとえ１行でも不一致である場合には、不一致と判定する。また、ここでは、プログラム不一致といっても、全く異なることは想定していない。例えば同じ定周期プログラムＡであっても、例えばバージョン等が異なる場合等を想定している。よって、上記照合は、例えば、稼動系のＣＰＵモジュール１の定周期プログラムＡと、待機系のＣＰＵモジュール２の定周期プログラムＡとを比較・照合する。勿論、他の定周期プログラムＢ，Ｃ等も同様に比較・照合する。そして、全ての定周期プログラムが一致する場合に、一致と判定する。
【００５２】
もし一致すると判定された場合には等値化処理はマルチ等値化モードに変更し（上記ステップＳ１２の処理によりシングル等値化モードになっているので）、もし不一致と判定された場合には等値化処理はシングル等値化モードのままとする（ステップＳ１６）。
【００５３】
尚、マルチ等値化モードとは、上述してある通り、上記先出願の等値化処理、すなわち各定周期プログラム実行毎に等値化を行うと共に該等値化データにはシステム情報も含むようにする等値化処理を実行するモードである。また、シングル等値化モードは、上述してある通り、従来の等値化処理、すなわち優先レベルが最も低い定周期プログラムの演算処理が終了後に、全ての定周期プログラムで使用される全ての制御データに対する等値化処理を実行するモードであり、このモードではシステム情報は等値化する必要はない。
【００５４】
一方、図２における待機系のＣＰＵモジュール２側の等値化モード決定処理は、稼動系のＣＰＵモジュール１のそれと、ほぼ同じである。すなわち、制御部２５は、システムイニシャル時、アプリケーションプログラム（定周期プログラム）の照合要求を出すと（ステップＳ２１）、まず、それまでの等値化モードが何であるかに係わらず、強制的にシングル等値化モードにする（ステップＳ２２）。つまり、フェイルセーフの考え方により、当該等値化モード決定処理中は、シングル等値化モードによる等値化処理を実行させる。次に、稼動系のＣＰＵモジュール１側のアプリケーションプログラムの読み出しを行う（ステップＳ２４）。
【００５５】
また、稼動系のＣＰＵモジュール１側のステップＳ１３の処理によって、稼動系のＣＰＵモジュール１側からプログラム読出しコマンドが送られてきた場合には、待機系のＣＰＵモジュール２側のアプリケーションプログラムを稼動系のＣＰＵモジュール１に返信する（ステップＳ２３）。
【００５６】
そして、自己のアプリケーションプログラムと稼動系のＣＰＵモジュール１のアプリケーションプログラムとの照合を行い（ステップＳ２５）、上記ステップＳ１６と同様、その一致／不一致に応じて等値化モードを決定する（ステップＳ２６）。
【００５７】
図３は、第２の実施例による等値化モード決定処理のフローチャート図である。
第２の実施例は、稼動系のＣＰＵモジュール１が既に運転中の状態で、待機系のＣＰＵモジュール２が立ち上がったときの等値化モード決定処理である。これは、例えば、上述した“一方のＣＰＵモジュールが故障等した為、交換した場合”を想定している。
【００５８】
図３において、図２の処理と略同一の処理については同一のステップ番号を付してある。ここでは、図２の処理とは異なる部分についてのみ説明する。
図３の処理では、待機系のＣＰＵモジュール２は、イニシャル処理によって起動すると、稼動系のＣＰＵモジュール１が運用中であるか否かをチェックし、運用中である場合には、自己に対してアプリケーションプログラム（定周期プログラム）の照合要求を出して等値化モード決定処理を開始させるだけでなく、稼動系のＣＰＵモジュール１に対して、アプリケーションプログラム照合要求コマンドを発行する（ステップＳ３１）。尚、上記チェックの結果、運用中ではなかった場合には、図２の処理を行うことになる。
【００５９】
稼動系のＣＰＵモジュール１は、このアプリケーションプログラム照合要求コマンドを受信すると、等値化モード決定処理を開始する（ステップＳ４１）。つまり、第１の実施例と比較すると、第２の実施例の場合は稼動系のＣＰＵモジュール１は運用中であり、等値化モード決定処理開始のトリガとなるイニシャル処理が行われないが、本例の手法では稼動系のＣＰＵモジュール１と待機系のＣＰＵモジュール２とが同じ等値化モードにならなければ意味がない為、稼動系のＣＰＵモジュール１においても等値化モード決定処理を行わせる為に、上記アプリケーションプログラム照合要求コマンドを発行する。その後の稼動系のＣＰＵモジュール１側のステップＳ１２〜Ｓ１７、待機系のＣＰＵモジュール２側のステップＳ２２〜Ｓ２７の処理は、図２の処理と略同様である。
【００６０】
図４は、第３の実施例による等値化モード決定処理のフローチャート図である。
第３の実施例では、例えば上述してあるように、どちらか一方のＣＰＵモジュール（ここでは稼動系のＣＰＵモジュール１）のアプリケーションプログラムが変更されたとき、他方のＣＰＵモジュールは変更されていない場合もあるので、当該等値化モード決定処理を行う。
【００６１】
図４において、図２の処理と略同一の処理については同一のステップ番号を付してある。ここでは、図２の処理とは異なる部分についてのみ説明する。
まず、図１には特に図示しなかったが、通常、各ＣＰＵモジュール１，２には、例えば何らかの専用線を介して、プログラマブルコントローラ支援装置５が接続されており、プログラマブルコントローラ支援装置５から既存のアプリケーションプログラムの改造版、バージョンアップ版等をダウンロードする。
【００６２】
図示の場合、一例として、既存のアプリケーションプログラムＣの変更版Ｃ’をダウンロードするものとする。
稼動系のＣＰＵモジュール１は、プログラマブルコントローラ支援装置５から、変更コマンドと共に上記変更版のアプリケーションプログラムＣ’が送られてくると（ステップＳ５１）、まず、メモリ等に保持している既存のアプリケーションプログラムＣを、変更版のアプリケーションプログラムＣ’に置き換える処理を実行し（ステップＳ５２）、続いて、自己に対してアプリケーションプログラム（定周期プログラム）の照合要求を出して等値化モード決定処理を開始させるだけでなく、待機ＣＰＵ２に対して、アプリケーションプログラム照合要求コマンドを発行する（ステップＳ５３）。
【００６３】
待機系のＣＰＵモジュール２は、このアプリケーションプログラム照合要求コマンドを受信すると、等値化モード決定処理を開始する（ステップＳ６１）。つまり、第１の実施例と比較すると、第２の実施例の場合は待機系のＣＰＵモジュール２では等値化モード決定処理開始のトリガとなるイニシャル処理が行われないが、本例の手法では稼動系のＣＰＵモジュール１と待機系のＣＰＵモジュール２とが同じ等値化モードにならなければ意味がない為、待機系のＣＰＵモジュール２においても等値化モード決定処理を行わせる為に、上記アプリケーションプログラム照合要求コマンドを発行する。その後の稼動系のＣＰＵモジュール１側のステップＳ１２〜Ｓ１７、待機系のＣＰＵモジュール２側のステップＳ２２〜Ｓ２７の処理は、図２の処理と略同様である。
【００６４】
以上説明した第１〜第３の実施例の等値化モード決定処理により、稼動系のＣＰＵモジュール１と待機系のＣＰＵモジュール２とでアプリケーションプログラムが不一致であるときには、図５のようなシステム情報の継続を必要としない最低レベル定周期プログラムエンドにての等値化を行うモード、すなわちシングル等値化モードに変更することで、図６に示すように、もし稼動系のＣＰＵモジュール１側に異常発生等の稼動／待機切り替え要因が発生しても、新たに稼動系となったＣＰＵモジュール２において最初から処理を実行し直すので（システム情報を用いて演算途中から処理を再開するものではないので）、稼動／待機切り替え後において、問題なく、定周期プログラム実行処理を継続することができる。
【００６５】
また、フェイルセーフの考え方より、等値化モード決定処理中には、シングル等値化モードに切り替えておく。
【図面の簡単な説明】
【００６６】
【図１】本例の２重化コントローラシステムにおけるプログラマブルコントローラ本体（ＣＰＵモジュール）の構成ブロック図である。
【図２】第１の実施例による等値化モード決定処理のフローチャート図である。
【図３】第２の実施例による等値化モード決定処理のフローチャート図である。
【図４】第３の実施例による等値化モード決定処理のフローチャート図である。
【図５】シングル等値化モード時のプログラム実行状態を示す図である。
【図６】シングル等値化モードにおける稼動／待機切り替わり発生の際のプログラム実行状態を示す図である。
【図７】２重化して冗長性を持たせたコントローラの一般的なシステム構成図である。
【図８】従来の定周期プログラム実行状態の一例を示す図である。
【図９】従来のシステムで定周期プログラム実行中に稼動系／待機系ＣＰＵの切替えが発生した時のプログラムの実行状態を示す図である。
【図１０】先出願のマルチ等値化処理による定周期プログラム実行状態の一例を示す図である。
【図１１】プログラム割り込み情報の一例を示す図である。
【図１２】プログラム実行スケジュール情報の一例を示す図である。
【図１３】稼動／待機切り替えの場合に、等値化したシステム情報によって中断途中から継続して演算処理する様子を示す図である。
【図１４】図１３の処理において定周期プログラムが相互に異なる場合に生じる問題を説明する為の図である。
【符号の説明】
【００６７】
１  ＣＰＵモジュール（稼動系）
２  ＣＰＵモジュール（待機系）
３  等値化バス
４  システムバス
１１  プログラムＲＡＭ
１２  データＲＡＭ
１３  等値化バス制御部
１４  受信バッファ用ＲＡＭ
１５  制御部
２１  プログラムＲＡＭ
２２  データＲＡＭ
２３  等値化バス制御部
２４  受信バッファ用ＲＡＭ
２５  制御部
【図１】
2005092695.tif 000003
【図２】
2005092695.tif 000004
【図３】
2005092695.tif 000005
【図４】
2005092695.tif 000006
【図５】
2005092695.tif 000007
【図６】
2005092695.tif 000008
【図７】
2005092695.tif 000009
【図８】
2005092695.tif 000010
【図９】
2005092695.tif 000011
【図１０】
2005092695.tif 000012
【図１１】
2005092695.tif 000013
【図１２】
2005092695.tif 000014
【図１３】
2005092695.tif 000015
【図１４】
2005092695.tif 000016