(57)【特許請求の範囲】
【請求項１】
２つのコントローラで構成し、一の前記コントローラが稼動側コントローラとして動作する時は、他方のコントローラは待機側コントローラとして動作する待機冗長二重化装置において、
各前記コントローラは、それぞれ内部に複数のＣＰＵと、
メモリと、
Ｉ／Ｏボードと、
複数の前記ＣＰＵと、前記メモリと、前記Ｉ／Ｏボードとの間でデータを送受信するＩ／Ｏバスコントローラと、
前記稼動側コントローラから等値化データバスを介して前記待機側コントローラに、前記稼動側コントローラと前記待機側コントローラの装置状態を等値化するために使用する等値化データを送信する、前記Ｉ／Ｏバスコントローラから独立した等値化バスコントローラとを備え、
前記等値化データは、各演算ルーチンの識別コードと版コードを有し、
前記待機側コントローラの各前記ＣＰＵは、前記識別コードと前記版コードを確認して各前記ＣＰＵに割り当てられた演算を実行する待機冗長二重化装置。
【請求項２】
各前記コントローラは、
タイマと、
前記タイマに連動して一定周期で前記ＣＰＵに処理の開始を通知をする起動制御部とを有し、
前記稼動側コントローラの前記起動制御部から通知を受けた、前記稼動側コントローラの一の前記ＣＰＵは、前記稼動側コントローラの各前記ＣＰＵが演算に使用するデータを、前記Ｉ／Ｏボードから取得して前記メモリに、前記Ｉ／Ｏバスコントローラを介して入力した後、
前記稼動側コントローラの各前記ＣＰＵに割り当てられた演算の実行を指示し、
全ての前記ＣＰＵの演算が終了した後、全ての前記ＣＰＵの演算結果を纏めて、前記待機側コントローラに送信すべき前記等値化データを構成する請求項１に記載の待機冗長二重化装置。
【請求項３】
前記メモリ内には、
前記Ｉ／Ｏボードから入力されたデータを纏めて記録する入力データと、
いずれかの前記ＣＰＵによって実行される演算ルーチンを記録する演算ルーチンと、
個別の前記演算ルーチンで使用する、前記入力データと、前記入力データを利用して前記演算ルーチンを実行して得た演算結果と、過去の前記演算結果とを記録する演算データと、
前記Ｉ／Ｏボードに出力するデータを纏めて保存する出力データと、
前記コントローラが前記稼動側コントローラとして動作する時に、前記待機側コントローラに送信する前記等値化データを纏めて記録する等値化データ送信バッファと、
前記コントローラが前記待機側コントローラとして動作する時に、前記稼動側コントローラからの前記等値化データを交互に受信する２つの等値化データ受信バッファとを有する請求項２に記載の待機冗長二重化装置。
【請求項４】
前記メモリは、各前記演算ルーチンの属性データを有し、
前記演算ルーチンの前記属性データには、
各前記演算ルーチンを実行するＣＰＵ番号を特定するＣＰＵ情報と、
各前記演算ルーチンを前記タイマの周期の倍数の周期で起動させる起動周期情報と、
各前記演算ルーチンを前記タイマの周期の倍数に対して所定のオフセットを持たせて起動させるオフセット情報と、
各前記演算ルーチンを実行した回数を示す実行回数情報と、
前記等値化データを前記待機側コントローラに送信した回数を示す送信回数情報と、
各前記演算ルーチンが前記タイマの周期内に終了しなかった場合における次回の処理方法を示す継続処理可否情報、の中の少なくとも一つの情報を有する請求項３に記載の待機冗長二重化装置。
【請求項５】
前記稼動側コントローラの前記メモリに記録した前記属性データには、前記実行回数情報と、前記送信回数情報を有し、前記実行回数情報と、前記送信回数情報の内容を比較して、前記等値化データのデータ構成を決定する請求項４に記載の待機冗長二重化装置。
【請求項６】
前記等値化データは、前記送信回数情報を有し、
前記待機側コントローラは、２つの前記等値化データ受信バッファの中の前記等値化データの内、前記送信回数情報の進んでいる方の前記等値化データを使用して各前記ＣＰＵに割り当てられた演算を実行する請求項４に記載の待機冗長二重化装置。
【請求項７】
前記メモリは、
各前記ＣＰＵがそれぞれ固有に扱うデータを記録するＣＰＵ用メモリと、
複数の前記ＣＰＵが、共通して使用するデータを記録する共通メモリとからなる、
請求項４に記載の待機冗長二重化装置。
【請求項８】
前記等値化バスコントローラと前記等値化データバスを冗長化構成とした請求項１に記載の待機冗長二重化装置。
【請求項９】
前記一のＣＰＵは、割込制御、又は前記メモリに設けたフラグの状態を識別して各前記ＣＰＵに、各前記ＣＰＵに割り当てられた演算の開始を通知する請求項２から請求項８のいずれか１項に記載の待機冗長二重化装置。
【発明の詳細な説明】
【技術分野】
【０００１】
この発明は、一定周期で、ＣＰＵ毎に異なる演算を行うマルチＣＰＵを備えたコントローラを２重化した、待機冗長二重化装置に関するものである。
【背景技術】
【０００２】
従来、マルチＣＰＵを用いたデータの等値化コントローラとして、それぞれのＣＰＵがシステムバスコントローラを持ち、各ＣＰＵが、システムバスコントローラを介してシステムバスに接続される構成を有するものとして、特許文献１に示すような待機冗長二重化装置が提案されている。
この装置では、システムバスコントローラを使用して、稼動側ＣＰＵから待機側ＣＰＵに等値化データを送信することで、２つのコントローラ間でのデータの等値化を実現している。
【先行技術文献】
【特許文献】
【０００３】
【特許文献１】特開２００２−１４９２１２号公報（段落００２０−００２２、図１、図３）
【発明の概要】
【発明が解決しようとする課題】
【０００４】
一定周期で異なる演算を行うマルチＣＰＵを有する待機冗長二重化装置では、稼動側ＣＰＵから待機側ＣＰＵに等値化すべきデータを転送するためのバスが存在するが、特許文献１に示す等値化コントローラでは、それぞれのＣＰＵにデータの等値化を行うためのバスコントローラが存在しているため、ＣＰＵの数が増えると、その数と同一のバスコントローラが必要となる。
これにより、回路規模が増大するという課題があった。
また、等値化データの送受信とＩ／Ｏボードとのデータの送受信を、同一のシステムバスを使用する構成とするために、等値化データの送受信とＩ／Ｏボードの送受信を同時に転送できず、データ転送のレスポンスを向上できないという課題があった。【０００５】
この発明は、上記の課題を解決するためになされたものであり、ＣＰＵの数が増えても、バスコントローラの数は増えず、回路規模を抑えることが可能であり、また、等値化データのコントローラ間での送受信と、Ｉ／ＯボードとＣＰＵとのデータの送受信の同時実行を可能とする待機冗長二重化装置を提供することを目的とする。
【課題を解決するための手段】
【０００６】
本発明に係る待機冗長二重化装置は、
２つのコントローラで構成し、一の前記コントローラが稼動側コントローラとして動作する時は、他方のコントローラは待機側コントローラとして動作する待機冗長二重化装置において、
各前記コントローラは、それぞれ内部に複数のＣＰＵと、
メモリと、
Ｉ／Ｏボードと、
複数の前記ＣＰＵと、前記メモリと、前記Ｉ／Ｏボードとの間でデータを送受信するＩ／Ｏバスコントローラと、
前記稼動側コントローラから等値化データバスを介して前記待機側コントローラに、前記稼動側コントローラと前記待機側コントローラの装置状態を等値化するために使用する等値化データを送信する、前記Ｉ／Ｏバスコントローラから独立した等値化バスコントローラとを備え、
前記等値化データは、各演算ルーチンの識別コードと版コードを有し、
前記待機側コントローラの各前記ＣＰＵは、前記識別コードと前記版コードを確認して各前記ＣＰＵに割り当てられた演算を実行するものである。
【発明の効果】
【０００７】
本発明に係る待機冗長二重化装置は、
各前記コントローラは、それぞれ内部に複数のＣＰＵと、
メモリと、
Ｉ／Ｏボードと、
複数の前記ＣＰＵと、前記メモリと、前記Ｉ／Ｏボードとの間でデータを送受信するＩ／Ｏバスコントローラと、
前記稼動側コントローラから等値化データバスを介して前記待機側コントローラに、前記稼動側コントローラと前記待機側コントローラの装置状態を等値化するために使用する等値化データを送信する、前記Ｉ／Ｏバスコントローラから独立した等値化バスコントローラとを備え、
前記等値化データは、各演算ルーチンの識別コードと版コードを有し、
前記待機側コントローラの各前記ＣＰＵは、前記識別コードと前記版コードを確認して各前記ＣＰＵに割り当てられた演算を実行するものなので、
複数のＣＰＵが処理するデータの等値化処理において、ＣＰＵ毎のバスコントローラを不要とすることができる。
また、等値化データバスとＩ／Ｏバスを独立のバスとし、それぞれのバスコントローラも独立しているので、等値化データの送受信とＩ／Ｏボードの送受信の同時送信が可能となり、処理の高速化を図ることができる。
【図面の簡単な説明】
【０００８】
【図１】本発明の実施の形態１に係る待機冗長二重化装置の構成を示す図である。
【図２】本発明の実施の形態１に係る待機冗長二重化装置の割込制御の構成を示す図である。
【図３】本発明の実施の形態１に係る待機冗長二重化装置のメモリの構成を示す図である。
【図４】本発明の実施の形態１に係る待機冗長二重化装置の等値化データ送信データの構成を示す図である。
【図５】本発明の実施の形態１に係る待機冗長二重化装置の稼動側コントローラのＣＰＵａ０の動作を示すフローチャートである。
【図６】本発明の実施の形態１に係る待機冗長二重化装置の稼動側コントローラのＣＰＵａ１の動作を示すフローチャートである。
【図７】本発明の実施の形態１に係る待機冗長二重化装置の待機側コントローラのＣＰＵｂ０の動作を示すフローチャートである。
【図８】本発明の実施の形態１に係る待機冗長二重化装置の待機側コントローラのＣＰＵｂ１の動作を示すフローチャートである。
【図９】本発明の実施の形態１に係る待機冗長二重化装置の動作を示すタイミング図である。
【図１０】本発明の実施の形態１に係る待機冗長二重化装置の動作を示すタイミング図である。
【図１１】本発明の実施の形態２に係る待機冗長二重化装置の稼動側コントローラのＣＰＵａ０の動作を示すフローチャートである。
【図１２】本発明の実施の形態２に係る待機冗長二重化装置の稼動側コントローラのＣＰＵａ１の動作を示すフローチャートである。
【図１３】本発明の実施の形態３に係る待機冗長二重化装置のメモリの構成を示す図である。
【図１４】本発明の実施の形態３に係る待機冗長二重化装置の動作を示すタイミング図である。
【図１５】本発明の実施の形態３に係る待機冗長二重化装置の動作を示すタイミング図である。
【図１６】本発明の実施の形態４に係る待機冗長二重化装置のメモリの構成を示す図である。
【図１７】本発明の実施の形態５に係る待機冗長二重化装置のメモリの構成を示す図である。
【図１８】本発明の実施の形態６に係る待機冗長二重化装置の構成を示す図である。
【図１９】本発明の実施の形態６に係る待機冗長二重化装置の等値化送信データの構成を示す図である。
【図２０】本発明の実施の形態７に係る待機冗長二重化装置の構成を示す図である。
【図２１】本発明の実施の形態７に係る待機冗長二重化装置の共通メモリの構成を示す図である。
【図２２】本発明の実施の形態７に係る待機冗長二重化装置の個別メモリの構成を示す図である。
【図２３】本発明の実施の形態８に係る待機冗長二重化装置の等値化データ送信データの構成を示す図である。
【発明を実施するための形態】
【０００９】
実施の形態１．
以下、本発明の実施の形態１を図を用いて説明する。
図１は、待機冗長二重化装置１００（以下、装置１００と称す）の構成を示す図である。
図において、装置１００は、稼動側コントローラ１０ａと待機側コントローラ１０ｂと等値化データバス２０により構成される。
稼動側コントローラ１０ａの演算結果は、等値化データバス２０を介して、待機側コントローラ１０ｂへ通知される。
待機側コントローラ１０ｂは、稼動側コントローラ１０ａと同じ構成であるため、稼動側コントローラ１０ａを主として各コントローラの構成を説明する。
本明細書では、２つのコントローラを稼動側コントローラ１０ａ、待機側コントローラ１０ｂとして固定して説明しているが、実際の運用では、稼動側コントローラ１０ａも待機側コントローラ１０ｂも構成は等しく、それぞれの立場が入れ替わる場合がある。
【００１０】
稼動側コントローラ１０ａは、ＣＰＵボード１ａと複数のＩ／Ｏボード２ａとＩ／Ｏバス３ａより構成される。ＣＰＵボード１ａの演算ルーチンに必要な入力データは、Ｉ／Ｏバス３ａを介してＩ／Ｏボード２ａを読み出すことによって得られる。
また、ＣＰＵボード１ａの演算ルーチンの演算結果である出力データは、Ｉ／Ｏバス３ａを介してＩ／Ｏボード２ａに書き込まれる。
【００１１】
装置１００により制御される機器へのデータの出力は、稼動側コントローラ１０ａ上のＩ／Ｏボード２ａよりおこなわれる。
待機側コントローラ１０ｂのＩ／Ｏボード２ｂ側に出力データの書き込みをおこなっても機器へのデータ出力はＩ／Ｏボード２ｂ内で切り離されており、待機側コントローラ１０ｂから機器には出力データは伝わらない。
【００１２】
ＣＰＵボード１ａは、ＣＰＵａ０からＣＰＵａｎまでの複数個のＣＰＵと、メモリ１１ａと、等値化バスコントローラ１２ａと、Ｉ／Ｏバスコントローラ１３ａと、特許請求の範囲における起動制御部に相当する割込制御１４ａと、タイマ１５ａを備える。
ＣＰＵａ０からＣＰＵａｎまでの複数個のＣＰＵは、それぞれ異なる演算を行う。
メモリ１１ａには、各ＣＰＵが演算に使用するデータが配置される。
Ｉ／Ｏバスコントローラ１３ａは、各ＣＰＵが使用するデータの読み出し要求または書き込み要求に従い、Ｉ／Ｏバス３ａを経由してメモリ１１ａと複数のＩ／Ｏボード２ａとの間でデータの送信を行う。
【００１３】
稼動側コントローラ１０ａの等値化バスコントローラ１２ａは、稼動側コントローラ１０ａの各ＣＰＵのおこなった演算の結果等を等値化データバス２０を経由して待機側コントローラ１０ｂの等値化バスコントローラ１２ｂに送信する。
待機側コントローラ１０ｂの等値化バスコントローラ１２ｂは受信したデータを待機側コントローラ１０ｂのメモリ１１ｂに格納する。
【００１４】
また、割込制御１４ａは、ＣＰＵａ０からＣＰＵａｎまでのそれぞれのＣＰＵに対して、割込信号バス１６ａを使用して割り込みを通知する。
更に、割込制御１４ａには、タイマ１５ａが接続されており、予め設定したＣＰＵに一定間隔で割り込みを通知することができる。
【００１５】
図２は、割込制御１４ａの構成を示す図である。
割込制御１４ａには、ＣＰＵａ０用からＣＰＵａｎ用の各割込通知レジスタが用意されており、例えば、ＣＰＵａ０用の割込通知レジスタにデータをセットすると、ＣＰＵａ０への割込信号１７ａ０がＯＮとなり、ＣＰＵａ０に割り込みが通知される。
この割込通知レジスタと割込信号１７ａ０〜１７ａｎがＣＰＵ毎に存在する。
【００１６】
ＣＰＵａ０用の割込通知レジスタからＣＰＵａｎ用の割込通知レジスタは、相互に他のＣＰＵからアクセス可能となっており、あるＣＰＵから他のＣＰＵに割り込みを通知することができる。
【００１７】
図３は、メモリ１１ａおよびメモリ１１ｂ内に記録するデータの構成を示す図である。
メモリ１１ａとメモリ１１ｂは、同一の構成となるので、メモリ１１ａを用いて説明する。
入力データ１１ａ１は、Ｉ／Ｏボード２ａを読み出すことで得たデータである。
出力データ１１ａ２はＩ／Ｏボード２ａに書き込むデータである。
入力データ１１ａ１と出力データ１１ａ２は、Ｉ／Ｏボード２ａと制御対象となる機器が送受信する際に使用する形式で記録されている。
【００１８】
また、メモリ１１ａには、ＣＰＵａ０からＣＰＵａｎがそれぞれ行う演算ルーチンｐ０から演算ルーチンｐｎが格納される。
演算ルーチンｐ０から演算ルーチンｐｎは、実際には、それぞれ入力データ１１ａ１から、それぞれのＣＰＵが演算に使用するデータを演算に適した形式に変換する処理（演算１）と、実際に演算する処理（演算２）と、演算結果をＩ／Ｏボード２ａからの出力に適したデータ形式へ変換する処理（演算３）が含まれている。
【００１９】
また、メモリ１１ａには、ＣＰＵａ０からＣＰＵａｎがそれぞれ行う演算ルーチンｐ０からｐｎが使用する演算用のデータが、ＣＰＵ毎に、演算データｐｄ０から演算データｐｄｎの順で配置される。
これらの演算データの具体的な内容を、ＣＰＵａ０が使用する演算データｐｄ０を用いて説明する。
【００２０】
演算データｐｄ０は、実際には複数のデータで構成される。
これらのデータは、３種類のデータに分類される。
１種類目のデータは、入力データ１１ａ１からＣＰＵａ０用の演算ルーチンｐ０が使用するデータを取得して、演算ルーチンｐ０の演算１によって演算２に適した形式に変換したデータである。
２種類目のデータは、演算ルーチンｐ０の演算２の結果得たデータと、その過去の蓄積データ群である。
３種類目のデータは、演算ルーチンｐ０の演算２による、演算結果のデータを、演算ルーチンｐ０の演算３によって、Ｉ／Ｏボード２ａへの出力データ形式に変換したデータである。
【００２１】
更に、メモリ１１ａは、等値化データ送信バッファ１１ａ３と、等値化データ受信バッファ１１ａ４及び等値化データ受信バッファ１１ａ５を有する。
等値化データ送信バッファ１１ａ３は、このコントローラが稼動側コントローラ１０ａとして動作する際に使用される。
稼動側コントローラ１０ａの等値化バスコントローラ１２ａは、等値化データ送信バッファ１１ａ３の内容を待機側コントローラ１０ｂの等値化バスコントローラ１２ｂに送信する。
また、送信時には等値化バスコントローラ１２ａは送信データの妥当性を確認するためのチェックサムを付与して送信する。
【００２２】
等値化データ受信バッファ１１ａ４と等値化データ受信バッファ１１ａ５は、各コントローラが待機側コントローラとして動作する際に使用される。
この点について、待機側コントローラ１０ｂの動作として以下に説明する。
待機側コントローラ１０ｂの等値化バスコントローラ１２ｂは、稼動側コントローラ１０ａから受信したデータをチェックサムを用いて確認する。
そして受信データが妥当であると判断した場合は、受信データを等値化データ受信バッファ１１ｂ４又は等値化データ受信バッファ１１ｂ５に交互に格納し、不正と判断した場合は、受信データを破棄する。
【００２３】
この時、待機側の等値化バスコントローラ１２ｂがデータの受信に使用していない他方の受信バッファは、待機側のＣＰＵによってデータ処理に使用されている。
【００２４】
ここで説明を、稼動側コントローラ１０ａに戻す。
稼動側コントローラ１０ａのメモリ１１ａには、ＣＰＵａ０からＣＰＵａｎがそれぞれ行う演算ルーチンｐ０〜演算ルーチンｐｎの実行回数が、実行カウントｐｃ０〜実行カウントｐｃｎとして格納される。
このカウント値はオーバーフローしても異常とはならず、０から再カウントし直す。
【００２５】
図４は、等値化データ送信バッファ１１ａ３内に格納される送信データの構成を示す図である。
ＣＰＵの識別番号と、各ＣＰＵ用の演算ルーチンの結果を保存するために必要とされる演算データサイズと、その演算データの３つのデータを一組とし、ＣＰＵａ０の演算ルーチンｐ０からＣＰＵａｎの演算ルーチンｐｎまでの各組のデータが結合された構造となっている。
【００２６】
次に、稼動側コントローラ１０ａの動作について説明する。
図５は、稼動側コントローラ１０ａの動作を示すフローチャートである。
稼動側コントローラ１０ａのタイマ１５ａと割込制御１４ａに対して、予め、周期Ｔ間隔でＣＰＵａ０に割り込みが通知されるように設定しておく。
まず、この割り込み通知に基づき、稼動側コントローラ１０ａのＣＰＵａ０が処理を開始する。
【００２７】
最初に、ステップＳＴ１０１０において、タイマ１５ａからの周期Ｔに達したことを示す通知を解除する。
この解除により、次回のタイマ１５ａからの周期Ｔの通知に備える。
次に、ステップＳＴ１０２０において、Ｉ／Ｏボード２ａからデータの入力を行う。
ＣＰＵａ０は、Ｉ／Ｏバスコントローラ１３ａに対して、Ｉ／Ｏボード２ａからの入力データの読み出し要求を行う。
Ｉ／Ｏバスコントローラ１３ａは、読み出し要求を受けて、Ｉ／Ｏバス３ａ経由で複数のＩ／Ｏボード２ａよりデータを読み出し、メモリ１１ａに入力データ１１ａ１として格納する。
【００２８】
次に、ステップＳＴ１０３０において、ＣＰＵａ０は、他の各ＣＰＵに対して処理開始を通知する。割込制御１４ａ上のＣＰＵａ１からＣＰＵａｎに対応する各割込通知レジスタに対してそれぞれ所定の値を書き込む。
すると、割込制御１４ａは、割込信号１７ａ１から割込信号１７ａｎをＯＮにして、ＣＰＵａ１からＣＰＵａｎに対する割り込みの発生を通知する。
【００２９】
次に、ステップＳＴ１０４０において、ＣＰＵａ０は、演算ルーチンｐ０の演算を行う。
この演算ルーチンｐ０には、先に述べたように、ＣＰＵａ０が演算に使用するデータを演算に適した形式に変換する処理（演算１）と、実際に演算する処理（演算２）と、演算結果をＩ／Ｏボード２ａからの出力に適したデータ形式へ変換する処理（演算３）が含まれている。
最初に、入力データ１１ａ１内の、ＣＰＵａ０が演算に使用するデータが、演算ルーチンｐ０の演算に適した形式にデータを変換されて演算データｐｄ０として格納される。（演算１）
次に、本来の演算２の処理が動作し、演算結果が演算データｐｄ０に追加して格納される。（演算２）
更に、演算２による演算結果をＩ／Ｏボード２ａに適した形式に変換する処理（演算３）が動作し、変換後のデータが出力データ１１ａ２に格納される。
【００３０】
次に、ステップＳＴ１０５０において、演算ルーチンｐ０の実行回数を示すメモリ１１ａ上の実行カウントｐｃ０の値を１つ増加させる。
次に、ステップＳＴ１０６０において、後述するＣＰＵａ１からＣＰＵａｎまでの処理がすべて完了するまで待つ。
【００３１】
次に、ステップＳＴ１０７０において、ＣＰＵａ１からＣＰＵａｎまでの処理がすべて完了すると、各ＣＰＵの処理完了通知を解除し、次回の周期での処理完了通知に備えておく。
次に、ステップＳＴ１０８０において、演算データｐｄ０から演算データｐｄｎまでの演算１の結果のデータと演算２の結果のデータ（以下、「ｐ０演算データ」と表記する）を結合して、図４で示す送信データを等値化データ送信バッファ１１ａ３に格納する。
【００３２】
次に、ステップＳＴ１０９０において、ＣＰＵａ０は、等値化バスコントローラ１２ａに対して、等値化データ送信バッファ１１ａ３の送信データを、待機側コントローラ１０ｂに送信するよう指示する。
等値化バスコントローラ１２ａは、ＣＰＵａ０からの指示を受けて、等値化データ送信バッファ１１ａ３のデータを待機側コントローラ１０ｂに送信する。
【００３３】
次に、ＣＰＵａ０は、ステップＳＴ１０９０における等値化バスコントローラ１２ａの送信完了を待たずにステップＳＴ１１００の処理を指示する。
ステップＳＴ１１００においては、Ｉ／Ｏボード２ａへのデータの出力処理を行う。
ＣＰＵａ０は、Ｉ／Ｏバスコントローラ１３ａに対して、メモリ１１ａの出力データ１１ａ２からＩ／Ｏボード２ａへの書き込み要求を行う。
Ｉ／Ｏバスコントローラ１３ａは、この書き込み要求を受けて、Ｉ／Ｏバス３ａ経由でＩ／Ｏボード２ａに対してデータを書き込む。
【００３４】
図６は、稼動側コントローラ１０ａのＣＰＵａ１（〜ＣＰＵａｎ）の動作を示すフローチャートである。
次に、ＣＰＵａ０以外のＣＰＵａ１からＣＰＵａｎまでの動作を図６を用いて説明する。
ＣＰＵａ１からＣＰＵａｎまでの各ＣＰＵの動作は同じなので、図６では、ＣＰＵａ１を用いて説明する。
【００３５】
まず、ＣＰＵａ０からの指令に基づく処理開始通知を受けてＣＰＵａ１が処理を開始すると、ステップＳＴ１１１０において、ＣＰＵａ０からの処理開始通知を解除する。
この解除により、次回の通知に備える。
【００３６】
次に、ステップＳＴ１１２０において、ＣＰＵａ１が行う演算ルーチンｐ１の演算を行う。この演算ルーチンｐ１には、先に述べたように、ＣＰＵａ１が演算に使用するデータを演算に適した形式に変換する処理（演算１）と、実際に演算する処理（演算２）と、演算結果をＩ／Ｏボード２ａからの出力に適したデータ形式へ変換する処理（演算３）が含まれている。
【００３７】
最初に、入力データ１１ａ１の入力データの内の、ＣＰＵａ１が演算に使用するデータが、演算ルーチンｐ１の演算に適した形式にデータを変換されて演算データｐｄ１として格納される。（演算１）
次に、本来の演算２の処理が動作し、演算結果が演算データｐｄ１に追加して格納される。
更に、演算２による演算結果をＩ／Ｏボード２ａに適した形式に変換する処理（演算３）が動作し、変換後のデータが出力データ１１ａ２に格納される。
【００３８】
次に、ステップＳＴ１１３０において、演算ルーチンｐ１の実行回数を示すメモリ１１ａ上の実行カウントｐｃ１の値を１つ増加させる。
次に、ステップＳＴ１１４０において、ＣＰＵａ０に対して処理完了を通知する。
処理完了は、割込制御１４ａを介して通知しても良いし、メモリ１１ａを介して通知しても良い。
【００３９】
次に、待機側コントローラ１０ｂの動作を説明する。待機側コントローラ１０ｂ上のタイマ１５ｂと割込制御１４ｂに対しても、稼動側コントローラ１０ａと同様に、予め、周期Ｔ間隔でＣＰＵｂ０に割り込みが通知されるように設定しておく。
ただし、稼動側コントローラ１０ａと待機側コントローラ１０ｂでタイミングが同期する仕組みはなく、非同期に動作する。
【００４０】
図７は、待機側コントローラ１０ｂのＣＰＵｂ０の動作を示すフローチャートである。
割込制御１４ｂからの割り込み通知に基づき、待機側コントローラ１０ｂのＣＰＵｂ０が行う処理を図７を用いて説明する。
ステップＳＴ２０１０からステップＳＴ２０３０については、稼動側コントローラ１０ａのＣＰＵａ０が、図５のステップＳＴ１０１０からステップＳＴ１０３０で行う処理と同様である。
従って、ＣＰＵｂ０は、稼動側コントローラ１０ａのＣＰＵａ０と同様に、Ｉ／Ｏボード２ｂからデータを取得し、メモリ１１ｂに入力データ１１ｂ１を記録し、自らデータ処理をし、他のＣＰＵにも同様の処理を指示する。
【００４１】
ステップＳＴ２０３５において、ＣＰＵｂ０は、等値化バスコントローラ１２ｂが現時点で等値化データを受信しているバッファと異なる方の等値化データ受信バッファの内容を確認し、データのＣＰＵ識別番号が０の部分から、当該データサイズを取得する。
次に、そのサイズ分の演算データを取得して、メモリ１１ｂ内の演算データｐｄ０に展開する。
この時、等値化データと共通の部分（上述の演算１の結果のデータと演算２の結果のデータに相当する部分）は、等値化データで上書きされることになる。
なお、演算２の結果部分のデータは、更にその後のステップＳＴ２０４０の演算で上書きされることになる。
【００４２】
ステップＳＴ２０４０からステップＳＴ２０７０の処理及び、ステップＳＴ２１００の処理は、図５において稼動側コントローラ１０ａのＣＰＵａ０が行うステップＳＴ１０４０からステップＳＴ１０７０及び、ステップＳＴ１１００の処理と同様である。
但し、待機側コントローラ１０ｂのＩ／Ｏボード２ｂは、このコントローラが待機側コントローラとして動作している間は、Ｉ／Ｏボード２ｂ内において制御対象となる機器との接続を切り離しているので、機器に対して出力データは送信されない。
【００４３】
図８は、待機側コントローラのＣＰＵｂ１（〜ＣＰＵｂｎ）の動作を示すフローチャートである。
次に、ＣＰＵｂ０以外のＣＰＵｂ１からＣＰＵｂｎまでの動作を図８を用いて説明する。
ＣＰＵｂ１からＣＰＵｂｎまでの各ＣＰＵの動作は同じなので、図８では、ＣＰＵｂ１を用いて説明する。
【００４４】
ステップＳＴ２１１０及び、ステップＳＴ２１２０からステップＳＴ２１４０の処理は、稼動側コントローラ１０ａのＣＰＵａ１が行う、図６におけるステップＳＴ１１１０及びステップＳＴ１１２０からステップＳＴ２１４０と同様である。
図６と異なる点は、ステップＳＴ２１１０の後に、ステップＳＴ２１１５の処理が追加されている点である。
ステップＳＴ２１１５においては、図７のステップＳＴ２０３５と同様に、ＣＰＵｂ１は、等値化バスコントローラ１２ｂが現時点で等値化データを受信しているバッファと異なる方の等値化データ受信バッファの内容を確認し、データのＣＰＵ識別番号が１の部分から、当該データサイズを取得する。
そして、そのサイズ分の演算データを取得して、メモリ１１ｂ内の演算データｐｄ１に展開する。
この時、等値化データと共通の部分（上述の演算１の結果のデータと演算２の結果のデータに相当する部分）は、等値化データで上書きされることになる。
なお、演算２の結果部分のデータは、更にその後のステップＳＴ２１２０の演算で上書きされることになる。
【００４５】
図９、図１０は、これまで説明した装置１００の動作をタイミング図としてまとめたものである。
各図内のそれぞれの矢印は信号やデータの送信を示す。
図９の矢印Ａ１、Ａ２は、ぞれぞれ図１０の矢印Ａ１、Ａ２に繋がる。
２つの図を並べて見ると、稼動側コントローラ１０ａと、待機側コントローラ１０ｂのタイミングを視覚的に理解できる。
本発明の実施の形態１に係る待機冗長二重化装置１００によれば、複数のＣＰＵが処理するデータの等値化処理において、ＣＰＵ毎のバスコントローラを不要とすることができる。
また、等値化データバス２０とＩ／Ｏバス３ａ、３ｂを独立のバスとし、それぞれのＩ／Ｏバスコントローラも独立しているので、等値化データの送受信とＩ／Ｏボードの送受信の同時送信が可能となり、処理の高速化を図ることができる。
【００４６】
実施の形態２．
以下、本発明の実施の形態２を図を用いて実施の形態１と異なる部分を中心に説明する。
実施の形態１では、各ＣＰＵへの処理の開始の通知として割込制御１４ａ、１４ｂを使用していた。
本実施の形態では、割り込みを使用せず、タイマにフラグを配置し、フラグのＯＮ／ＯＦＦを割り込みの通知信号として代用することとした。
【００４７】
図１１は、本実施の形態に係る稼動側コントローラのＣＰＵａ０の動作を示すフローチャートである。
実施の形態１のＣＰＵａ０の動作を示す図５と、本実施の形態のＣＰＵａ０の動作を示す図１１の差異は、まず、図５では、処理開始の割り込みが発生してから処理を開始している点である。
次に、図１１においては、ステップＳＴ１００５をループさせて処理開始フラグを監視している点である。
本実施の形態では、ＣＰＵａ０がフラグの監視をするので、独立した割込制御は必要ない。
ステップＳＴ１００５において、ＣＰＵａ０が、処理開始を示すフラグがＯＮになったことを確認すると、ステップＳＴ１０１０においてフラグを解除し、ステップＳＴ１０２０においてＩ／Ｏボードからのデータ入力処理を行う。
次に、ステップＳＴ１０３０において、タイマ内または、メモリ領域に備えた、他のＣＰＵに処理の開始を指示する各フラグをＯＮにする。
その他の処理は実施の形態１と同様である。
【００４８】
図１２は、本実施の形態に係る稼動側コントローラのＣＰＵａ１（〜ａｎ）の動作を示すフローチャートである。
実施の形態１のＣＰＵａ１の動作を示す図６と、本実施の形態のＣＰＵａ１の動作を示す図１２の差異は、まず、図６では、処理開始の割り込みが発生してから処理を開始している点である。
次に、図１２においては、ステップＳＴ１１０５をループさせて処理開始フラグを監視している点である。
本実施の形態では、ＣＰＵａ１がフラグの監視をするので、独立した割込制御は必要ない。
ステップＳＴ１１０５において、ＣＰＵａ１が、処理開始を示すフラグがＯＮになったことを確認すると、ステップＳＴ１１１０においてフラグを解除し、ステップＳＴ１１２０において演算ｐ１を行う。
その他の処理は実施の形態１と同様である。
待機側コントローラ１０ｂのフローチャートは明示しないが、同様にフラグを用いて処理を実現可能である。
【００４９】
本発明の実施の形態２に係る待機冗長二重化装置によれば、装置内に配置するフラグのＯＮ／ＯＦＦを割込通知信号の代用とすることで、特別な割込制御の必要がないシンプルな待機冗長二重化装置を提供できる。
【００５０】
実施の形態３．
以下、本発明の実施の形態３を図を用いて実施の形態２と異なる部分を中心に説明する。
図１３は、本実施の形態に係る稼動側コントローラのメモリ３１１ａ内に記録するデータの構成を示す図である。
本実施の形態では、ＣＰＵ数を超える演算データと演算ルーチンを準備する。
そして、各ＣＰＵに対して複数の演算ルーチンを割り当てる。
図において、「ｐ」の後に続く数字が、当該演算ルーチンを実行するＣＰＵ番号であり、ハイフンに続く数字が、その番号のＣＰＵに割り当てられた演算ルーチンの連番である。
【００５１】
図１４、１５は、本実施の形態に係る待機冗長二重化装置の各コントローラの動作状況を示すタイミング図である。
各図内のそれぞれの矢印は信号やデータの送信を示す。
図１４の矢印Ａ１、Ａ２は、ぞれぞれ図１５の矢印Ａ１、Ａ２に繋がる。
２つの図を並べて見ると、稼動側コントローラと、待機側コントローラのタイミングを視覚的に理解できる。
【００５２】
メモリ３１１ａを上記のように構成することにより、図１４、図１５に示すように、稼動側コントローラ上のＣＰＵａ０において演算ルーチンｐ０−１から演算ルーチンｐ０−ｘの複数の演算を可能とし、同様にＣＰＵａ１からＣＰＵａｎにおいて演算ルーチンｐ１−１から演算ルーチンｐｎ−ｚの複数の演算を実行できる。
【００５３】
本実施の形態に係る待機冗長二重化装置によれば、メモリ３１１ａの構成として、演算ルーチンを実行するＣＰＵ番号の属性データを設けることで、マルチＣＰＵ環境において、演算ルーチンに対して予め各ＣＰＵを振り分けて演算をさせることができる。
【００５４】
実施の形態４．
以下、本発明の実施の形態４を図を用いて実施の形態３と異なる部分を中心に説明する。
図１６は、稼動側コントローラのメモリ４１１ａ内に記録するデータの構成の一部分を示す図である。  
各演算ルーチンに対して、属性データとして実行ＣＰＵ番号、起動周期設定、起動オフセット設定、実行カウント及び送信カウントの設定項目を設けている。
【００５５】
起動周期設定項目を用いることで、周期Ｔの倍数の周期で実行する演算ルーチンの実現を可能とする。
また、周期Ｔの倍数の周期で実行する演算ルーチンに対して、起動オフセット設定をすることができる。
起動オフセット設定は、演算ルーチンを実行するタイミングを周期Ｔを１として小数で設定する。
例えば、周期Ｔの４倍の周期で実行する演算ルーチンに対して、起動オフセットを０．２５とすると、周期Ｔの４倍周期かつ、タイマに対して１／４周期分遅れて当該演算ルーチンを実行する。
【００５６】
本実施の形態では、上述のように周期Ｔの倍数の周期で動作する演算ルーチンが存在する。演算ルーチンの中には、異なった周期で動作するものが混在することとなる。
一方、等値化データは周期Ｔで送信されるため、周期Ｔ単位では動作しない演算ルーチンのデータは送信する必要はない。
よって、これらの演算ルーチンのデータの再送信を避けるため、実行カウントと送信カウントをメモリ４１１ａ内に追加して利用する。
【００５７】
稼動側コントローラのＣＰＵａ０が行う等値化送信データの作成時において、送信カウントと実行カウントを比較し、二つのカウントの値が異なる場合は、その演算ルーチンの演算データは等値化データとして送信すべきデータと判断して送信バッファに送信する。
もし、送信カウントと実行カウントを比較して、これらが一致する場合は、既にデータの送信は行われていて、当該演算ルーチンの新たな実行が行われていないと判断し、送信バッファへの送信はしない。
なお、送信カウントは、送信バッファへの送信処理完了後に実行カウントの値に書き換えるものとする。
【００５８】
本実施の形態に係る待機冗長二重化装置によれば、メモリ４１１ａ内に起動周期設定と起動オフセット設定を設けることで、周期Ｔの倍数の周期で、更に必要に応じて、演算ルーチン毎に起動オフセットを設定して演算を実行できる。
また、送信カウントを設け、実行カウントと比較することで、不要な等値化データの送信が削減され、等値化データの送受信時間を短くすることができる。
【００５９】
実施の形態５．
以下、本発明の実施の形態５を図を用いて実施の形態４と異なる部分を中心に説明する。
図１７は、稼動側コントローラのメモリ５１１ａ内に記録するデータの構成の一部分を示す図である。
各ＣＰＵが実行する演算ルーチンに対して、起動継続可否設定を追加する。
起動継続可否設定が可の場合、演算が設定周期Ｔで完了しなかった場合でも、演算処理を一時保留とし、データの入出力をおこない、次の周期で動作を再開して継続する仕組みを追加する。
【００６０】
起動継続可否設定の追加により、演算処理を保留した演算ルーチンは、途中でデータの入出力が行われるが、この入出力動作が支障をきたさない場合、一定周期Ｔ内で動作する演算ルーチンと一定周期Ｔ内で動作しない演算ルーチンの共存が可能となる。
本実施の形態に係る待機冗長二重化装置によれば、処理時間が大きく異なる処理ルーチンが一部に存在する場合でも、全体の処理に影響を及ぼさない待機冗長二重化装置を提供できる。
【００６１】
実施の形態６．
以下、本発明の実施の形態６を図を用いて実施の形態１と異なる部分を中心に説明する。
図１８は、待機冗長二重化装置６００（以下、装置６００と称す）の構成を示す図である。
稼動側コントローラ６１０ａのＣＰＵボード６０１ａには、２つの等値化バスコントローラ１２ａ１、１２ａ２を備えている。
また、待機側コントローラ６１０ｂのＣＰＵボード６０１ｂには、２つの等値化バスコントローラ１２ｂ１、１２ｂ２を備えている。
そして、等値化バスコントローラ１２ａ１と等値化バスコントローラ１２ｂ１を等値化データバス２０で接続し、等値化バスコントローラ１２ａ２と等値化バスコントローラ１２ｂ２を等値化データバス２１で接続している。
等値化バスコントローラのセットと、等値化データバス２０、２１をそれぞれ二重化した構成として装置６００の信頼性を高めている。
【００６２】
次に、装置６００における、二重化された等値化データバスを使用する送信データの授受方法を説明する。
図１９は、稼動側コントローラ６１０ａから待機側コントローラ６１０ｂに送信される等値化送信データの構成の一部を示す図である。
【００６３】
送信データには、各演算ルーチンに対する実行カウントｐｃ０から実行カウントｐｃｎを連番として有している。
稼動側コントローラのＣＰＵａ０は、図５のステップＳＴ１０９０での等値化データの送信開始にあたって、図１９に示した送信データを、等値化バスコントローラ１２ａ１と等値化バスコントローラ１２ａ２の２つのコントローラに対して送信する。
待機側コントローラの各ＣＰＵは、図７のステップＳＴ２０３５または、図８のステップＳＴ２１１５における等値化受信データの展開時において、等値化バスコントローラ１２ａ１より等値化バスコントローラ１２ｂ２が受信した等値化受信データの実行カウントと、等値化バスコントローラ１２ａ２より等値化バスコントローラ１２ｂ２が受信した等値化受信データの実行カウントを比較し、カウントが進んでいる方の演算データをメモリ１１ｂに展開することとする。
【００６４】
本発明の実施の形態６に係る待機冗長二重化装置６００によれば、等値化バスコントローラと、等値化データバスを二重化し、送受信するデータにカウントを付けることにより、いずれかのルートに故障が発生しても、もう一方の系統を使用してデータの等値化を図ることができる。
【００６５】
実施の形態７．
以下、本発明の実施の形態７を図を用いて実施の形態１と異なる部分を中心に説明する。
図２０は、待機冗長二重化装置７００（以下、装置７００と称す）の構成を示す図である。
ＣＰＵボード７０１ａ上のＣＰＵａ０からＣＰＵａｎに対して、それぞれ個別にメモリａ０からメモリａｎを追加する。
同様にＣＰＵボード７０１ｂ上のＣＰＵｂ０からＣＰＵｂｎに対して、それぞれ個別にメモリｂ０からメモリｂｎを追加する。
【００６６】
図２１は、このときの各ＣＰＵが共通に使用するメモリ７１１ａ及びメモリ７１１ｂ内のデータ構成を示す図である。
メモリ７１１ａには、ＣＰＵａ０からＣＰＵａｎが共通に使用するデータを配置する。
同様に、メモリ７１１ｂには、ＣＰＵｂ０からＣＰＵｂｎが共通に使用するデータを配置する。
図２２は、ＣＰＵ単位で個別に追加するメモリａ０からメモリａｎ、メモリｂ０からメモリｂｎの構成を示す図である。
ＣＰＵａ０からＣＰＵａｎ、ＣＰＵｂ０からＣＰＵｂｎがそれぞれ個別に使用するデータをのみを配置する。
【００６７】
本発明の実施の形態７に係る待機冗長二重化装置７００によれば、メモリ７１１ａまたはメモリ７１１ｂは共通的に使用するデータのみの構成となり、メモリ７１１ａ、メモリ７１１ｂへのアクセス頻度を抑制できる。
これにより、他のＣＰＵからのアクセスの集中により、演算が停止する頻度が減少するので、装置７００の演算性能を向上することができる。
【００６８】
実施の形態８．
以下、本発明の実施の形態８を図を用いて実施の形態１と異なる部分を中心に説明する。
図２３は、実施の形態８の等値化送信データの構成を示す図である。
送信データに各演算ルーチンの識別コードと版コードを追加する。
待機側コントローラの各ＣＰＵは、図７のステップＳＴ２０３５または図８のステップＳＴ２１１５にて、等値化データを展開するときに、受信した等値化データ内の各演算ルーチンの識別コードと版コードを、待機側コントローラ側でもつ各演算ルーチンの識別コードと版コードと比較する。
これらのコードが不一致の場合は、データの展開処理を実施せず、異常をコントローラの使用者に通知する。
【００６９】
本発明の実施の形態８に係る待機冗長二重化装置によれば、稼動側コントローラと待機側コントローラの間で、万一演算ルーチンが異なる状態となっても、誤ったデータで装置全体が等値化することを防止することができ、待機冗長二重化装置の信頼性を向上できる。
【００７０】
尚、本発明は、その発明の範囲内において、各実施の形態を自由に組み合わせたり、各実施の形態を適宜、変形、省略することが可能である。
【図１】
0005908068.tif 000002
【図２】
0005908068.tif 000003
【図３】
0005908068.tif 000004
【図４】
0005908068.tif 000005
【図５】
0005908068.tif 000006
【図６】
0005908068.tif 000007
【図７】
0005908068.tif 000008
【図８】
0005908068.tif 000009
【図９】
0005908068.tif 000010
【図１０】
0005908068.tif 000011
【図１１】
0005908068.tif 000012
【図１２】
0005908068.tif 000013
【図１３】
0005908068.tif 000014
【図１４】
0005908068.tif 000015
【図１５】
0005908068.tif 000016
【図１６】
0005908068.tif 000017
【図１７】
0005908068.tif 000018
【図１８】
0005908068.tif 000019
【図１９】
0005908068.tif 000020
【図２０】
0005908068.tif 000021
【図２１】
0005908068.tif 000022
【図２２】
0005908068.tif 000023
【図２３】
0005908068.tif 000024