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