(57)【要約】【課題】稼動／待機切り替えが生じた場合に稼動系のＣＰＵモジュールにアクセスできなくなるという問題を解決する。【解決手段】任意の稼動／待機ペアにおいて稼動／待機切り替えが生じた場合、このペアの各ＣＰＵモジュールは、自己が稼動系に移行する場合にはデフォルト稼動ＣＰＵ番号を取得してこれを自己のバラレルバス制御部にセットする。一方、自己が待機系に移行する場合にはデフォルト待機ＣＰＵ番号を取得してこれを自己のバラレルバス制御部にセットする。【選択図】図２
2009187314.tif 000002
【特許請求の範囲】
【請求項１】
稼動系と待機系のＣＰＵモジュールのペアが複数組存在し、各ＣＰＵモジュールがパラレルバスを介して相互に通信可能な二重化コントローラ・システムであって、
前記各ＣＰＵモジュールは、
任意に設定可能な自己の識別番号を記憶する番号設定レジスタを備え、前記パラレルバスに接続し、該パラレルバス上で前記自己の識別番号を用いて他のＣＰＵモジュールのパラレルバス制御手段との間で通信を行うパラレルバス制御手段と、
ユーザプログラム実行に伴い前記パラレスバスを介した通信処理を実行する場合、通信相手先の前記識別番号を含むアクセス先アドレスを前記パラレルバス制御手段に渡すことで前記通信を行わせるユーザプログラム実行手段と、
自ペアにおける稼動系、待機系それぞれに対応する前記識別番号を記憶する識別番号記憶手段と、
稼動系／待機系切り替えが行われる際に、前記識別番号記憶手段を参照し、自モジュールが稼動系から待機系へ移行する場合には前記待機系に対応する識別番号を前記番号設定レジスタに設定し、自モジュールが待機系から稼動系へ移行する場合には前記稼動系に対応する識別番号を前記番号設定レジスタに設定する識別番号設定手段と、
を有することを特徴とする二重化コントローラ・システム。
【請求項２】
前記パラレルバス制御手段は、任意の他のＣＰＵモジュールのパラレルバス制御手段から通信を受けた前記通信相手先の識別番号と、自己の前記番号設定レジスタに記憶される識別番号とが同一の場合には、自己が前記通信相手先であると認識し、アクセス応答することを特徴とする請求項１記載の二重化コントローラ・システム。
【請求項３】
稼動系と待機系のＣＰＵモジュールのペアが複数組存在し、各ＣＰＵモジュールがパラレルバスを介して相互に通信可能な二重化コントローラ・システムにおける前記各ＣＰＵモジュールであって、
任意に設定可能な自己の識別番号を記憶する番号設定レジスタを備え、前記パラレルバスに接続し、該パラレルバス上で前記自己の識別番号を用いて他のＣＰＵモジュールのパラレルバス制御手段との間で通信を行うパラレルバス制御手段と、
ユーザプログラム実行に伴い前記パラレスバスを介した通信処理を実行する場合、通信相手先の前記識別番号を含むアクセス先アドレスを前記パラレルバス制御手段に渡すことで前記通信を行わせるユーザプログラム実行手段と、
自ペアにおける稼動系、待機系それぞれに対応する前記識別番号を記憶する識別番号記憶手段と、
稼動系／待機系切り替えが行われる際に、前記識別番号記憶手段を参照し、自モジュールが稼動系から待機系へ移行する場合には前記待機系に対応する識別番号を前記番号設定レジスタに設定し、自モジュールが待機系から稼動系へ移行する場合には前記稼動系に対応する識別番号を前記番号設定レジスタに設定する識別番号設定手段と、
を有することを特徴とするＣＰＵモジュール。
【請求項４】
稼動系と待機系のＣＰＵモジュールのペアが複数組存在し、各ＣＰＵモジュールがパラレルバスを介して相互に通信可能な二重化コントローラ・システムにおける前記各ＣＰＵモジュールにおけるコンピュータを、
任意に設定可能な自己の識別番号を記憶する番号設定レジスタを備え、前記パラレルバスに接続し、該パラレルバス上で前記自己の識別番号を用いて他のＣＰＵモジュールのパラレルバス制御手段との間で通信を行うパラレルバス制御手段と、
ユーザプログラム実行に伴い前記パラレスバスを介した通信処理を実行する場合、通信相手先の前記識別番号を含むアクセス先アドレスを前記パラレルバス制御手段に渡すことで前記通信を行わせるユーザプログラム実行手段と、
自ペアにおける稼動系、待機系それぞれに対応する前記識別番号を記憶する識別番号記憶手段と、
稼動系／待機系切り替えが行われる際に、前記識別番号記憶手段を参照し、自モジュールが稼動系から待機系へ移行する場合には前記待機系に対応する識別番号を前記番号設定レジスタに設定し、自モジュールが待機系から稼動系へ移行する場合には前記稼動系に対応する識別番号を前記番号設定レジスタに設定する識別番号設定手段、
として機能させる為のプログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、複数のＣＰＵモジュールで構成されて、各ＣＰＵモジュールがパラレルバスを介して相互に通信可能な二重化コントローラ・システムに関する。
【背景技術】
【０００２】
従来より、プログラマブルコントローラ・システムにおいて、信頼性を向上させるためにＣＰＵモジュール（プログラマブルコントローラ本体）を待機冗長の二重化構成にする場合がある。待機冗長の二重化構成は、２つのＣＰＵモジュールを１組とし、一方を稼動系、他方を待機系とし、稼動系ＣＰＵモジュールを待機系ＣＰＵモジュールが監視して、稼動系ＣＰＵモジュールに障害等の切り替え要因が生じたならば待機系ＣＰＵモジュールが稼動系に切り替る構成（以下、二重化コントローラ・システムと呼ぶ）である。
【０００３】
上記従来の二重化コントローラ・システムの一例が、例えば特許文献１，２，３等に開示されている。
図４に、従来の二重化コントローラ・システム全体の概略構成図を示す。
【０００４】
図４に示す例では２組のＣＰＵモジュールがシステムバス１０２に接続されている。すなわち、ＣＰＵ０モジュールとＣＰＵ１モジュール、ＣＰＵ２モジュールとＣＰＵ３モジュールが、其々、稼動／待機ペア（図示の稼動／待機ペア０と稼動／待機ペア１）として構成され、各ＣＰＵモジュールと各Ｉ／Ｏモジュール１０３はシステムバス１０２に接続される。
【０００５】
また、上記特許文献１〜３には示されていないが、図４に示すように、各ＣＰＵモジュールはパラレルバス１０１に接続されており、各ＣＰＵモジュールはパラレルバス１０１を介して他のＣＰＵモジュールのユーザデータにアクセスすることができる。
【０００６】
図５に、各ＣＰＵモジュールのペアの詳細な構成例を示す。ここでは一例として稼動／待機ペア０の構成例を示すが、稼動／待機ペア１も同じ構成である。
図示の通り、稼動／待機ペアとなるＣＰＵモジュール同士は、上記パラレルバス１０１だけで無く更に等値化バス１０４により接続されており、等値化バス１０４を介して上記特許文献１，２等に記載の等値化処理を行っているが、ここでは等値化処理は関係ないので特に説明しない。
【０００７】
各ＣＰＵモジュールの構成は同じであるので、その各構成の符号は同一の構成に関しては同一符号を付してある。図示のＣＰＵ０モジュールは、プログラムＲＡＭ５１、データＲＡＭ５２、等値化バス制御部５３、受信バッファ用ＲＡＭ５４、マイクロプロセッサ５５、及びパラレルバス制御部５６等を有する。図示の通り、ＣＰＵ１モジュールもＣＰＵ０モジュールと同じ構成である。
【０００８】
上記構成のうち、パラレルバス制御部５６以外の構成は、上記特許文献１，２等に詳細に説明されているので、ここではごく簡単に説明するのみとする。
まず、プログラムＲＡＭ５１には、ユーザプログラム５１ａが格納される。ユーザプログラム５１ａとは、例えば各定周期プログラム（定周期に実行される各種制御処理等をマイクロプロセッサにより実行させるプログラム）等である。
【０００９】
データＲＡＭ５２は、ユーザデータ領域５２ａを有し、また、等値化データ転送情報５２ｂを格納する。等値化データ転送情報５２ｂ、等値化バス制御部５３、受信バッファ用ＲＡＭ５４、及び等値化バス１０４は、上記特許文献１，２等に記載の等値化処理に関係する構成／情報であり、ここでは関係ないので特に説明しない。また、システムバス１０２を介したデータ送受信処理を行う為の構成も存在するが、ここでは関係ないので特に図示／説明しない。
【００１０】
ユーザデータ領域５２ａには各種ユーザデータが格納される。ユーザデータは上記ユーザプログラム５１ａによる処理に係る各種データ（変数等）であり、詳細な一例は特許文献２等に記載されているが、ここでは特に関係ないので説明しないものとする。
【００１１】
そして、パラレルバス制御部５６は、パラレルバス１０１を介して他のＣＰＵモジュールとの通信を行う為の構成である。すなわち、ユーザプログラム５１ａを実行するマイクロプロセッサ５５は、ユーザプログラム５１ａによって示されるアドレスがパラレルバス空間である場合は、自己のパラレルバス制御部５６に通信処理を依頼する。これにより、自己のパラレルバス制御部５６がパラレルバス１０１を介して他のＣＰＵモジュールのパラレルバス制御部５６との通信を行う。また、他のＣＰＵモジュールのユーザデータ領域５２にアクセスすることができる。
【００１２】
ここで、図６に示すように、パラレルバス制御部５６内にはＣＰＵ番号設定レジスタ５６ａが備えられており、このＣＰＵ番号設定レジスタ５６ａには、予め各ＣＰＵモジュール毎のユニークなＣＰＵ番号が設定されている。パラレルバス制御部５６は、このＣＰＵ番号によりアクセス応答を行う。すなわち、パラレルバス１０１上での他のＣＰＵモジュールによるアクセス相手先として、自己のＣＰＵ番号が指定されている場合には、アクセス応答を行う。
【００１３】
ここで、特許文献３には、ＣＰＵモジュール間の各種アクセスのために各ＣＰＵモジュールを物理的に識別するＣＰＵ局番（上記ＣＰＵ番号に相当）が、各ＣＰＵモジュールには設定されていることが開示されている。更に、特許文献３には、ＣＰＵモジュールの冗長化ペアの組み合わせの決定に、このＣＰＵ局番を利用することが開示されている。すなわち、このＣＰＵ局番を用いて、例えばＣＰＵ局番０と１、ＣＰＵ局番２と３というように、ＣＰＵ局番の数字が連番のものがペアとなることを固定的に定義する。
【００１４】
また、どちらが稼動状態／待機状態になるかを同時電源投入時の決定する際において、上記各ペアの組合せにおいて偶数番号側をデフォルトで稼動ＣＰＵ、奇数番号側をデフォルトで待機ＣＰＵと定義している。これにより同時電源投入時に、例えば上記ＣＰＵ局番が０と２の各ＣＰＵモジュールは稼動系、上記ＣＰＵ局番が１と３の各ＣＰＵモジュールは待機系となる。
【００１５】
ここで、例えば、ＣＰＵ０モジュールがＣＰＵ番号＝０、ＣＰＵ１モジュールがＣＰＵ番号＝１、ＣＰＵ２モジュールがＣＰＵ番号＝２、ＣＰＵ３モジュールがＣＰＵ番号＝３を、それぞれ自己のパラレルバス制御部５６に設定するものとすると、例えば図７に示すように、パラレルバス上でのアドレス空間が決まる。
【００１６】
また、図８には、ユーザプログラムにおけるパラレルバス上のアドレス空間表現の一例を示す。
図示のアドレス空間表現では、最上位アドレスビット＝１５により内部データＲＡＭ空間であるかパラレルバス空間であるかを識別できる。
【００１７】
そして、ユーザプログラムを実行するマイクロプロセッサ５５は、パラレルバス空間である場合は、アドレスビット＝１４〜０をパラレルバス制御部５６に渡してアクセス処理を要求する。アドレスビット＝１４〜０において、アドレスビット１４〜１０は上記ＣＰＵ番号、アドレスビット０〜９がオフセットアドレスである。
【００１８】
パラレルバス制御部５６は、このアドレスビット＝１４〜０をパラレルバス１０１上に送出する。これによりアドレスビット１４〜１０によって示される上記ＣＰＵ番号に該当する他ＣＰＵモジュールのパラレルバス制御部５６が、アクセス応答することになる。すなわち、自己のＣＰＵ番号設定レジスタ５６ａに設定されているＣＰＵ番号が、上記アドレスビット１４〜１０のＣＰＵ番号と同一であるパラレルバス制御部５６が、アクセス応答することになる。例えば上記の例においてアドレスビット１４〜１０のＣＰＵ番号＝‘２’であった場合、ＣＰＵ２モジュールのパラレルバス制御部５６が、アクセス応答することになる。
【００１９】
ここで、稼動／待機ペアとなる１組のＣＰＵモジュールは、同一のユーザプログラムを格納することが一般的である。上記図４の例では、図９（ａ）に示すように、ＣＰＵ０モジュールとＣＰＵ１モジュールには、其々、同一のユーザプログラムが格納されている。同様に、ＣＰＵ２モジュールとＣＰＵ３モジュールには、其々、同一のユーザプログラムが格納されている（このユーザプログラムは、基本的に、ＣＰＵ０モジュール等のユーザプログラムとは異なる）。
【００２０】
そして、各ユーザプログラムにおける上記アドレス空間表現のアドレスビット１４〜１０によって示されるＣＰＵ番号、すなわちアクセス先を示すＣＰＵ番号は、通常、デフォルト稼動系のＣＰＵモジュールのＣＰＵ番号となっている。
【００２１】
ここで、例えば、図９（ａ）、（ｂ）に示す例では、図９（ａ）にはデフォルト状態、図９（ｂ）には稼動／待機切り替えがあった後の状態を示す。
デフォルト状態（電源投入直後等）では、図４に示す状態となっている。すなわち、ＣＰＵ０モジュールとＣＰＵ２モジュールとがデフォルト稼動系となっており、ＣＰＵ１モジュールとＣＰＵ３モジュールとがデフォルト待機系となっている。上記ユーザプログラムは、上記の通り、このデフォルト状態に合わせて作成されている。
【００２２】
従って、例えば、稼動／待機ペア０のＣＰＵモジュールのユーザプログラムにて、稼動／待機ペア１のＣＰＵモジュールのユーザデータ領域をアクセスする場合、このユーザプログラムにおける上記アドレスビット１４〜１０のＣＰＵ番号は、稼動／待機ペア１においてデフォルト稼動系であるＣＰＵ２モジュールのＣＰＵ番号となっている。図９（ａ）に示す例では、上記アドレスビット１４〜１０のＣＰＵ番号＝‘２’となっている。
【００２３】
デフォルト状態のままであれば、これで問題はない。しかし、少なくとも何れかのペアにおいて何らかの原因により稼動／待機切り替えが生じると、問題が生じる。例えば、図９（ａ）に示す状態から、図９（ｂ）に示す状態になった場合等である。すなわち、稼動／待機ペア１において稼動／待機切り替えが生じた結果、図９（ｂ）に示すように、ＣＰＵ２モジュールが待機系、ＣＰＵ３モジュールが稼動系になったとする。
【００２４】
この場合、例えばＣＰＵ０モジュールが、上記アドレスビット１４〜１０のＣＰＵ番号＝‘２’によってアクセスした場合、アクセス先は当然ＣＰＵ２モジュールとなるが、これは上記の通り待機系になってしまっている。この為、現在稼動系となっているＣＰＵ３モジュールにアクセスできなくなるという問題が発生してしまう。
【００２５】
この問題への対策としては、ユーザが上記稼動／待機ペア０のＣＰＵモジュールのユーザプログラムにおいて、稼動／待機ペア１のＣＰＵモジュールの現在の稼動／待機状態を判断して、この判断結果に応じてアクセスアドレスを使い分けるなどの処理を追加作成する等の対処をしなければならない。勿論、稼動／待機ペア１のＣＰＵモジュールのユーザプログラムに関しても同様の対処が必要である。よって、ユーザに複雑なプログラムを作成させることになり、ユーザの負担が重くなる。また、プログラム実行速度の低速化をまねいてしまう。
【特許文献１】特開２００３−２９６１３３号公報
【特許文献２】特開２００５−９２５２０号公報
【特許文献３】特開２００２−１４０２０６号公報
【発明の開示】
【発明が解決しようとする課題】
【００２６】
本発明の課題は、上記二重化コントローラ・システムにおいて、ユーザプログラムによりパラレルバスを介して他の稼動／待機ペアの稼動系ＣＰＵモジュールにアクセスを行う処理に係る問題、すなわち稼動／待機切り替えが生じた場合に稼動系のＣＰＵモジュールにアクセスできなくなるという問題を、ユーザがユーザプログラムにこの問題を解決する為の処理を追加する等の作業を行う必要なく、ユーザの手間が掛かることなく且つプログラムが複雑化し処理の低速化をまねくことなく、パラレスバス制御部の設定内容を自動的に変更することで解決できるようにする二重化コントローラ・システム、ＣＰＵモジュール、そのプログラム等を提供することである。
【課題を解決するための手段】
【００２７】
本発明の二重化コントローラ・システムは、稼動系と待機系のＣＰＵモジュールのペアが複数組存在し、各ＣＰＵモジュールがパラレルバスを介して相互に通信可能な二重化コントローラ・システムであって、前記各ＣＰＵモジュールは、任意に設定可能な自己の識別番号を記憶する番号設定レジスタを備え、前記パラレルバスに接続し、該パラレルバス上で前記自己の識別番号を用いて他のＣＰＵモジュールのパラレルバス制御手段との間で通信を行うパラレルバス制御手段と、ユーザプログラム実行に伴い前記パラレスバスを介した通信処理を実行する場合、通信相手先の前記識別番号を含むアクセス先アドレスを前記パラレルバス制御手段に渡すことで前記通信を行わせるユーザプログラム実行手段と、自ペアにおける稼動系、待機系それぞれに対応する前記識別番号を記憶する識別番号記憶手段と、稼動系／待機系切り替えが行われる際に、前記識別番号記憶手段を参照し、自モジュールが稼動系から待機系へ移行する場合には前記待機系に対応する識別番号を前記番号設定レジスタに設定し、自モジュールが待機系から稼動系へ移行する場合には前記稼動系に対応する識別番号を前記番号設定レジスタに設定する識別番号設定手段とを有する。
【００２８】
例えば、前記パラレルバス制御手段は、任意の他のＣＰＵモジュールのパラレルバス制御手段による通信における前記通信相手先の識別番号が、自己の前記番号設定レジスタに記憶される識別番号と同一の場合には、自己が前記通信相手先であると認識し、アクセス応答する。
【００２９】
上記ユーザプログラム実行に伴う通信相手先の識別番号は、上記稼動系に対応する識別番号となっている。上記稼動系／待機系切り替えが行われる際の上記識別番号設定手段の処理により、新たに稼動系となったＣＰＵモジュールの番号設定レジスタには上記稼動系に対応する識別番号が設定されている。よって、稼動系／待機系切り替えが行われた場合でも、上記ユーザプログラム実行に伴う通信に対して、新たに稼動系となったＣＰＵモジュールのパラレルバス制御手段がアクセス応答することになり、稼動系のＣＰＵモジュールにアクセスすることができる。
【発明の効果】
【００３０】
本発明の二重化コントローラ・システム、ＣＰＵモジュール、そのプログラム等によれば、二重化コントローラ・システムにおいて、ユーザプログラムによりパラレルバスを介して他の稼動／待機ペアの稼動系ＣＰＵモジュールにアクセスを行う処理に係る問題、すなわち稼動／待機切り替えが生じた場合に稼動系のＣＰＵモジュールにアクセスできなくなるという問題を、ユーザがユーザプログラムにこの問題を解決する為の処理を追加する等の作業を行う必要なく、ユーザの手間が掛かることなく且つプログラムが複雑化し処理の低速化をまねくことなく、パラレスバス制御部の設定内容を自動的に変更することで解決できる。
【発明を実施するための最良の形態】
【００３１】
以下、図面を参照して本発明の実施の形態について説明する。
図１は、本例の二重化コントローラ・システムにおけるＣＰＵモジュールの構成図である。
【００３２】
尚、本例の二重化コントローラ・システム全体構成は、ここでは示さないが、例えば図４に示す構成と同様に、稼動／待機ペアのＣＰＵモジュールが複数組存在しており、各ＣＰＵモジュールはパラレルバス１やシステムバス３に接続している。このシステムバス３には、各Ｉ／Ｏモジュール４も接続している。また稼動／待機ペアとなるＣＰＵモジュール間は等値化バス２により接続している。この複数のＣＰＵモジュールの構成／処理は同じであり、その構成例を図１に示している。
【００３３】
また、尚、図１に示す構成自体は、上述した従来の構成と略同様である。従来と異なる点は、本例のＣＰＵモジュールでは、後述する図２の処理も実行する点であり、これについては後に説明する。よって、図１の構成に関しては、以下の通り、簡単に説明するのみとする。
【００３４】
図１に示す例のＣＰＵモジュール１０は、プログラムＲＡＭ１１、データＲＡＭ１２、等値化バス制御部１３、受信バッファ用ＲＡＭ１４、マイクロプロセッサ１５、及びパラレルバス制御部１６等を有する。
【００３５】
プログラムＲＡＭ１１には、ユーザプログラム１１ａが格納される。ユーザプログラム１１ａとは、例えば各定周期プログラム（定周期に実行される各種制御処理等をマイクロプロセッサにより実行させるプログラム）等である。データＲＡＭ１２は、ユーザデータ領域１２ａを有し、また、等値化データ転送情報１２ｂを格納する。等値化データ転送情報１２ｂ、等値化バス制御部１３、受信バッファ用ＲＡＭ１４、及び等値化バス２によって、上記特許文献１，２等に記載の等値化処理が実行される。尚、等値化バス２は、自己とペアとなるＣＰＵモジュールと接続するバスである。
【００３６】
そして、特に図示しないが、図１の構成におけるパラレルバス制御部１６も、図６に示す従来例と同様、ＣＰＵ番号設定レジスタを備えている。ＣＰＵ番号設定レジスタには予め所定のＣＰＵ番号が記憶されている。
【００３７】
従来では、このＣＰＵ番号が予め設定された固定的な値のままであったが、本手法では、マイクロプロセッサ１５が図２（ａ）、（ｂ）の処理を実行することで、ＣＰＵ番号設定レジスタに記憶されるＣＰＵ番号を変更する場合がある。
【００３８】
すなわち、上記本例の二重化コントローラ・システムにおけるＣＰＵモジュールでは、マイクロプロセッサ１５は、自モジュールの稼動／待機状態に応じて、自己のパラレルバス制御部１６に対して、稼動状態時には他のＣＰＵモジュールのユーザプログラムにより使用されるパラレルバスのアドレス空間（デフォルト稼動のＣＰＵ番号）の設定にする。また、待機状態時は、他のＣＰＵモジュールのユーザプログラムにより使用されないアドレス空間（デフォルト待機のＣＰＵ番号）の設定にする。詳しくは後に図２を参照して説明する。
【００３９】
尚、本例のユーザプログラム１１ａは、パラレルバスアクセス処理に関しては、上記従来と同様、他の各稼動／待機ペアへのアクセスに関して、アクセス先としてデフォルト稼動系のＣＰＵモジュールのＣＰＵ番号を使用している。
【００４０】
上述した設定の切り替えは、例えば、自機が稼動状態から待機状態に切り替わる際（待機状態に移行する際）、あるいは待機状態から稼動状態に切り替わる際（稼動状態に移行する際）に実行する。図２（ａ）には稼動状態に移行する際の設定処理、図２（ｂ）には待機状態に移行する際の設定処理を示す。
【００４１】
ここで、図１には示していないが、例えばデータＲＡＭ１２又はマイクロプロセッサ１５の不図示の内部メモリには、予め、自己の稼動／待機ペアに係るデフォルト稼動ＣＰＵ番号とデフォルト待機ＣＰＵ番号とが記憶されている。例えば、図９（ａ）に示す例を用いると、稼動／待機ペア０のＣＰＵ０モジュールとＣＰＵ１モジュールには、それぞれ、デフォルト稼動ＣＰＵ番号＝‘０’及びデフォルト待機ＣＰＵ番号＝‘１’が記憶されている。同様に、稼動／待機ペア１のＣＰＵ２モジュールとＣＰＵ３モジュールには、それぞれ、デフォルト稼動ＣＰＵ番号＝‘２’及びデフォルト待機ＣＰＵ番号＝‘３’が記憶されている。
【００４２】
そして、本例においても、初期状態では、各ＣＰＵモジュールのパラレルバス制御部１６（そのＣＰＵ番号設定レジスタ）には、従来と同様のＣＰＵ番号が記憶されている。すなわち、図９（ａ）の例のように、パラレルバス制御部１６に予め記憶されているＣＰＵ番号は、ＣＰＵ０モジュールでは‘０’、ＣＰＵ１モジュールでは‘１’、ＣＰＵ２モジュールでは‘２’、ＣＰＵ３モジュールでは‘３’となっている。
【００４３】
これは、換言すれば、デフォルト稼動系となっているＣＰＵモジュールのパラレルバス制御部１６には上記デフォルト稼動ＣＰＵ番号が記憶され、デフォルト待機系となっているＣＰＵモジュールのパラレルバス制御部１６には上記デフォルト待機ＣＰＵ番号が記憶されている。
【００４４】
そして、任意の稼動／待機ペアにおいて稼動／待機切り替えがあった場合には、当該ぺアの各ＣＰＵモジュールのマイクロプロセッサ１５は、自己が待機状態から稼動状態に移行する場合には図２（ａ）の処理を、自己が稼動状態から待機状態に移行する場合には図２（ｂ）の処理を、それぞれ実行する。
【００４５】
図２（ａ）の処理では、上記デフォルト稼動ＣＰＵ番号を取得して（ステップＳ１１）、これを自己のパラレルバス制御部１６に（そのＣＰＵ番号設定レジスタに）セットする（ステップＳ１２）。
【００４６】
図２（ｂ）の処理では、上記デフォルト待機ＣＰＵ番号を取得して（ステップＳ２１）、これを自己のパラレルバス制御部１６に（そのＣＰＵ番号設定レジスタに）セットする（ステップＳ２２）。
【００４７】
この様な処理を実行することで、常に、現在稼動系となっているＣＰＵモジュールのパラレルバス制御部１６には、ユーザプログラムで使用するＣＰＵ番号と同じＣＰＵ番号がセットされることになり、このユーザプログラム実行により必ず現在稼動系のＣＰＵモジュールにアクセルされることになり、ユーザプログラムを変更しなくても、上記従来の問題が解決できる。すなわち、ユーザの手間が掛かることなく、上記従来の問題が解決できる。また、ユーザプログラム実行速度の低速化を招くこともない。
【００４８】
尚、図２（ａ）、（ｂ）に示す処理は、マイクロプロセッサ１５が、その内部メモリ又はプログラムＲＡＭ１１等に予め記憶されている所定のアプリケーションプログラムを読出し・実行することにより実現される。
【００４９】
ここで、例えば、パラレルバス制御部１６に対するデフォルトのＣＰＵ番号設定が、上述したように（そして図９等に一例として示したように）、デフォルト稼動系に対しては偶数のＣＰＵ番号、デフォルト待機系に対しては奇数のＣＰＵ番号が設定されるように、予め決められている場合には、これに対応して、ユーザプログラムが扱う論理アドレスのＣＰＵ番号（例えば図８に示す１０〜１４ビットにより示されるＣＰＵ番号）は、全て偶数のＣＰＵ番号となっている。
【００５０】
この場合には、上記図２（ａ）の稼動系への移行時の処理は、パラレルバス制御部１６が管理する物理アドレスを、ユーザプログラムが扱う論理アドレスである偶数ＣＰＵ番号へ変更する処理を意味することになる。同様に、上記図２（ａ）の待機系への移行時の処理は、パラレルバス制御部１６が管理する物理アドレスを、ユーザプログラムにより使用されない論理アドレスである奇数ＣＰＵ番号へ変更する処理を意味することになる。
【００５１】
この偶数ＣＰＵ番号と奇数ＣＰＵ番号の対応関係は、例えば、ペア情報として不図示のテーブル等に予め定義されている（マイクロプロッセ１５のアクセス可能な図示しないファームウェア部に具備する）。
【００５２】
尚、上記の例では、０と１、２と３・・・、のような奇数・偶数をペアとしているが、０と２、１と３・・・、のような対応関係であっても構わない。また、偶数ＣＰＵ番号がデフォルト待機系で奇数ＣＰＵ番号がデフォルト起動系であっても構わない。本説明では一例として、偶数ＣＰＵ番号がデフォルト稼動系の場合について説明している。
【００５３】
上述した図２（ａ）、（ｂ）の処理により、各ＣＰＵモジュールのパラレルバス制御部１６には、そのＣＰＵモジュールが稼動状態時には物理アドレス＝偶数ＣＰＵ番号、待機状態時は物理アドレス＝奇数ＣＰＵ番号が設定されていることになるので、ユーザプログラムが扱う論理アドレスが固定的（偶数ＣＰＵ番号）であっても、常に、現在稼動系のＣＰＵモジュールにアクセスされることになる。
【００５４】
図３（ａ）〜（ｃ）に、上記構成のＣＰＵモジュールを例えば図９のシステム構成に適用した場合のＣＰＵ番号変更の一例を示す。
図３（ａ）〜（ｃ）のシステム構成では、図９の例に従い、２組のＣＰＵモジュールペアが存在する。すなわち、稼動／待機ペア０（ＣＰＵ０モジュールとＣＰＵ１モジュールのペア）と稼動／待機ペア１（ＣＰＵ２モジュールとＣＰＵ３モジュールのペア）とが存在する。そして、ここでは、ＣＰＵ０モジュールとＣＰＵ２モジュールがデフォルト稼動系となっており、初期状態ではそれぞれ自己のパラレルバス制御部１６にＣＰＵ番号＝０、ＣＰＵ番号＝２が設定されている。同様に、ＣＰＵ１モジュールとＣＰＵ３モジュールがデフォルト待機系となっており、初期状態ではそれぞれ自己のパラレルバス制御部１６にＣＰＵ番号＝１、ＣＰＵ番号＝３が設定されている。
【００５５】
図３（ａ）に示す状態１には上記初期状態のＣＰＵ番号設定状況を示してある。
そして、ユーザプログラムは上記初期状態に合わせて作成されている。例えば、稼動／待機ペア０のＣＰＵモジュールにおけるユーザプログラムでは、稼動／待機ペア１のＣＰＵモジュールにパラレスバス１を介してアクセスする処理において、アクセス先のＣＰＵ番号（例えば図８に示す１０〜１４ビットにより示されるＣＰＵ番号）＝２となっている。同様に、稼動／待機ペア１のＣＰＵモジュールにおけるユーザプログラムでは、稼動／待機ペア０のＣＰＵモジュールにパラレスバス１を介してアクセスする処理において、アクセス先のＣＰＵ番号＝０となっている。
【００５６】
よって、例えば、ＣＰＵ０モジュールが論理アドレスとしてＣＰＵ番号＝２を用いてパラレルバスアクセスを行った場合、ＣＰＵ２モジュールは物理アドレスとしてＣＰＵ番号＝２を設定しているので、ＣＰＵ２モジュールがアクセス応答することになる。これより、ＣＰＵ０モジュールはＣＰＵ２モジュールのユーザデータ領域１２ａにアクセスすることができる。
【００５７】
そして、例えば、稼動／待機ペア１にて稼動／待機切り替えが発生すると、当該ペアの各ＣＰＵモジュールで上記図２（ａ）または図２（ｂ）の処理が実行されることで、図３（ｂ）に示す状態２となる。すなわち、待機系へと切り替わったＣＰＵ２モジュールのパラレルバス制御部１６にはＣＰＵ番号＝３が設定され、稼動系へと切り替わったＣＰＵ３モジュールのパラレルバス制御部１６にはＣＰＵ番号＝２が設定された状態となる。
【００５８】
この状態２で上記例と同様にＣＰＵ０モジュールが論理アドレスとしてＣＰＵ番号＝２を用いてパラレルバスアクセスを行った場合、ＣＰＵ３モジュールは物理アドレスとしてＣＰＵ番号＝２を設定しているので、現在稼動系のＣＰＵ３モジュールがアクセス応答することになる。これより、ＣＰＵ０モジュールはＣＰＵ３モジュールのユーザデータ領域１２ａにアクセスすることができる。
【００５９】
尚、図３（ｂ）に示す状態２において更に稼動／待機ペア１にて稼動／待機切り替えが発生すると、再び図２（ａ）、（ｂ）の処理が実行されることで、図３（ｃ）に示す状態３となる。この状態３は図３（ａ）に示す状態１と同じである。
【００６０】
上記の通り、本手法によれば、ユーザプログラムにおいて、通信相手先のＣＰＵモジュールペアの現在の稼動／待機状態を判断してこの判断結果に応じてアクセスアドレスを使い分けるなどの処理を追加しなくても、稼動／待機切り替え時にのみ上記簡単な処理を実行するだけで、必ず、現在稼動状態のＣＰＵモジュールがアクセス応答するようにできる。
【００６１】
すなわち、システム処理にて、常に、現在稼動状態となっているＣＰＵモジュールのパラレルバス制御部１６に設定されるＣＰＵ番号＝偶数の物理アドレスを維持することにより、ユーザがパラレルバスアクセスを行うプログラムを作成する時は、ＣＰＵ番号＝偶数の論理アドレスを使用すれば良いことになり、ユーザプログラム作成の容易化、または、プログラム実行の高速化が図れる。
【図面の簡単な説明】
【００６２】
【図１】本例の二重化コントローラ・システムにおけるＣＰＵモジュールの構成図である。
【図２】（ａ）、（ｂ）は稼動／待機切り替え時の処理フローチャート図である。
【図３】（ａ）〜（ｃ）は、図２の処理によるＣＰＵ番号設定変更の様子を示す図である。
【図４】従来の二重化コントローラ・システム全体の概略構成図である。
【図５】図４の各ＣＰＵモジュールのペアの詳細な構成例である。
【図６】パラレルバス制御部内のＣＰＵ番号設定レジスタを示す図である。
【図７】パラレルバス上でのアドレス空間の一例である。
【図８】ユーザプログラムのパラレルバスのアドレス空間表現の一例である。
【図９】（ａ）、（ｂ）は稼動／待機切り替え前後の状態を示す図である。
【符号の説明】
【００６３】
１      パラレスバス
２      等値化バス
３      システムバス
４      Ｉ／Ｏモジュール
１０      ＣＰＵモジュール
１１      プログラムＲＡＭ
１２      データＲＡＭ
１３      等値化バス制御部
１４      受信バッファ用ＲＡＭ
１５      マイクロプロセッサ
１６      パラレルバス制御部
【図１】
2009187314.tif 000003
【図２】
2009187314.tif 000004
【図４】
2009187314.tif 000005
【図５】
2009187314.tif 000006
【図６】
2009187314.tif 000007
【図７】
2009187314.tif 000008
【図８】
2009187314.tif 000009
【図９】
2009187314.tif 000010
【図３】
2009187314.tif 000011