(57)【要約】【課題】制御装置の切り替えを速やかに行うことができる冗長化システムおよび冗長化方法を提供する。【解決手段】本発明による冗長化システム（１０００）は、制御対象の制御に関する演算処理を実行する通常運転用の制御装置（１１００）と、通常運転用の制御装置による演算処理と並行して、通常運転用の制御装置による演算処理と同等の演算処理を実行する待機用の制御装置（１２００）と、通常運転用および待機用の制御装置によって共有される記憶装置としての共有メモリ（１３００）と、を備え、待機用の制御装置は、通常運転用の制御装置の生存を確認できない場合、共有メモリに格納された演算結果のうち、待機用の制御装置により格納された演算結果を共有メモリから出力させる。【選択図】図１
2014106862.tif 000002
【特許請求の範囲】
【請求項１】
制御対象の制御に関する演算処理を実行する第１制御装置と、
前記第１制御装置による演算処理と並行して、前記第１制御装置による演算処理と同等の演算処理を実行する第２制御装置と、
前記第１制御装置および前記第２制御装置によって共有される記憶装置と、
を備え、
前記記憶装置は、
前記第１制御装置および前記第２制御装置による各演算処理の演算結果を格納するための演算結果記憶領域と、
前記第１制御装置の生存を確認するためのデータを格納するための生存確認データ記憶領域と、
を有し、
前記第２制御装置は、前記生存確認データ記憶領域に格納されたデータを参照して前記第１制御装置の生存確認を行い、前記第１制御装置の生存を確認できない場合、前記演算結果記憶領域に格納された演算結果のうち、前記第２制御装置により格納された演算結果を前記記憶装置から出力させる、冗長化システム。
【請求項２】
前記第１制御装置は、該第１制御装置の生存を確認するためのデータとして、所定の数値範囲で巡回する数値データを生成して前記生存確認データ記憶領域に格納する、請求項１に記載の冗長化システム。
【請求項３】
前記第２制御装置は、前記生存確認データ記憶領域に格納された数値データを参照し、該数値データに所定の変化がない場合、前記第１制御装置の生存を確認できないと判定する、請求項２に記載の冗長化システム。
【請求項４】
前記第２制御装置は、前記第１制御装置による演算処理の演算結果と前記第２制御装置による演算処理の演算結果とが整合しているか否かを判定し、前記演算結果が整合していない場合、警報を発する、請求項１から３の何れか１項に記載の冗長化システム。
【請求項５】
前記第１制御装置は、該第１制御装置による演算処理の演算結果のチェックサム値を演算して前記記憶装置に格納し、
前記第２制御装置は、該第２制御装置による演算処理の演算結果のチェックサム値を演算し、該演算により得られたチェックサム値と前記第１制御装置により前記記憶装置に格納されたチェックサム値とを比較することにより、前記第１制御装置による演算処理の演算結果と前記第２制御装置による演算処理の演算結果とが整合しているか否かを判定する、請求項４に記載の冗長化システム。
【請求項６】
前記第２制御装置は、前記第１制御装置による演算処理の演算結果と前記第２制御装置による演算処理の演算結果とが整合しており、且つ、前記第１制御装置の生存を確認できない場合、前記第２制御装置により前記演算結果記憶領域に格納された演算結果を前記記憶装置から出力させる、請求項４または５に記載の冗長化システム。
【請求項７】
前記第１制御装置は、通常運転用の制御装置であり、前記第２制御装置は、待機用の制御装置である、請求項１から６の何れか１項に記載の冗長化システム。
【請求項８】
制御対象の制御に関する演算処理を実行する第１制御装置と、前記第１制御装置による演算処理と並行して、前記第１制御装置による演算処理と同等の演算処理を実行する第２制御装置と、前記第１制御装置および前記第２制御装置によって共有される記憶装置と、を備えた冗長化システムの冗長化方法であって、
前記記憶装置が、前記第１制御装置および前記第２制御装置による各演算処理の演算結果を格納するための演算結果記憶領域と、前記第１制御装置の生存を確認するためのデータを格納するための生存確認データ記憶領域と、を有し、
前記第２制御装置が、前記生存確認データ記憶領域に格納されたデータを参照して前記第１制御装置の生存確認を行う段階と、
前記第２制御装置が、前記第１制御装置の生存を確認できない場合、前記演算結果記憶領域に格納された演算結果のうち、前記第２制御装置により格納された演算結果を前記記憶装置から出力させる段階と、
を含む冗長化方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、冗長化システムおよび冗長化方法に関し、例えば、超電導電磁石を超電導状態に保持するための冷却システム等で用いられる制御装置の冗長構成に関する。
【背景技術】
【０００２】
超電導電磁石を構成する超電導コイルの温度は、冷却システムにより転移温度以下に維持されている。この種の冷却システムは、冷媒として液体ヘリウムを用いており、ヘリウムを液化するための液化装置を備えている。この液化装置により生成された液体ヘリウムの循環流量は、超電導電磁石の温度に応じて制御装置により制御されている。
【０００３】
上述の冷却システムは無停止運転をする必要がある。このため、冷却システムにおける液体ヘリウムの循環流量を制御・管理するための制御装置として冗長化システムが用いられている。
【０００４】
図７に、上述の冷却システムにおける液体ヘリウムの循環流量を制御・管理するための制御装置に適用される従来の冗長化システムの構成例を示す。同図（ａ）から（ｃ）に示す冗長化システム５００は、冷却システムにおける液体ヘリウムの循環流量を制御するための制御データを演算する制御装置５０１，５０２と、上記制御データを格納するための共有メモリ５０３とを備えて構成されている。ここで、制御装置５０１は、故障が発生していない場合に通常的に運転される制御装置である。制御装置５０２は、制御装置５０１が故障したときに制御装置５０１に代わって運転される制御装置である。制御装置５０２は、制御装置５０１が正常運転している間は待機状態となっている。
【０００５】
通常運転時は、図７（ａ）に示すように、制御装置５０１が、超電導磁石を構成する超電導コイルの温度に関する情報を含む入力データに基づいて、この超電導コイルの温度を転移温度以下に保つために必要とされる液体ヘリウムの循環流量の制御に必要な演算処理を実行し、その演算結果として得られる制御データを共有メモリ５０３に格納する。この制御データが共有メモリ５０３から出力データとして出力され、この出力データに基づいて、被冷却体である超電導電磁石の超電導コイルの温度が転移温度以下となるように、液体ヘリウムの循環流量を調整するためのバルブの開度が制御される。
【０００６】
ここで、通常運転用の制御装置５０１が故障すると、この制御装置５０１に代わって、待機用の制御装置５０２が制御に必要な演算処理を実行する。このとき、図７（ｂ）に示すように、待機用の制御装置５０２は、故障前の通常運転用の制御装置５０１による演算結果を共有メモリ５０３から読み出し、この演算結果を反映させて演算処理を実行することにより制御の連続性を保つ。そして、図７（ｃ）に示すように、待機用の制御装置５０２は、自身が実行した演算処理の演算結果を共有メモリ５０３に格納する。
【０００７】
通常運転用の制御装置５０１が故障した後は、待機用の制御装置５０２によって共有メモリ５０３に格納された演算結果に基づいて、液体ヘリウムの循環流量を調整するためのバルブの開度が制御される。このように、通常運転用の制御装置５０１が故障すると、この通常運転用の制御装置５０１から待機用の制御装置５０２への切り替えが行われる。
【先行技術文献】
【特許文献】
【０００８】
【特許文献１】特開平６−１５２５７０号公報
【特許文献２】特開２０１１−１８７０２３号公報
【特許文献３】特開２０１０−１４６２３５号公報
【発明の概要】
【発明が解決しようとする課題】
【０００９】
しかしながら、上述の従来技術によれば、通常運転用の制御装置５０１から待機用の制御装置５０２に切り替える際、制御の連続性を保つために、待機用の制御装置５０２は共有メモリ５０３から通常運転用の制御装置５０１の演算結果を読み出し、その後の演算処理に反映させる必要がある。このため、制御装置の切り替えに時間を要していた。
【００１０】
図７に示す例のほか、冗長化構成に関する従来技術として、例えば、特許文献１、特許文献２、特許文献３に開示された技術が知られている。しかしながら、これらの特許文献の技術によれば、装置を切り替える際のデータ転送時間を短縮することはできるものの、依然として、データ転送時間を必要とする。
【００１１】
本発明は、制御装置の切り替えを速やかに行うことができる冗長化システムおよび冗長化方法を提供することを目的とする。
【課題を解決するための手段】
【００１２】
本発明の一態様による冗長化システムは、制御対象の制御に関する演算処理を実行する第１制御装置と、前記第１制御装置による演算処理と並行して、前記第１制御装置による演算処理と同等の演算処理を実行する第２制御装置と、前記第１制御装置および前記第２制御装置によって共有される記憶装置と、を備え、前記記憶装置は、前記第１制御装置および前記第２制御装置による各演算処理の演算結果を格納するための演算結果記憶領域と、前記第１制御装置の生存を確認するためのデータを格納するための生存確認データ記憶領域と、を有し、前記第２制御装置は、前記生存確認データ記憶領域に格納されたデータを参照して前記第１制御装置の生存確認を行い、前記第１制御装置の生存を確認できない場合、前記演算結果記憶領域に格納された演算結果のうち、前記第２制御装置により格納された演算結果を前記記憶装置から出力させる、冗長化システムの構成を有する。
【００１３】
前記冗長化システムにおいて、例えば、前記第１制御装置は、該第１制御装置の生存を確認するためのデータとして、所定の数値範囲で巡回する数値データを生成して前記生存確認データ記憶領域に格納する。
前記冗長化システムにおいて、例えば、前記第２制御装置は、前記生存確認データ記憶領域に格納された数値データを参照し、該数値データに所定の変化がない場合、前記第１制御装置の生存を確認できないと判定する。
前記冗長化システムにおいて、例えば、前記第２制御装置は、前記第１制御装置による演算処理の演算結果と前記第２制御装置による演算処理の演算結果とが整合しているか否かを判定し、前記演算結果が整合していない場合、警報を発する。
【００１４】
前記冗長化システムにおいて、例えば、前記第１制御装置は、該第１制御装置による演算処理の演算結果のチェックサム値を演算して前記記憶装置に格納し、前記第２制御装置は、該第２制御装置による演算処理の演算結果のチェックサム値を演算し、該演算により得られたチェックサム値と前記第１制御装置により前記記憶装置に格納されたチェックサム値とを比較することにより、前記第１制御装置による演算処理の演算結果と前記第２制御装置による演算処理の演算結果とが整合しているか否かを判定する。
前記冗長化システムにおいて、例えば、前記第２制御装置は、前記第１制御装置による演算処理の演算結果と前記第２制御装置による演算処理の演算結果とが整合しており、且つ、前記第１制御装置の生存を確認できない場合、前記第２制御装置により前記演算結果記憶領域に格納された演算結果を前記記憶装置から出力させる。
前記冗長化システムにおいて、例えば、前記第１制御装置は、通常運転用の制御装置であり、前記第２制御装置は、待機用の制御装置である。
【００１５】
本発明の一態様による冗長化方法は、制御対象の制御に関する演算処理を実行する第１制御装置と、前記第１制御装置による演算処理と並行して、前記第１制御装置による演算処理と同等の演算処理を実行する第２制御装置と、前記第１制御装置および前記第２制御装置によって共有される記憶装置と、を備えた冗長化システムの冗長化方法であって、前記記憶装置が、前記第１制御装置および前記第２制御装置による各演算処理の演算結果を格納するための演算結果記憶領域と、前記第１制御装置の生存を確認するためのデータを格納するための生存確認データ記憶領域と、を有し、前記第２制御装置が、前記生存確認データ記憶領域に格納されたデータを参照して前記第１制御装置の生存確認を行う段階と、前記第２制御装置が、前記第１制御装置の生存を確認できない場合、前記演算結果記憶領域に格納された演算結果のうち、前記第２制御装置により格納された演算結果を前記記憶装置から出力させる段階と、を含む冗長化方法の構成を有する。
【発明の効果】
【００１６】
本発明によれば、制御装置を切り替える際に演算結果の転送を省略することができる。従って、制御装置の切り替えを速やかに行うことが可能になる。
【図面の簡単な説明】
【００１７】
【図１】本発明の実施形態による冗長化システムの構成の一例を示すブロック図である。
【図２】本発明の実施形態による冗長化システムの動作（整合判定）の流れを示すフローチャートである。
【図３】本発明の実施形態による冗長化システムの動作（整合判定）の流れを補足するためのフローチャートである。
【図４】本発明の実施形態による冗長化システムの通常運転用の制御装置における動作の流れを示すフローチャートである。
【図５】本発明の実施形態による冗長化システムの待機用の制御装置における動作の流れを示すフローチャートである。
【図６】本発明の実施形態による冗長化システムの動作を従来技術と対比して説明するための説明図である。
【図７】従来技術による冗長化システムの構成例を示す図である。
【発明を実施するための形態】
【００１８】
以下、図面を参照して、本発明の実施形態について、超電導電磁石を超電導状態に保持するための冷却システムを制御する制御装置に関する冗長化システムを例として説明する。ただし、本発明は、このような例に限定されず、任意のシステムの制御装置に適用することができる。
【００１９】
[構成の説明]
図１は、本発明の実施形態による冗長化システム１０００の構成の一例を示すブロック図である。同図に示すように、本実施形態による冗長化システム１０００は、通常運転用の制御装置１１００（第１制御装置）と、待機用の制御装置１２００（第２制御装置）と、共有メモリ１３００（記憶装置）とを備えて構成される。ここで、通常運転用の制御装置１１００は、入力データＤＩＮに基づいて制御対象の制御に関する演算処理を実行して演算結果ＲＡを出力するものであり、故障が発生しない限り通常的に運転される。本実施形態では、制御対象は、例えば、前述の超電導電磁石を超電導状態に保持するための冷却システムにおける液体ヘリウムの循環流量を規定するバルブの開度である。通常運転用の制御装置１１００は、そのバルブの開度に関する制御データを演算する。
【００２０】
待機用の制御装置１２００は、通常運転用の制御装置１１００による演算処理と並行して、入力データＤＩＮに基づいて制御装置１１００による演算処理と同等の演算処理を実行して演算結果ＲＢを出力するものである。待機用の制御装置１２００は、通常運転用の制御装置１１００が故障したときに、この制御装置１１００に代わって運転される。通常運転用の制御装置１１００および待機用の制御装置１２００は、それぞれ、例えば制御用のＣＰＵ(Central Processing Unit)であるが、この例に限定されない。
【００２１】
共有メモリ１３００は、通常運転用の制御装置１１００および待機用の制御装置１２００によって共有される記憶装置である。共有メモリ１３００には、通常運転用の制御装置１１００の演算結果ＲＡと待機用の制御装置１２００の演算結果ＲＢが格納される。共有メモリ１３００は、例えばスタティックランダムアクセスメモリ（ＳＲＡＭ：Static Random Access Memory）から構成されるが、この例に限定されず、例えば不揮発性メモリ等、任意の記憶デバイスから構成することができる。
【００２２】
本実施形態では、共有メモリ１３００は、生存確認データ記憶領域１３１１，１３１２、チェックサム記憶領域１３２１、演算結果記憶領域１３３１，１３３２、選択部１３４０を有する。ここで、演算結果記憶領域１３３１は、通常運転用の制御装置１１００による演算処理の演算結果ＲＡを格納するためのものである。演算結果記憶領域１３３２は、待機用の制御装置１２００による演算処理の演算結果ＲＢを格納するためのものである。
【００２３】
生存確認データ記憶領域１３１１は、通常運転用の制御装置１１００の生存を確認するためのデータを格納するものである。生存確認データ記憶領域１３１２は、待機用の制御装置１２００の生存を確認するためのデータを格納するものである。本実施形態では、「生存」なる用語は、通常運転用の制御装置１１００または待機用の制御装置１２００が正常な運転状態にあることを意味する。本実施形態では、生存確認用のデータが正常に生成されれば、そのデータを生成した制御装置は正常な運転状態にあるものと見なす。
【００２４】
通常運転用の制御装置１１００は、生存を確認するためのデータとして、「１」から「１００」までの数値範囲（所定の数値範囲）で巡回する数値データを制御サイクルごとに生成して生存確認データ記憶領域１３１１に格納する。制御装置１２００も同様に、生存を確認するためのデータとして「１」から「１００」までの数値範囲で巡回する数値データを制御サイクルごとに生成して生存確認データ記憶領域１３１２に格納する。生存確認データ記憶領域１３１１，１３１２に格納されたデータは制御サイクルごとに更新される。生存を確認するためのデータは、例えばカウンタを用いて生成することができる。
なお、本実施形態では、生存を確認するためのデータの数値範囲を「１」から「１００」までとするが、この例に限定されず、その数値範囲は任意である。
【００２５】
本実施形態では、後述するように、待機用の制御装置１２００は、生存確認データ記憶領域１３１１に格納されたデータを参照して通常運転用の制御装置１１００の生存確認を行い、制御装置１１００の生存を確認できない場合、共有メモリ１３００の演算結果記憶領域１３３１，１３３２に格納された演算結果のうち、待機用の制御装置１２００により演算結果記憶領域１３３２に格納された演算結果ＲＢを共有メモリ１３００から出力データＤＯＵＴとして出力させる。また、通常運転用の制御装置１１００は、生存確認データ記憶領域１３１２に格納されたデータを参照して待機用の制御装置１２００の生存確認を行い、制御装置１２００の生存を確認できない場合、警報を発生させる。
【００２６】
チェックサム記憶領域１３２１は、通常運転用の制御装置１１００の演算結果ＲＡのチェックサム値ＣＳＡを格納するためのものである。このチェックサム値ＣＳＡは、待機用の制御装置１２００において、演算結果ＲＢのチェックサム値ＣＳＢと比較することにより、制御装置１１００の演算結果ＲＡと制御装置１２００の演算結果ＲＢとが整合（一致）しているか否かの判定（以下、「整合判定」と称す。）を行う際に用いられる。
なお、本実施形態では、共有メモリ１３００は、待機用の制御装置１２００のチェックサム値ＣＳＢを格納するためのチェックサム記憶領域を有しておらず、待機用の制御装置１２００のチェックサム値ＣＳＢは、この制御装置１２００の記憶部（例えば、ダイナミックランダムアクセスメモリ）に保持される。
【００２７】
ただし、例えば、制御装置１１００を待機用とし、制御装置１２００を通常運転用として使用する等のように、制御装置の役割を切り替える運用を行う場合には、上述のチェックサム記憶領域１３２１に加えて、共有メモリ１３００に、制御装置１２００の演算結果ＲＢのチェックサム値ＣＳＢを格納するためのチェックサム記憶領域１３２２（図示なし）を増設すればよい。ここで、制御装置１１００を待機用とし、制御装置１２００を通常運転用として使用する場合、上述の増設されたチェックサム記憶領域１３２２（図示なし）に制御装置１２００により格納されたチェックサム値ＣＳＢは、制御装置１１００において、演算結果ＲＡのチェックサム値ＣＳＡと比較することにより、演算結果ＲＡと演算結果ＲＢとが整合しているか否かの判定を行う際に用いられる。この場合、制御装置１１００の演算結果ＲＡのチェックサム値ＣＳＡを格納するためのチェックサム記憶領域１３２１は使用されず、チェックサム値ＣＳＡは例えば制御装置１１００の記憶部（例えば、ダイナミックランダムアクセスメモリ）に保持される。
【００２８】
選択部１３４０は、演算結果記憶領域１３３１および演算結果記憶領域１３３２を択一的に選択して、演算結果記憶領域１３３１に格納された演算結果ＲＡまたは演算結果記憶領域１３３２に格納された演算結果ＲＢの何れかを共有メモリ１３００から出力するものである。ただし、この例に限定されず、演算結果記憶領域１３３１と演算結果記憶領域１３３２を異なるアドレス空間に割り付け、アドレスにより演算結果記憶領域１３３１および演算結果記憶領域１３３２を択一的に選択するものとしてもよい。
【００２９】
[動作の説明]
次に、図２から図５に示すフローに沿って、図１に示す冗長化システム１０００の動作を説明する。
ここで、図２は、本実施形態による冗長化システム１０００の動作（整合判定）の流れを示すフローチャートである。図３は、本実施形態による冗長化システム１０００の動作（整合判定）の流れを補足するためのフローチャートである。図４は、本実施形態による冗長化システム１０００の通常運転用の制御装置１１００における動作の流れを示すフローチャートである。図５は、本実施形態による冗長化システム１０００の待機用の制御装置１２００における動作の流れを示すフローチャートである。
【００３０】
冗長化システム１０００を構成する通常運転用の制御装置１１００と待機用の制御装置１２００は、通常時は並列運転され、同一の入力データＤＩＮに基づいて同一の制御対象の制御に関する同様の演算処理を実行している。なお、同一の入力データＤＩＮに対して同一の演算結果を得ることができる限度において、待機用の制御装置１２００による演算処理は、通常運転用の制御装置１１００による演算処理と同一である必要はなく、等価な処理で足りる。本実施形態では、説明の簡略化のため、待機用の制御装置１２００による演算処理は、通常運転用の制御装置１１００による演算処理と同一であるものとする。
【００３１】
本実施形態では、通常運転用の制御装置１１００から待機用の制御装置１２００への切り替えは、通常運転用の制御装置１１００の演算結果ＲＡと待機用の制御装置１２００の演算結果ＲＢとが整合（一致）していることを条件として実施される。換言すれば、通常運転用の制御装置１１００の演算結果ＲＡと待機用の制御装置１２００の演算結果ＲＢとが一致していなければ、仮に通常運転用の制御装置１１００が故障しても、通常運転用の制御装置１１００から待機用の制御装置１２００への切り替えは実施されない。
【００３２】
以下では、通常運転用の制御装置１１００の演算結果ＲＡと待機用の制御装置１２００の演算結果ＲＢとが整合していることを判定するための処理（以下、「整合判定処理」と称す。）を先に説明し、その後、通常運転用の制御装置１１００から待機用の制御装置１２００へ切り替えるための処理（以下、「切り替え処理」と称す。）を説明する。
【００３３】
＜整合判定処理＞
図２に示すフローに沿って、整合判定処理を説明する。
概略的に、整合判定処理では、待機用の制御装置１２００は、この制御装置１２００の演算結果ＲＢのチェックサム値ＣＳＢと通常運転用の制御装置１１００の演算結果ＲＡのチェックサム値ＣＳＡとを比較することにより、通常運転用の制御装置１１００の演算処理の演算結果ＲＢと待機用の制御装置１２００の演算結果ＲＢとが整合しているか否かを判定する。
【００３４】
この整合判定処理の前提として、通常運転用の制御装置１１００は、各制御サイクルにおいて、前述の冷却システムで用いられる電磁石の温度に関する情報を含む入力データＤＩＮに基づいて、液化装置により生成される液体ヘリウムの循環流量を与えるバルブ開度を演算し、その演算結果ＲＡを共有メモリ１３００の演算結果記憶領域１３３１に格納する。
【００３５】
演算結果ＲＡが得られると、図２（ａ）のフローに示すように、通常運転用の制御装置１１００は、演算結果ＲＡのチェックサム値ＣＳＡを計算し、このチェックサム値ＣＳＡを自身の記憶部（例えば、ダイナミックランダムアクセスメモリ）に一時的に格納する（ステップＳ２１１）。また、通常運転用の制御装置１１００は、上記計算により得られたチェックサム値ＣＳＡを共有メモリ１３００のチェックサム記憶領域１３２１に格納する（ステップＳ２１２）。その後、通常運転用の制御装置１１００は運転を継続し（ステップＳ２１３）、処理をステップＳ２１１に戻して次の制御サイクルに移行する。
このように、通常運転用の制御装置１１００は、各制御サイクルにおいて、演算結果ＲＡのチェックサム値ＣＳＡを計算して共有メモリ１３００のチェックサム記憶領域１３２１の値を更新する。
【００３６】
一方、待機用の制御装置１２００は、通常運転用の制御装置１１００と同様に、各制御サイクルにおいて、前述の冷却システムで用いられる電磁石の温度に関する情報を含む入力データＤＩＮに基づいて、液体ヘリウムの循環流量を与えるバルブ開度を独自に演算し、その演算結果ＲＢを共有メモリ１３００の演算結果記憶領域１３３２に格納する。ここで、各制御サイクルにおいて、制御装置１１００および制御装置１２００は、同一の入力データＤＩＮに基づいて同一の演算処理を実行するので、通常、待機用の制御装置１２００の演算結果ＲＢは通常運転用の制御装置１１００の演算結果ＲＡと一致する。
【００３７】
演算結果ＲＢが得られると、待機用の制御装置１２００は、図２（ｂ）のフローに示すように、通常運転用の制御装置１１００により計算されたチェックサム値ＣＳＡを用いて、通常運転用の制御装置１１００による演算結果ＲＡと待機用の制御装置１２００による演算結果ＲＢとが整合しているか否かを判定し、整合しない場合に警報を発生させる。具体的には、待機用の制御装置１２００は、その演算結果ＲＢのチェックサム値ＣＳＢを計算し（ステップＳ２２１）、このチェックサム値ＣＳＢを自身の記憶部に一時格納する。続いて、待機用の制御装置１２００は、共有メモリ１３００のチェックサム記憶領域１３２１から、通常運転用の制御装置１１００の演算結果ＲＡのチェックサム値ＣＳＡを取得して待機用の制御装置１２００の記憶部に格納する（ステップＳ２２２）。
【００３８】
続いて、待機用の制御装置１２００は、演算結果ＲＢから計算したチェックサム値ＣＳＢ（計算値）と、共有メモリ１３００から取得したチェックサム値ＣＳＡ（取得値）とを比較する（ステップＳ２２３）。そして、チェックサム値ＣＳＡとチェックサム値ＣＳＢとが整合（一致）するか否か、即ち、通常運転用の制御装置１１００の演算結果ＲＡと待機用の制御装置１２００の演算結果ＲＢとが整合するか否かを判定する（ステップＳ２２４）。ここで、チェックサム値ＣＳＡとチェックサム値ＣＳＢとが整合する場合（ステップＳ２２４；ＹＥＳ）、即ち、通常運転用の制御装置１１００の演算結果ＲＡと待機用の制御装置１２００の演算結果ＲＢとが整合する場合、待機用の制御装置１２００は、そのまま運転を継続し（ステップＳ２２５）、処理をステップＳ２２１に戻して次の制御サイクルに移行する。
【００３９】
これに対し、チェックサム値ＣＳＡとチェックサム値ＣＳＢとが整合しない場合（ステップＳ２２４；ＮＯ）、待機用の制御装置１２００は警報を発生させ（ステップＳ２２６）、演算結果が整合しない旨をオペレータに通知する。その後、待機用の制御装置１２００は、そのまま運転を継続し（ステップＳ２２５）、処理をステップＳ２２１に戻して次の制御サイクルに移行する。
このように、待機用の制御装置１２００は、通常運転用の制御装置１１００の演算結果ＲＡと待機用の制御装置１２００の演算結果ＲＢとに不整合が発生した場合に警報を発生させるが、運転を停止することなく、そのまま運転を継続する。
【００４０】
次に、図３を参照して、通常運転用の制御装置１１００の演算結果ＲＡと待機用の制御装置１２００の演算結果ＲＢとが整合しない場合のオペレータの処置の一例を説明する。
なお、図３に示すステップＳ３０１と、ステップＳ３０２と、ステップＳ３０３と、ステップＳ３０４は、それぞれ、図２（ｂ）に示すステップＳ２２１〜Ｓ２２３と、ステップＳ２２４と、ステップＳ２２５と、ステップＳ２２６に対応している。また、図３のステップＳ３０５は、図２のステップ２２５に含まれ、それ以外の図３のステップＳ３０６〜Ｓ３０９は、オペレータによる処置に相当する。
【００４１】
図２のステップＳ２２１〜Ｓ２２４に対応する図３のステップＳ３０１，Ｓ３０２では、オペレータの処置とは関係なく、上述したように、チェックサム値を用いた演算結果の整合に関する判定処理が自動的に実施される。そして、図３のステップＳ３０２において、演算結果が整合しないと判定された場合（ステップＳ３０２；ＮＯ）、上述したように、図２のステップＳ２２６に対応する図３のステップＳ３０４において、待機用の制御装置１２００は警報を発生させてオペレータに通知する。この警報から、オペレータは、演算結果に不整合が発生したことを認識する。
【００４２】
この場合、オペレータは、手動により演算結果を整合させるための処置（以下、「手動整合」と称す。）を実施するか、または演算結果が整合しない原因を調査するかの何れのの対応をとるかを判断する（ステップＳ３０６）。ここで、手動整合を実施すると判断した場合（ステップＳ３０６；ＹＥＳ）、オペレータは、通常運転用の制御装置１１００の演算結果ＲＡを待機用の制御装置１２００に複写することにより、待機用の制御装置１２００の演算結果ＲＢを通常運転用の制御装置１１００の演算結果ＲＡに置き換える。具体的には、共有メモリ１３００の演算結果記憶領域１３３２に格納された演算結果ＲＢを演算結果ＲＡに書き替えると共に、待機用の制御装置１２００の記憶部に記憶された演算結果ＲＢを演算結果ＲＡに書き替える。これにより、見かけ上、演算結果の不整合は解消される。その後、待機用の制御装置１２００は、処理をステップＳ３０１に戻して運転を継続する。
【００４３】
ここで、演算結果が整合しない場合として、通常運転用の制御装置１１００の演算処理ＲＡに原因がある場合と、待機用の制御装置１２００の演算処理ＲＢに原因がある場合の二通りがある。本実施形態では、演算結果が整合しない原因が何れの演算結果にあったとしても、通常運転用の制御装置１１００の演算結果ＲＡを有効なものとして取り扱い、待機用の制御装置１２００の演算結果ＲＢを通常運転用の制御装置１１００の演算結果ＲＡで置き換える。その理由は、通常運転用の制御装置１１００の運転を継続することにより、制御の連続性を保つためである。
【００４４】
ここで、仮に通常運転用の制御装置１１００の演算結果ＲＡを演算結果ＲＢで置き換えたとすれば、演算結果が整合しない原因が待機用の制御装置１２００の演算処理にあった場合、共有メモリ１３００から出力データＤＯＵＴとして出力される制御データの値が急激に変化し、制御の連続性が著しく阻害されるおそれがある。このため、本実施形態では、不整合の原因の所在を問わず、通常運転用の制御装置１１００の演算結果ＲＡを優先的に出力する。また、演算結果の不整合の原因が一時的なものであれば、必ずしもその原因を調査して対策を講じる必要もなく、通常運転用の制御装置１１００の運転を継続しても問題はない。
【００４５】
これに対し、オペレータが手動整合を実施しないと判断した場合、（ステップＳ３０６；ＮＯ）、即ち演算結果が整合しない原因を調査すると判断した場合、オペレータは、例えば、その原因を調査し（ステップＳ３０８）、その調査の結果に基づいて必要な対策を講じる（ステップＳ３０９）。例えば、オペレータは、演算結果が整合しない原因が通常運転用の制御装置１１００の演算処理にあるのか、待機用の制御装置１２００の演算処理にあるのかを分析し、その分析結果から、演算結果の不整合を生じさせた制御装置を修理する等の対策を講じる。
【００４６】
手動整合を実施しないと判断する場合の例としては、上述のステップＳ３０７において演算結果ＲＢを演算結果ＲＡで置き換えて演算結果を強制的に整合させたにもかかわらず、その後も演算結果の不整合が発生する場合が挙げられる。この場合、通常運転用の制御装置１１００または待機用の制御装置１２００の何れかに恒久的な故障が存在する可能性が高いので、演算結果が整合しない原因を調査して適切な対策を講じることが望ましい。
【００４７】
＜切り替え処理＞
次に、図４および図５に示すフローに沿って、切り替え処理について説明する。
切り替え処理は、上述した整合判定処理において演算結果ＲＡと演算結果ＲＢとが整合していると判定されたことを前提として実施される。この前提が満足されている状況において、通常運転用の制御装置１１００の生存を確認できなくなった場合、通常運転用の制御装置１１００から待機用の制御装置１２００への切り替え処理が実施される。
【００４８】
切り替え処理は、通常運転用の制御装置１１００による処理と、待機用の制御装置１２００による処理を含むが、先に、図４のフローに沿って通常運転用の制御装置１１００による処理を説明し、その後に、図５のフローに沿って待機用の制御装置１２００による処理を説明する。
【００４９】
・通常運転用の制御装置１１００による処理
通常運転用の制御装置１１００は、各制御サイクルにおいて、待機用の制御装置１２００が制御装置１１００の生存を確認するためのデータとして、「１」から「１００」までの数値範囲で巡回する生存確認用の数値データを生成し、共有メモリ１３００の生存確認データ記憶領域１３１１に格納する（ステップＳ４０１）。最初の制御サイクルでは、通常運転用の制御装置１１００は、生存確認用の数値データとして「１」を生成して共有メモリ１３００の生存確認データ記憶領域１３１１に格納する。この生存確認用の数値データは、後述する図５に示す待機用の制御装置１２００による処理（ステップＳ５０２）において参照される。
【００５０】
ここで、通常運転用の制御装置１１００は、生存確認用の数値データを、各制御サイクルにおいて「１」だけカウントアップ（インクリメント）する。即ち、制御サイクルの進行に従って生存確認用の数値データは「１」ずつ増加する。そして、生存確認用の数値データが「１００」に到達すると、その次の制御サイクルでは「１」に戻される。本実施形態では、「１００」から「１」への数値データの変化も数値データのカウントアップとして取り扱う。ただし、生存確認用の数値データの増分は、この例に限定されず、任意に設定することができる。
【００５１】
後述するように、待機用の制御装置１２００も、通常運転用の制御装置１１００と同様に、各制御サイクルにおいて、同一の数値範囲で巡回する生存確認用の数値データを生成して、共有メモリ１３００の生存確認データ記憶領域１３１２に格納する。
【００５２】
続いて、通常運転用の制御装置１１００は、最初の制御サイクルにおいて、待機用の制御装置１２００により共有メモリ１３００の生存確認データ記憶領域１３１２に格納された生存確認用の数値データ「１」を取得して保持する（ステップＳ４０２）。
続いて、通常運転用の制御装置１１００は、前回の制御サイクルにおいて共有メモリ１３００の生存確認データ記憶領域１３１２から取得して保持した待機用の制御装置１２００の生存確認用の数値データ（保持値）と、今回の制御サイクルにおいて共有メモリ１３００の生存確認データ記憶領域１３１２から取得した待機用の制御装置１２００の生存確認用の数値データ（取得値）とを比較する（ステップＳ４０３）。ただし、最初の制御サイクルでは、前回の制御サイクルで取得した数値データ（保持値）は存在しないので、この数値データ（保持値）として初期値「０」が設定される。
【００５３】
続いて、通常運転用の制御装置１１００は、共有メモリ１３００の生存確認データ記憶領域１３１２に格納された数値データを参照し、今回の制御サイクルで取得した生存確認用の数値データ（取得値）と前回の制御サイクルで取得して保持した数値データ（保持値）との間に所定の変化があるかどうかを判定する。具体的には、通常運転用の制御装置１１００は、今回の制御サイクルで取得した生存確認用の数値データの値（取得値）が前回の制御サイクルで取得して保持した数値データの値（保持値）に対して「１」だけカウントアップされているか否かを判定する（ステップＳ４０４）。
【００５４】
前述したように、生存確認用の数値データは、各制御サイクルにおいて「１」ずつカウントアップされるので、もし待機用の制御装置１２００が生存しているのであれば（即ち正常な運転状態にあるのであれば）、共有メモリ１３００の生存確認データ記憶領域１３１２に格納された生存確認用の数値データの値は「１」だけカウントアップされているはずである。もし待機用の制御装置１２００が何らかの故障を抱え、正常な運転状態になければ、生存確認データ記憶領域１３１２に格納された数値データの値はカウントアップされず、前回と同じ値に維持される。
【００５５】
生存確認データ記憶領域１３１２に格納された生存確認用の数値データの値が「１」だけカウントアップされていれば（ステップＳ４０４；ＹＥＳ）、制御装置１１００は運転を継続し（ステップＳ４０５）、処理をステップＳ４０１に戻して次の制御サイクルに移行する。前述のように、最初の制御サイクルでは、前回の制御サイクルで取得して保持した数値データとして初期値「０」が設定されるので、生存確認データ記憶領域１３１２から取得された生存確認用の数値データの値が「１」であれば、生存確認用の数値データは「１」だけカウントアップされていることになる。
【００５６】
生存確認データ記憶領域１３１２に格納された数値データが「１」だけカウントアップされていない場合（ステップＳ４０４；ＮＯ）、通常運転用の制御装置１１００は、所定時間のｎ秒（ｎは整数）が経過したか否かを判定する（ステップＳ４０６）。即ち、通常運転用の制御装置１１００は、ｎ秒の間、共有メモリ１３００の生存確認用データ記憶領域１３１２に格納される生存確認用の数値データの値に変化がないかどうかを判定する。
【００５７】
上記のｎ秒なる時間は、例えば、待機用の制御装置１２００に恒久的な故障が発生したか否かの判定の基準となる時間であり、例えば３制御サイクル以上に相当する時間が経過しても生存確認用の数値データがカウントアップされなければ、待機用の制御装置１２００に恒久的な故障が発生し、待機用の制御装置１２００は生存していない状態にあることが推定される。
【００５８】
ｎ秒が経過しない場合（ステップＳ４０６；ＮＯ）、即ち、ｎ秒が経過する前に、共有メモリ１３００の生存確認用データ記憶領域１３１２に格納された生存確認用の数値データの値がカウントアップされた場合、通常運転用の制御装置１１００は、待機用の制御装置１２００に異常はないと判断する。そして、通常運転用の制御装置１１００は、自身の運転を継続し（ステップＳ４１１）、処理をステップＳ４０１に戻して次の制御サイクルに移行する。
【００５９】
これに対し、ｎ秒が経過した場合（ステップＳ４０６；ＹＥＳ）、即ち、ｎ秒が経過しても、共有メモリ１３００の生存確認用データ記憶領域１３１２に格納された生存確認用の数値データの値に変化がない場合、通常運転用の制御装置１１００は、待機用の制御装置１２００に異常があり、その生存を確認できないと判定する（ステップＳ４０７）。この場合、通常運転用の制御装置１１００は、待機用の制御装置１２００に関する共有メモリ１３００内の後述の異常発生状態管理領域（図示なし）に格納されたデータを更新し（ステップＳ４０８）、待機用の制御装置１２００の運転を停止させる（ステップＳ４０９）。その後、通常運転用の制御装置１１００は、運転を継続し（ステップＳ４１０）、処理をステップＳ４０１に戻して次の制御サイクルに移行する。
【００６０】
ここで、待機用の制御装置１２００に関する共有メモリ１３００内の異常発生状態管理領域（図示なし）には、通常運転用の制御装置１１００により待機用の制御装置１２００の生存が確認されない場合の異常発生を示すデータが格納される。また、共有メモリ１３００には、通常運転用の制御装置１１００に関する異常発生状態管理領域（図示なし）も設定されている。本実施形態では、通常運転用の制御装置１１００と待機用の制御装置１２００が共に相手側の制御装置の生存を確認できないと判定した場合、先に異常発生状態管理領域のデータを更新した制御装置のみが運転を継続し、残りの他方の制御装置の運転が停止される。これにより、通常運転用の制御装置１１００と待機用の制御装置１２００が共に相手側の制御装置の生存を確認できないと判定した場合、相互に相手側の運転を停止させて共倒れになる状況を回避することができる。
【００６１】
例えば、通常運転用の制御装置１１００と待機用の制御装置１２００が共に相手側の制御装置の生存を確認できないと判定し（即ち、同時に異常を検出し）、且つ、通常運転用の制御装置１１００が、先に、待機用の制御装置１２００に関する共有メモリ１３００内の異常発生状態管理領域のデータを更新した場合、待機用の制御装置１２００は、通常運転用の制御装置１１００を異常と判定した後、待機用の制御装置１２００に関する共有メモリ１３００内の異常発生状態管理領域のデータを参照することにより、自身が異常であることを認識する。この場合、通常運転用の制御装置１１００の運転の停止が中止され（即ち、通常運転用の制御装置１１００の運転が継続され）、待機用の制御装置１２００の運転が停止される。これにより共倒れが回避され、この場合、通常運転用の制御装置１１００により制御が継続される。
【００６２】
このように、本実施形態では、生存確認データ記憶領域１３１２に格納された生存確認用の数値データに変化がなく（即ち、その数値データが「１」だけカウントアップされておらず）、ｎ秒が経過しても生存確認用の数値データに変化がない場合、通常運転用の制御装置１１００は、待機用の制御装置１２００の生存を確認できないと判定する。
なお、ｎ秒が経過しても生存確認用の数値データが変化しないことの判定（ステップＳ４０６）は、必要に応じて省略してもよい。この場合、上述のステップＳ４０３において生存確認用の数値データがカウントアップされていないと判定された場合、通常運転用の制御装置１１００は、待機用の制御装置１２００の生存を確認できないと判定する。
【００６３】
上述のように、通常運転用の制御装置１１００は、自身の生存確認用の数値データを共有メモリ１３００の生存確認データ記憶領域１３１１に格納すると共に、待機用の制御装置１２００によって生存確認データ記憶領域１３１２に格納された数値データに基づいて待機用の制御装置１２００の生存を確認する。そして、通常運転用の制御装置１１００は、待機用の制御装置１２００の生存を確認できない場合、この待機用の制御装置１２００の運転を停止させ、自身の運転を継続する。この場合、通常運転用の制御装置１１００は、警報を発生させて、待機用の制御装置１２００の生存が確認できない旨をオペレータに通知してもよい。
【００６４】
・待機用の制御装置１２００による処理
上述の通常運転用の制御装置１１００による処理では、待機用の制御装置１２００の生存が確認できない場合、その運転を停止させたが、待機用の制御装置１２００による処理では、待機用の制御装置１２００が通常運転用の制御装置１１００の生存を確認できない場合、待機用の制御装置１２００を運転状態にし（後述のステップＳ５０９）、通常運転用の制御装置１１００の運転を停止させる（後述のステップＳ５１１）。これにより、通常運転用の制御装置１１００から待機用の制御装置１２００に切り替える。その他は、上述の通常運転用の制御装置１１００による処理と同様である。
【００６５】
具体的に説明する。待機用の制御装置１２００は、上述の通常運転用の制御装置１１００と同様に、各制御サイクルにおいて、通常運転用の制御装置１１００が生存しているか否かを判定する生存確認処理を実施する。即ち、待機用の制御装置１２００は、各制御サイクルにおいて、通常運転用の制御装置１１００が制御装置１２００の生存を確認するためのデータとして、「１」から「１００」までの数値範囲で巡回する生存確認用の数値データを生成して、共有メモリ１３００の生存確認データ記憶領域１３１２に格納する（ステップＳ５０１）。最初の制御サイクルでは、待機用の制御装置１２００は、生存確認用の数値データとして「１」を生成して共有メモリ１３００の生存確認データ記憶領域１３１２に格納する。この生存確認用の数値データは、上述した図４に示す通常運転用の制御装置１１００による処理（ステップＳ４０２）において参照される。
【００６６】
続いて、待機用の制御装置１２００は、最初の制御サイクルにおいて、通常運転用の制御装置１１００により共有メモリ１３００の生存確認データ記憶領域１３１１に格納された生存確認用の数値データ「１」を取得して保持する（ステップＳ５０２）。
続いて、待機用の制御装置１２００は、前回の制御サイクルにおいて共有メモリ１３００の生存確認データ記憶領域１３１１から取得して保持した通常運転用の制御装置１１００の生存確認用の数値データ（保持値）と、今回の制御サイクルにおいて共有メモリ１３００の生存確認データ記憶領域１３１１から取得した通常運転用の制御装置１１００の生存確認用の数値データ（取得値）とを比較する（ステップＳ５０３）。ただし、最初の制御サイクルでは、前回の制御サイクルは存在しないので、前回の制御サイクルで取得して保持した数値データ（保持値）として初期値「０」が設定される。
【００６７】
続いて、待機用の制御装置１２００は、共有メモリ１３００の生存確認データ記憶領域１３１１に格納された数値データを参照し、今回の制御サイクルで取得した生存確認用の数値データ（取得値）と前回の制御サイクルで取得して保持した数値データ（保持値）との間に所定の変化があるかどうかを判定する。具体的には、待機用の制御装置１２００は、今回の制御サイクルで取得した生存確認用の数値データの値（取得値）が前回の制御サイクルで取得して保持した数値データの値（保持値）に対して「１」だけカウントアップされているか否かを判定する（ステップＳ５０４）。
【００６８】
生存確認データ記憶領域１３１１に格納された生存確認用の数値データの値が「１」だけカウントアップされていれば（ステップＳ５０４；ＹＥＳ）、制御装置１２００は運転を継続し（ステップＳ５０５）、処理をステップＳ５０１に戻して次の制御サイクルに移行する。前述のように、最初の制御サイクルでは、前回の制御サイクルで取得して保持した数値データとして初期値「０」が設定されるので、生存確認データ記憶領域１３１１から取得された生存確認用の数値データの値が「１」であれば、生存確認用の数値データは「１」だけカウントアップされていることになる。
【００６９】
生存確認データ記憶領域１３１１に格納された数値データが「１」だけカウントアップされていない場合（ステップＳ５０４；ＮＯ）、待機用の制御装置１２００は、ｎ秒が経過したか否かを判定する（ステップＳ５０６）。即ち、待機用の制御装置１２００は、ｎ秒の間、共有メモリ１３００の生存確認用データ記憶領域１３１１に格納される生存確認用の数値データの値に変化がないかどうかを判定する。ｎ秒の意味は、前述の通常運転用の制御装置１１００による処理と同様である。
【００７０】
ｎ秒が経過しない場合（ステップＳ５０６；ＮＯ）、即ち、ｎ秒が経過する前に、共有メモリ１３００の生存確認用データ記憶領域１３１１に格納された生存確認用の数値データの値がカウントアップされた場合、待機用の制御装置１２００は、通常運転用の制御装置１１００に異常はないと判断する。そして、待機用の制御装置１２００は、自身の運転を継続し（ステップＳ５１３）、処理をステップＳ５０１に戻して次の制御サイクルに移行する。
【００７１】
これに対し、ｎ秒が経過した場合（ステップＳ５０６；ＹＥＳ）、即ち、ｎ秒が経過しても、共有メモリ１３００の生存確認用データ記憶領域１３１１に格納された生存確認用の数値データの値に変化がない場合、待機用の制御装置１２００は、通常運転用の制御装置１１００に異常があり、その生存を確認できないと判定する（ステップＳ５０７）。
【００７２】
このように、本実施形態では、生存確認データ記憶領域１３１１に格納された生存確認用の数値データに変化がなく（即ち、その数値データが「１」だけカウントアップされておらず）、ｎ秒が経過しても生存確認用の数値データに変化がない場合、待機用の制御装置１２００は、通常運転用の制御装置１１００の生存を確認できないと判定する。
なお、ｎ秒が経過しても生存確認用の数値データが変化しないことの判定（ステップＳ５０６）は、必要に応じて省略してもよい。この場合、上述のステップＳ５０３において生存確認用の数値データがカウントアップされていないと判定された場合に、待機用の制御装置１２００は、通常運転用の制御装置１２００の生存を確認できないと判定する。
【００７３】
通常運転用の制御装置１１００の生存を確認できないと判定すると（ステップＳ５０７）、待機用の制御装置１２００は、通常運転用の制御装置１１００に関する共有メモリ１３００内の異常発生状態管理領域（図示なし）に格納されたデータを更新する（ステップＳ５０８）。そして、待機用の制御装置１２００は、自身を運転状態に設定する（ステップＳ５０９）。ここで、通常運転用の制御装置１１００に関する共有メモリ１３００内の異常発生状態管理領域（図示なし）には、待機用の制御装置１２００により通常運転用の制御装置１１００の生存が確認されない場合の異常発生を示すデータが格納される。前述したように、本実施形態では、通常運転用の制御装置１１００と待機用の制御装置１２００が共に相手側の制御装置の生存を確認できないと判定した場合、先に異常発生状態管理領域のデータを更新した制御装置のみが運転を継続し、残りの制御装置の運転が停止される。これにより、通常運転用の制御装置１１００と待機用の制御装置１２００が共に相手側の制御装置の生存を確認できないと判定した場合の共倒れを回避する。
【００７４】
本実施形態では、待機用の制御装置１２００は、通常運転用の制御装置１１００と並行して運転されているので、厳密には定常的に運転状態にあるが、ステップＳ５０９では、待機用の制御装置１２００は、共有メモリ１３００のアクセス権を獲得し、選択部１３４０に演算結果記憶領域１３３２を選択させる。この結果、以後の制御サイクルでは、共有メモリ１３００の演算結果記憶領域１３３２に格納された演算結果ＲＢが出力データＤＯＵＴとして共有メモリ１３００から出力される。これにより、通常運転用の制御装置１１００から待機用の制御装置１２００への切り替えが行われる。
【００７５】
ここで、待機用の制御装置１２００は、通常運転用の制御装置１１００による演算処理と同様の演算処理を実行して、その演算結果ＲＢを共有メモリ１３００の演算結果記憶領域１３３２に逐次格納している。従って、故障が発生する直前の制御サイクルでは、演算結果記憶領域１３３２に格納された演算結果ＲＢは、演算結果記憶領域１３３１に格納された演算結果ＲＡと同一である。このため、故障が発生した制御サイクルで、通常運転用の制御装置１１００から待機用の制御装置１２００に切り替える際に、演算結果記憶領域１３３１に格納された演算結果ＲＡを演算結果記憶領域１３３２に転送する必要がない。従って、制御を中断することなく、通常運転用の制御装置１１００から待機用の制御装置１２００に速やかに切り替えることができる。
【００７６】
その後、待機用の制御装置１２００は、通常運転用の制御装置１１００を、稼働中のタスクを順次サスペンドさせるために待機状態にし（ステップＳ５１０）、この待機状態を経た後に通常運転用の制御装置１１００の運転を停止させる（ステップＳ５１１）。その後、待機用の制御装置１２００は、運転を継続し（ステップＳ５１２）、処理をステップＳ５０１に戻して次の制御サイクルに移行する。
【００７７】
上述のように、待機用の制御装置１２００による処理では、自身の生存確認用の数値データを共有メモリ１３００の生存確認データ記憶領域１３１２に格納すると共に、生存確認データ記憶領域１３１１に格納された数値データに基づいて通常運転用の制御装置１１００の生存を確認する。そして、通常運転用の制御装置１１００の生存を確認できない場合、この制御装置１１００の運転を停止させると共に自身が運転を継続し、それ以降、演算結果ＲＢを出力データＤＯＵＴとして出力する。
【００７８】
確認的に、上述した本実施形態による冗長システム１０００の動作について、図６を参照しながら前述の図７に示す従来技術と対比させて説明する。
図６（ａ）に示すように、本実施形態による冗長化システム１０００によれば、故障が発生しない場合、通常運転用の制御装置１１００および待機用の制御装置１２００が同一の入力データＤＩＮに対して並列に同様の演算処理を実行する。また、通常運転用の制御装置１１００の演算結果ＲＡと待機用の制御装置１２００の演算結果ＲＢとが整合するか否かが定周期で判定される。共有メモリ１３００には、通常運転用の制御装置１１００による演算結果ＲＡと、待機用の制御装置１２００による演算結果ＲＢの両方が逐次格納されるが、通常運転時には、出力データＤＯＵＴとして通常運転用の制御装置１１００による演算結果ＲＡが出力される。
【００７９】
これに対し、図７（ａ）に示すように、従来技術によれば、通常運転時には、通常運転用の制御装置５０１のみが運転され、待機用の制御装置５０２は演算処理を実施しない。そのため、共有メモリ５０３には、通常運転用の制御装置１１００の演算結果しか格納されない。
【００８０】
図６に説明を戻すと、本実施形態による冗長化システム１０００によれば、通常運転用の制御装置１１００に故障が発生し、その生存確認がとれない場合、図６（ｂ）に示すように、待機用の制御装置１２００は、共有メモリ１３００の演算結果記憶領域１３３２に格納された演算結果ＲＢを共有メモリ１３００から出力させる。これにより、通常運転用の制御装置１１００から待機用の制御装置１２００に運転が切り替えられる。このとき、共有メモリ１３００には、それまでの通常運転用の制御装置１１００の演算結果ＲＡと同じ内容の演算結果ＲＢが格納されており、また、待機用の制御装置１２００の記憶部にも同一内容の演算結果ＲＢが存在する。このため、制御装置を切り替える際に、通常運転用の制御装置による演算結果を待機用の制御装置に転送する必要がない。従って、制御を中断することなく、制御装置の切り替えを速やかに行うことができる。
【００８１】
これに対し、図７（ｂ）に示すように、従来技術によれば、通常運転用の制御装置５０１が故障すると、それまでの演算結果は共有メモリ５０３から待機用の制御装置５０２に転送される。そして、待機用の制御装置５０２は、共有メモリ５０３から転送された演算結果を反映させて演算処理を実行する。その後、図７（ｃ）に示すように、待機用の制御装置５０２は、その演算結果を共有メモリ５０３に格納する。このように、従来技術によれば、制御装置を切り替える際に、共有メモリ５０３と待機用の制御装置５０２との間で演算結果を転送する必要がある。このため、図７に示す技術によれば、制御装置の切り替えを遅滞なく行うことが困難になる。
【００８２】
なお、上述した本実施形態では、本発明を冗長化システムとして表現したが、本発明を冗長化方法として表現することもできる。この場合、本発明による冗長化方法は、制御対象の制御に関する演算処理を実行する第１制御装置と、前記第１制御装置による演算処理と並行して、前記第１制御装置による演算処理と同等の演算処理を実行する第２制御装置と、前記第１制御装置および前記第２制御装置によって共有される記憶装置と、を備えた冗長化システムの冗長化方法であって、前記記憶装置が、前記第１制御装置および前記第２制御装置による各演算処理の演算結果を格納するための演算結果記憶領域と、前記第１制御装置の生存を確認するためのデータを格納するための生存確認データ記憶領域と、を有し、前記第２制御装置が、前記生存確認データ記憶領域に格納されたデータを参照して前記第１制御装置の生存確認を行う段階と、前記第２制御装置が、前記第１制御装置の生存を確認できない場合、前記演算結果記憶領域に格納された演算結果のうち、前記第２制御装置により格納された演算結果を前記記憶装置から出力させる段階と、を含む冗長化方法として表現することができる。
【００８３】
上述したように、本実施形態によれば、通常運転用の制御装置１１００と待機用の制御装置１２００とを並列に運転して各演算結果を共有メモリ１３００に逐次格納するようにしたので、通常運転用の制御装置１１００から待機用の制御装置１２００に切り替える際に、演算結果を転送する必要がない。従って、制御を中断することなく、通常運転用の制御装置１１００から待機用の制御装置１２００に速やかに切り替えることができる。
【００８４】
また、本実施形態によれば、演算結果が整合していることが確認され、且つ、通常運転用の制御装置１１００の生存を確認できない場合に、通常運転用の制御装置１１００から待機用の制御装置１２００に切り替えるので、制御の連続性を維持することができる。
また、本実施形態によれば、制御装置を切り替える前の段階で演算結果が整合していない場合、通常運転用の制御装置１１００の演算結果ＲＡを優先して出力するので、この場合にも制御の連続性を維持し、制御を安定化させることができる。
【００８５】
また、本実施形態によれば、通常運転用の制御装置１１００は、待機用の制御装置１２００の生存を確認できない場合、この待機用の制御装置１２００の運転を停止させるので、待機用の制御装置１２００が故障を抱えたまま運転を継続することがない。従って、待機用の制御装置１２００の故障の拡大を防止することができる。
【００８６】
なお、本実施形態では、共有メモリ１３００の生存確認データ記憶領域１３１２に格納された生存確認用の数値データに基づいて、通常運転用の制御装置１１００が待機用の制御装置１２００の生存を確認するものとしたが、必要に応じて待機用の制御装置１２００の生存確認を省略してもよい。この場合、共有メモリ１３００の生存確認データ記憶領域１３１２を省略することができる。生存確認データ記憶領域１３１２を省略した場合、例えば、オペレータが待機用の制御装置１２００の生存確認を手動により定期的に実施してもよく、その手法は任意である。ただし、上述した本実施形態のように、通常運転用の制御装置１１００が待機用の制御装置１２００の生存を確認するものとすれば、通常運転用の制御装置１１００から待機用の制御装置１２００に運転を切り替える際に制御を的確に継続することが可能になる。加えて、制御装置１２００の生存をオペレータが確認する作業を省くことが可能になる。
【００８７】
また、本実施形態では、通常運転用の制御装置１１００および待機用の制御装置１２００の各演算結果のチェックサム値を用いて演算結果が整合するか否かを判定するものとしたが、チェックサム値を用いずに、演算結果自体を用いて、演算結果の整合を判定してもよい。この場合、チェックサム記憶領域１３２１を省略することができる。また、チェックサム値に限定されず、他の手法を用いて演算結果の整合を判定してもよい。
【００８８】
以上、本発明の実施形態を説明したが、本発明は上述の実施形態に限定されるものではなく、本発明の要旨を逸脱しない範囲で種々の変形、変更、修正、置換等が可能である。
例えば、上述の実施形態では、通常運転用の制御装置１１００と待機用の制御装置１２００の２台の制御装置を用いて冗長化システム１０００を構成したが、複数の通常運転用の制御装置と、これに対応する複数の待機用の制御装置とを用いて冗長化システムを構成してもよい。
【００８９】
また、上述の実施形態では、通常運転用の制御装置１１００と待機用の制御装置１２００により共有メモリ１３００を共有するものとしたが、共有メモリ１３００は他の冗長化システムによって共有されてもよい。
また、上述の実施形態では、１つの共有メモリ１３００に演算結果記憶領域１３３１、１３３２を設けたが、演算結果記憶領域１３３１、１３３２を別個のメモリに設けてもよい。即ち、共有メモリは単一のメモリに限らず、複数のメモリの集合体であってもよい。
【００９０】
また、上述の実施形態では、生存確認データ記憶領域１３１１，１３１２、チェックサム記憶領域１３２１は、演算結果記憶領域１３３１，１３３２とは別の記憶領域としたが、演算結果記憶領域１３３１，１３３２の一部を生存確認データ記憶領域１３１１，１３１２、チェックサム記憶領域１３２１として用いてもよい。例えば、共有メモリ１３００のアドレス空間の一部に、生存確認データ記憶領域１３１１，１３１２やチェックサム記憶領域１３２１等を割り付けてもよい。
【符号の説明】
【００９１】
１０００…冗長化システム、１１００…通常運転用の制御装置、１２００…待機用の制御装置、１３００…共有メモリ、１３１１，１３１２…生存確認データ記憶領域、１３２１…チェックサム記憶領域、１３３１，１３３２…演算結果記憶領域、１３４０…選択部、Ｓ２１１〜Ｓ２１３，Ｓ２２１〜Ｓ２２６，Ｓ３０１〜Ｓ３０９，Ｓ４０１〜Ｓ４１１，Ｓ５０１〜Ｓ５１３…処理ステップ。
【図１】
2014106862.tif 000003
【図２】
2014106862.tif 000004
【図３】
2014106862.tif 000005
【図４】
2014106862.tif 000006
【図５】
2014106862.tif 000007
【図６】
2014106862.tif 000008
【図７】
2014106862.tif 000009