(57)【要約】  プロセスの実行中にそれが使用するメモリの診断を比較的容易に行えるメモリ診断方法を提供する。固定領域（８）は、プロセス実行部（５）が変更しないデータを記憶する。変動領域（９）は、プロセス実行部（５）が書き込み処理を行う可能性のあるデータを記憶する。固定領域診断部（２）は、固定領域（８）に記憶するデータに予め誤り検出符号を付加する。そして、固定領域（８）から読み出したデータから演算した誤り検出符号と、予め付加した誤り検出符号とを比較してデータ誤りの有無を判断する。変動領域診断部（３）は、変動領域（９）に記憶しているデータを、記憶しているメモリの領域以外のメモリに一時的に記憶させ、その一時的に記憶させたデータを記憶していた変動領域（９）に既知のデータを書き込む。そして、既知のデータを書き込んだ同じ領域のデータを読み出して、書き込んだ既知のデータと一致するか否かを判断する。
2011111211.tif 000002
【特許請求の範囲】
【請求項１】
プロセスの実行中に該プロセスが使用するメモリの診断を行うメモリ診断方法であって、
前記プロセスが書き込み処理を行う可能性のある第１のデータを記憶する前記メモリの変動領域において、該変動領域に記憶している前記第１のデータを、記憶しているメモリの領域以外の退避領域に記憶させ、前記退避領域に記憶させた前記第１のデータを記憶していた前記変動領域に既知のデータを書き込み、同領域のデータを読み出して前記書き込んだ既知のデータと一致するか否かを判断する変動領域診断ステップと、
前記プロセスの実行中に変更されない第２のデータを記憶する前記メモリの固定領域において、記憶するデータに予め誤り検出符号を付加して前記固定領域に記憶し、前記固定領域から読み出したデータから演算した誤り検出符号と、前記付加して記憶した誤り検出符号とを比較してデータ誤りの有無を判断する固定領域診断ステップと、
を備えることを特徴とするメモリ診断方法。
【請求項２】
前記プロセスが使用するメモリのすべての領域について前記変動領域診断ステップまたは前記固定領域診断ステップを行うことを特徴とする請求項１に記載のメモリ診断方法。
【請求項３】
前記プロセスが使用するメモリを使用する、前記変動領域診断ステップおよび前記固定領域診断ステップ以外の、すべてのプロセスが待ち状態の時間に、前記変動領域診断ステップまたは前記固定領域診断ステップを行うことを特徴とする請求項１に記載のメモリ診断方法。
【請求項４】
前記変動領域診断ステップは、前記変動領域を１または２以上の部分に分割し、前記分割した部分ごとに、前記変動領域に記憶している前記第１のデータを、前記退避領域に記憶させ、当該退避領域に記憶させた前記第１のデータを記憶していた前記変動領域に既知のデータを書き込み、同領域のデータを読み出して前記書き込んだ既知のデータと一致するか否かを判断することを特徴とする請求項１に記載のメモリ診断方法。
【請求項５】
前記変動領域診断ステップは、チェックボードテスト、ウォーキングビットテスト、擬似ランダムデータテスト、または、固定パターンデータテストを含むことを特徴とする請求項１に記載のメモリ診断方法。
【請求項６】
前記固定領域診断ステップは、２重化、パリティ符号、チェックサム、ハミング符号、巡回符号またはハッシュ関数を用いる誤り検出を含むことを特徴とする請求項１に記載のメモリ診断方法。
【請求項７】
前記プロセスは、鉄道車両の制御処理を行い、
前記鉄道車両の通常運転中に、前記変動領域診断ステップおよび前記固定領域診断ステップを行う、
ことを特徴とする請求項１に記載のメモリ診断方法。
【請求項８】
前記プロセスの演算を行っていない時間に、前記変動領域診断ステップを行うことを特徴とする請求項７に記載のメモリ診断方法。
【請求項９】
前記変動領域を１または２以上の部分に分割した部分ごとに順次、所定の周期ごとの前記プロセスが演算を行っていない時間に、前記変動領域診断ステップを行い、前記変動領域を分割したすべての部分について前記変動領域診断ステップを行ったのちは、再度前記変動領域の先頭の前記部分から前記変動領域診断ステップを行う、ことを特徴とする請求項８に記載のメモリ診断方法。
【請求項１０】
プロセスの実行中に該プロセスが使用するメモリの診断を行うメモリ診断装置であって、
前記プロセスが書き込み処理を行う可能性のある第１のデータを記憶する前記メモリの変動領域において、該変動領域に記憶している前記第１のデータを、記憶しているメモリの領域以外の退避領域に記憶させ、前記退避領域に記憶させた前記第１のデータを記憶していた前記変動領域に既知のデータを書き込み、同領域のデータを読み出して前記書き込んだ既知のデータと一致するか否かを判断する変動領域診断部と、
前記プロセスの実行中に変更されない第２のデータを記憶する前記メモリの固定領域において、記憶するデータに予め誤り検出符号を付加して前記固定領域に記憶し、前記固定領域から読み出したデータから演算した誤り検出符号と、前記付加して記憶した誤り検出符号とを比較してデータ誤りの有無を判断する固定領域診断部と、
を備えることを特徴とするメモリ診断装置。
【請求項１１】
コンピュータに、
当該コンピュータでプロセスの実行中に、
前記プロセスが書き込み処理を行う可能性のある第１のデータを記憶する前記メモリの変動領域において、該変動領域に記憶している前記第１のデータを、記憶しているメモリの領域以外の退避領域に記憶させ、前記退避領域に記憶させた前記第１のデータを記憶していた前記変動領域に既知のデータを書き込み、同領域のデータを読み出して前記書き込んだ既知のデータと一致するか否かを判断する変動領域診断ステップと、
前記プロセスの実行中に変更されない第２のデータを記憶する前記メモリの固定領域において、記憶するデータに予め誤り検出符号を付加して前記固定領域に記憶し、前記固定領域から読み出したデータから演算した誤り検出符号と、前記付加して記憶した誤り検出符号とを比較してデータ誤りの有無を判断する固定領域診断ステップと、
を実行させることを特徴とするメモリ診断プログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、プロセスで書き換え可能なメモリを診断するメモリ診断方法、メモリ診断装置およびメモリ診断プログラムに関する。
【背景技術】
【０００２】
プロセス産業における電気・電子・プログラマブル電子関連の機能安全に関する国際規格が定められている（非特許文献１）。非特許文献１は、電気・電子機器などの機能または故障・障害によって人命に大きな影響を与えるものなどを対象とする。例えば、輸送機器、化学プラント、医療機器などにおける機能安全が相当する。【０００３】
安全性に影響を及ぼす要因として、主にハードウェアに関して、部品や材料の劣化、製品のばらつきなどにより起こるランダムハードウェア故障が想定される。非特許文献１は、ランダムハードウェア故障に対して、冗長化や多様化によるシステムの信頼性向上や、自己診断機能設置などの対策が必要であると規定している。また、確率論的危険（リスク）解析などによって、全体システムのリスクが許容リスクを下回るようにするために、当該安全装置の安全度水準（ＳＩＬ＝Safety Integrity Level）を決定することとしている。非特許文献１は、要求安全度水準が比較的低いＳＩＬ１から最も水準の高いＳＩＬ４まで４段階を規定している。非特許文献１は、ＳＩＬ２に対して障害検出および診断を推奨しており、ＳＩＬ３およびＳＩＬ４では、障害検出および診断を強く推奨している。【０００４】
ＣＰＵ（Central Processing Unit）でプログラムを実行することによって処理を行う機器では、プログラム動作の高速化のため、ＲＯＭ（Read-Only Memory）からアクセス速度の速いＲＡＭ（Random-Access Memory）にプログラムを読み込んで実行することが一般に行われている。このため、ＲＡＭには、プログラムの実行中に変更されるデータと変更されないデータが混在する。【０００５】
ＲＡＭに記憶されたデータは、ＲＡＭの故障、製造上の障害、または宇宙線等によるデータの意図しない改変が発生する可能性がある。ＲＡＭに記憶したデータが正常であることを定期的に確認するため、プログラムまたは他のロジック回路により診断する必要がある。【０００６】
例えば、特許文献１には、制御対象の制御中に、記憶手段をチェックする方法が記載されている。特許文献１の記憶手段のチェック方法は、データを記憶する複数のＲＡＭのバンクを備えたＲＡＭのバンクのチェック方法であって、チェック対象となる２つのＲＡＭのバンクに同じチェック処理（制御演算と監視演算）を行い、その両演算結果（チェック結果）が同じか否かを判別するようにする。制御演算および監視演算した結果をそれぞれのＲＡＭのバンクに書き込みし、その書き込みした値を読み出して、両者の値が一致するか否かを判定する。
【先行技術文献】
【特許文献】
【０００７】
【特許文献１】特開２００２−２８８０４７号公報
【非特許文献】
【０００８】
【非特許文献１】IEC 61508-1 〜 IEC 61508-7, International Electrotechnical Commission: 1998-12 〜 2000-03
【発明の概要】
【発明が解決しようとする課題】
【０００９】
プロセスの実行中に変更されるデータは、巡回冗長検査（以下、ＣＲＣ＝Cyclic Redundancy Check）または二重書き込み（double RAM）等を用いて診断を行う場合、データが変更されると同時に、確認元のデータ（ＣＲＣ符号または比較元データ）を書き換える必要がある。そのため、ソフトウエア処理が煩雑になる。【００１０】
プロセスの実行中に変更されないデータは、チェッカーボード、ウォークビット等の診断を行う場合、診断の処理そのものが書き換えられる虞があるため、プログラムの動作を監視しながら書き込み、読み出しを行う必要がある。そのため、ソフトウエア処理が煩雑になる。【００１１】
本発明は、上述のような事情に鑑みてなされたもので、プロセスの実行中にそのプロセスが使用するメモリの診断を比較的容易に行えるメモリ診断方法、メモリ診断装置およびメモリ診断プログラムを提供することを目的とする。
【課題を解決するための手段】
【００１２】
本発明の第１の観点に係るメモリ診断方法は、プロセスの実行中にプロセスが使用するメモリを診断する方法である。変動領域診断ステップは、プロセスが書き込み処理を行う可能性のある第１のデータを記憶するメモリの変動領域において、変動領域に記憶している第１のデータを、記憶しているメモリの領域以外の退避領域に記憶させ、その退避領域に記憶させた第１のデータを記憶していた変動領域に既知のデータを書き込む。そして、既知のデータを書き込んだ同じ領域のデータを読み出して、書き込んだ既知のデータと一致するか否かを判断する。また、固定領域診断ステップは、プロセスの実行中に変更されない第２のデータを記憶するメモリの領域である固定領域において、記憶するデータに予め誤り検出符号を付加して固定領域に記憶しておく。そして、固定領域から読み出したデータから演算した誤り検出符号と、付加して記憶した誤り検出符号とを比較してデータ誤りの有無を判断する。【００１３】
本発明の第２の観点に係るメモリ診断装置は、プロセスの実行中にプロセスが使用するメモリの診断を行う。変動領域診断部は、プロセスが書き込み処理を行う可能性のある第１のデータを記憶するメモリの変動領域において、変動領域に記憶している第１のデータを、記憶しているメモリの領域以外の退避領域に記憶させ、その退避領域に記憶させた第１のデータを記憶していた変動領域に既知のデータを書き込む。そして、既知のデータを書き込んだ同じ領域のデータを読み出して、書き込んだ既知のデータと一致するか否かを判断する。また、固定領域診断部は、プロセスの実行中に変更されない第２のデータを記憶するメモリの領域である固定領域において、記憶するデータに予め誤り検出符号を付加して固定領域に記憶しておく。そして、固定領域から読み出したデータから演算した誤り検出符号と、付加して記憶した誤り検出符号とを比較してデータ誤りの有無を判断する。【００１４】
本発明の第３の観点に係るメモリ診断プログラムは、コンピュータに、そのコンピュータでプロセスを実行しているときに、本発明の第１の観点に係るメモリ診断方法を実行させることを特徴とする。
【発明の効果】
【００１５】
本発明によれば、プロセスが書き換えることのないデータと書き換える可能性のあるデータが混在するメモリを、プロセスの実行中に比較的容易に診断することができる。
【図面の簡単な説明】
【００１６】
【図１】本発明の実施の形態１に係るプロセス実行装置の構成例を示すブロック図である。
【図２】実施の形態１に係るプロセス実行装置のハードウェア構成の例を示すブロック図である。
【図３】実施の形態１に係るプロセス実行装置のＲＡＭ割当の例を示す図である。
【図４】実施の形態１に係る固定領域診断の例を説明する図である。
【図５】実施の形態１に係る固定領域診断の異なる例を説明する図である。
【図６Ａ】実施の形態１に係る変動領域診断の例を説明する図である。
【図６Ｂ】変動領域の一部のデータを退避領域に記憶させた状態を示す図である。
【図６Ｃ】変動領域の一部に検査用データを記憶させた状態を示す図である。
【図７】実施の形態１に係る固定領域の誤り検出符号を設定する動作の一例を示すフローチャートである。
【図８】実施の形態１に係る固定領域診断の動作の一例を示すフローチャートである。
【図９】実施の形態１に係る変動領域診断の動作の一例を示すフローチャートである。
【図１０】本発明の実施の形態２に係るブレーキ制御システムの構成例を示すブロック図である。
【図１１】本発明の実施の形態３に係るプロセス実行装置の構成例を示すブロック図である。
【発明を実施するための形態】
【００１７】
（実施の形態１）
図１は、本発明の実施の形態１に係るプロセス実行装置の構成例を示すブロック図である。プロセス実行装置１００は、メモリ診断部１、プロセス実行部５、ＲＯＭ（Read-Only Memory）６、およびＲＡＭ（Random-Access Memory）７から構成されている。ＲＡＭ７は固定領域８と変動領域９に分けられる。メモリ診断部１は、固定領域診断部２、変動領域診断部３および診断結果通知部４を備える。
【００１８】
ＲＯＭ６にはプロセス実行部５の処理を行うプログラム、定数データおよびその他のデータが記憶されている。ＲＯＭ６のプログラムと定数データは、ＲＡＭ７の固定領域８にロードされる。プロセス実行部５は、ＲＯＭ６からＲＡＭ７にロードされたプログラムが、ＲＡＭ７および入出力装置などを資源として用いてＣＰＵで実行されることによって、プロセス実行装置１００の目的の処理を行う。
【００１９】
ＲＡＭ７の固定領域８は、ＲＯＭ６に記憶されているプログラムと定数データがロードされ、プロセス実行中にデータが書き換えられることがない領域である。ＲＡＭ７の変動領域９は、プロセスが実行中に作業領域として用いる記憶領域である。変動領域９には、変数、定数、一次記憶される各種のパラメータ、および、プロセス実行中のＣＰＵスタックなどが記憶される。なお、本実施の形態では、診断対象をＲＡＭ７としているが、書き換え可能な記憶媒体であれば、ＮＶＲＡＭ（Non Volatile RAM：不揮発性メモリ）、ＥＥＰＲＯＭ（Electrically Erasable Programmable ROM）、Ｆｌａｓｈ ＲＯＭなどでも診断対象とすることができる。また、１種類の記憶媒体に限らず、ＲＡＭ、ＮＶＲＡＭ、ＥＥＰＲＯＭなどの組合せを診断対象とすることもできる。
【００２０】
メモリ診断部１の固定領域診断部２は、プロセス実行部５の処理中に、ＲＡＭ７の固定領域８に記憶されたデータが正しいか否かを診断する。固定領域８の診断は、固定領域８に記憶するデータに予め誤り検出符号を付加しておいて、固定領域８から読み出したデータから演算した誤り検出符号と、付加して記憶した誤り検出符号とを比較してデータ誤りの有無を判断することによって行う。
【００２１】
変動領域診断部３は、プロセス実行部５の処理中に、ＲＡＭ７の変動領域９が正常に動作するか否かを診断する。変動領域９の診断は、変動領域９に記憶しているデータを記憶している領域以外の退避領域に記憶させ、そのデータを記憶していた変動領域９に既知のデータを書き込み、同領域のデータを読み出して、書き込んだ既知のデータと一致するか否かを判断することによって行う。
【００２２】
既知のデータとは、変動領域９に書き込む前にそのビットパターンが変動領域診断部３で判っているデータであって、変動領域９に書き込んだのちも変動領域診断部３で他のデータと比較できるデータである。既知のデータには、プログラムのデータで定義される固定データと、プログラムまたは論理演算回路で何らかの演算を行って生成されるデータの場合がある。固定データには、複数のビットパターンから選択するものを含む。演算を行って生成されるデータには、例えば、メモリ診断を行う回数や時刻から所定の演算式で算出するデータ、あるいは擬似乱数を発生してビットパターンを生成するデータなどを含む。演算を行って生成されるデータとして、変動領域９に記憶しているデータを読み出してビット反転させたデータを用いることもできる。
【００２３】
診断結果通知部４は、固定領域診断部２または変動領域診断部３でデータ誤りを検出した場合に、データ誤りがあったことをプロセス実行部５に通知する。
【００２４】
実施の形態１では、メモリ診断部１は、プロセス実行部５と同じように、ＲＯＭ６からＲＡＭ７にロードされたプログラムが、ＲＡＭ７を資源として用いてＣＰＵで実行されることによって、メモリ診断処理を行う。
【００２５】
図２は、実施の形態１に係るプロセス実行装置のハードウェア構成の例を示すブロック図である。プロセス実行装置１００は、図２に示すように、ＣＰＵ２１、ＲＡＭ７、ＲＯＭ６およびＩ／Ｏ２４を備える。ＲＡＭ７、ＲＯＭ６およびＩ／Ｏ２４はいずれも内部バス２０を介してＣＰＵ２１に接続されている。
【００２６】
ＲＯＭ６に記憶されＲＡＭ７にロードにされる制御プログラム２５が、ＣＰＵ２１の上で走行することによって、プロセス実行装置１００の処理を実行する。
【００２７】
ＲＡＭ７は、ＲＯＭ６に記憶されている制御プログラム２５をロードし、プロセス実行部５およびメモリ診断部１の作業領域として用いられる。図２に示す例では、診断対象をＣＰＵ２１の外部ＲＡＭとしているが、ＣＰＵ２１に内蔵されたＲＡＭでもよい。
【００２８】
ＲＯＭ６は、一般的な読み出し専用メモリ（Read-Only Memory）で構成されるが、それ以外にフラッシュメモリ、ハードディスク、ＤＶＤ−ＲＡＭ（Digital Versatile Disc Random-Access Memory）、ＤＶＤ−ＲＷ（Digital Versatile Disc ReWritable）等の不揮発性メモリから構成される場合がある。ＲＯＭ６は、ＣＰＵ２１を用いてプロセス実行部５およびメモリ診断部１の処理を行うためのプログラムを予め記憶する。
【００２９】
Ｉ／Ｏ２４は、プロセス実行装置１００が外部の機器とデータの授受を行うために、様々な入出力装置または通信装置と接続する、シリアルインタフェースまたはパラレルインタフェースから構成される。プロセス実行装置１００はＩ／Ｏ２４を介して、外部の機器とデータを入出力する。
【００３０】
図３は、実施の形態１に係るプロセス実行装置のＲＡＭ割当の例を示す図である。ＲＡＭ７ には、プログラムデータ（制御、診断）７１、変数７２ 、定数７３、動作に関するパラメータ７４、ＣＰＵスタック７５等多種のデータが記憶される。ＲＡＭ７にはさらに、プログラムデータの誤り検出符号８１が記憶される。プログラムデータ７１および誤り検出符号８１は、固定領域８に含まれる。その他の変数７２、定数７３、パラメータ７４およびＣＰＵスタック７５などは変動領域９に含まれる。
【００３１】
本実施の形態では、固定領域８の診断に用いる誤り検出の方法として、２重書き込み、パリティ符号、チェックサム、ハミング符号、巡回冗長検査（ＣＲＣ）、またはハッシュ関数を用いる誤り検出を含む。２重書き込みの参照用データまたはそのビット反転データは、誤り検出符号８１の１種である。本実施の形態では、誤り検出符号は、誤り検出訂正符号を含むものとする。
【００３２】
固定領域診断部２は、プロセス実行部５の処理を開始するのに先立って、固定領域８に記憶するデータに誤り検出符号８１を付加する。そして、プロセス実行部５の処理中に、固定領域８から読み出したデータから演算した誤り検出符号と、先に付加した誤り検出符号８１とを比較してデータ誤りの有無を判断する。
【００３３】
図４は、実施の形態１に係る固定領域診断の例を説明する図である。図４の例では、誤り検出符号８１として、ビット反転したプログラムデータを用いる。ビット反転したデータを書き込むことは、２重書き込みの一種である。プロセス実行装置１００を起動すると、ＲＯＭ６のプログラムデータ６１がＲＡＭ７の固定領域８にロードされる。固定領域８にロードされたプログラムデータ７１はＣＰＵ２１で実行され、プロセス実行部５およびメモリ診断部１の処理を行う。
【００３４】
固定領域診断部２は、プロセス実行部５の処理を開始するのに先立って、プログラムデータをビット反転して、誤り検出符号８１として固定領域８に記憶する。固定領域診断部２は、プロセス実行部５の処理中に、固定領域８からプログラムデータ７１を読み出しビット反転させて、対応する誤り検出符号８１（ビット反転したプログラムデータ）と比較する（図４矢印Ｃ）。ビット反転したプログラムデータ７１と誤り検出符号８１に相違があれば、固定領域診断部２は、ＲＡＭ７のその部分に障害があると判断する。
【００３５】
固定領域診断部２は、プログラムデータ７１のビット反転と誤り検出符号８１の比較をプログラムデータ全体を一括して行う必要はない。適当なブロックに分割して、ブロックごとにビット反転および比較を行えばよい。また、固定領域８の診断は、いつでも中断して再開することができるので、プロセス実行部５の処理より優先度の低いタスクで実現することができる。
【００３６】
図５は、実施の形態１に係る固定領域診断の異なる例を説明する図である。図５の例では、誤り検出符号８１として、巡回冗長検査符号（ＣＲＣ符号）を用いる。固定領域診断部２は、プログラムデータ７１をブロックに分割して、ブロックごとにＣＲＣ符号を演算する。ＣＲＣ符号は、プログラムデータ７１とは別の領域に記憶する。図５では、ブロック＃１〜＃ｎのそれぞれのＣＲＣ符号を、＃１ＣＲＣ〜＃ｎＣＲＣにそれぞれ記憶している。
【００３７】
固定領域診断部２は、プロセス実行部５の処理を開始するのに先立って、プログラムデータ７１のブロックごとのＣＲＣ符号を固定領域８に記憶する。固定領域診断部２は、プロセス実行部５の処理中に、固定領域８から順次プログラムデータ７１のブロックを読み出し、そのＣＲＣ符号を演算する。そして、記憶しておいたそのブロックのＣＲＣ符号と、演算したＣＲＣ符号を比較する。２つのＣＲＣ符号に相違があれば、固定領域診断部２は、そのブロックに障害があると判断する。この場合も、固定領域８の診断は、いつでも中断して再開することができるので、プロセス実行部５の処理より優先度の低いタスクで実現することができる。
【００３８】
プログラムデータ７１の誤り検出符号８１にさらに誤り検出符号を付加して、誤り検出符号８１を記憶する固定領域８の診断を行うこともできる。例えば、図４の誤り検出符号８１（ビット反転したプログラムデータ）に、チェックサムおよび／または水平垂直パリティを付加しておいて、誤り検出符号８１を記憶した領域を診断することができる。
【００３９】
図６Ａ〜図６Ｃは、実施の形態１に係る変動領域診断の例を説明する図である。図６Ａは、変動領域９をブロックに分割し、退避領域９１を割り当てた様子を示す。図６Ｂは、変動領域の一部のデータを退避領域に記憶させた状態を示す図である。図６Ｂでは、変動領域９のブロック＃ｘのデータを、退避領域９１に記憶させたことを示す。
【００４０】
図６Ｃは、変動領域の一部に検査用データを記憶させた状態を示す図である。図６Ｃの例は、退避させたブロック＃ｘに検査用データ９２を記憶させた様子を示す。検査用データ９２は、変動領域診断部３が保持または生成する既知のデータである。検査用データ９２は、例えば、全ビットが１のデータ、全ビットが０のデータ、１と０のビットを交互に並べたデータ（１０１０．．．もしくは０１０１．．．）、またはその他の固定ビットパターンなどである。
【００４１】
変動領域診断部３は、退避させたデータが記憶されていた領域に、既定の検査用データ９２を書き込む。そして、検査用データ９２を書き込んだ同じ領域からデータを読み出して、書き込んだ元のデータと比較する。変動領域診断部３は、書き込んだデータと読み出したデータのビットに相違があれば、ＲＡＭ７のその部分に障害があると判断する。変動領域診断部３は、検査用データ９２を書き込んだ同じ領域からデータを読み出したのちに、退避領域９１に記憶させたデータを元の領域に書き込む。退避領域９１は新たなデータを記憶できるように解放されて、ＲＡＭ７の変動領域９は図６Ａの状態に戻る。
【００４２】
変動領域診断部３は、データを退避させて検査用データ９２を書き込むブロックを順次変えて、ブロックごとにＲＡＭ７の診断を行う。また、退避領域９１にも検査用データ９２を書き込み読み出しして、診断する。退避領域９１をプロセス実行部５で使用することがなければ、退避領域９１のデータを別の領域に退避させる必要はない。
【００４３】
変動領域９の診断は、変動領域９の一部のデータをＲＡＭ７の空いている領域（退避領域９１）に退避させ、退避させたデータが記憶されていた領域に既定の検査用データ９２を書き込むので、少なくとも退避させたデータを使用しているプロセスが待ち状態のときに行うのが望ましい。できれば、プロセス実行部５（メモリ診断部１の処理以外）のすべてのプロセスが待ち状態の時間に行うことが望ましい。その他、プロセス実行部５の最も優先順位の高いタスクが待ち状態になるときに、変動領域９の１つのブロックの診断を行ってもよい。
【００４４】
変動領域診断部３では、変動領域９を診断する単位のブロックのサイズを、プロセス実行部５の処理に支障がないように適切に設定する。すなわち例えば、退避したデータを元の領域に書き込む時間が、プロセス実行部５の最も優先度の高い割り込みの処理を待たせることができる時間より短くなるように、ブロックのサイズを設定する。そうすれば、変動領域診断中に割り込みが発生した場合でも、変動領域診断を中止して退避したデータを元の領域に書き込めば、プロセス実行部５の処理には支障がない。
【００４５】
変動領域診断部３は、変動領域９のブロックを診断するごとに、検査用データ９２を変えてもよい。例えば、複数の固定ビットパターンを用意しておいて、１つのブロックを診断する回ごとに、または、診断するブロックごとに、異なる固定ビットパターンを選択して診断に用いてもよい。固定ビットパターンを用いる固定パターンデータテスト以外に、チェックボードテスト、ウォーキングビットテスト、または擬似ランダムデータテストを行うこともできる。検査用データ９２のビットパターンを変えることによって、あるビットのデータが固定の状態になってしまう障害を検出することができる。
【００４６】
図７は、実施の形態１に係る固定領域の誤り検出符号を設定する動作の一例を示すフローチャートである。プロセス実行装置１００が起動されて、ＲＯＭ６からＲＡＭ７の固定領域８にプログラムデータ７１がロードされたのちに、図７の処理が起動される。
【００４７】
固定領域診断部２は、固定領域８の先頭アドレスと末尾アドレスを読み込む（ステップＳ１０）。これらのデータは、プログラムデータ７１に設定されているものとする。ブロック番号変数ｉに１を初期設定して（ステップＳ１１）、固定領域８のｉ番目のブロックのデータの誤り検出符号８１を演算する（ステップＳ１２）。誤り検出符号８１は、ＲＯＭ６のデータで与えられてもよい。そして、誤り検出符号８１を固定領域８の所定の部分に書き込む（ステップＳ１３）。
【００４８】
誤り検出符号８１がＣＲＣ符号の場合は、図５に示すようにブロック＃１のＣＲＣ符号を＃１ＣＲＣに書き込むことになる。誤り検出符号８１がビット反転の場合は、図４に示すように、プログラムデータ７１をビット反転して書き込む。
【００４９】
固定領域診断部２は、ブロック番号変数ｉをインクリメントして（ステップＳ１４）、その番号のブロック（残りデータ）があれば（ステップＳ１５；ＹＥＳ）、ステップＳ１２に戻って、そのブロックのデータの誤り検出符号８１を演算することから繰り返す。固定領域８にｉ番目のブロック（残りデータ）がなければ（ステップＳ１５；ＮＯ）、誤り検出符号設定の処理を終了する。
【００５０】
図８は、実施の形態１に係る固定領域診断の動作の一例を示すフローチャートである。例えば、固定領域診断の処理は、プロセス実行部５の処理より優先度の低いタスクとして常時動作する。
【００５１】
固定領域診断部２は、診断するブロックの先頭アドレスを設定し（ステップＳ２０）、診断するブロックのデータを読み出す（ステップＳ２１）。そして、読み出したデータから誤り検出符号を生成する（ステップＳ２２）。誤り検出がＣＲＣ方法の場合は、ＣＲＣ符号を演算する。誤り検出符号８１が図４のようなビット反転データの場合は、読み出したデータをビット反転させたデータを生成する。
【００５２】
固定領域診断部２は、診断するブロックの誤り検出符号８１を読み出し（ステップＳ２３）、ステップＳ２２で生成した誤り検出符号と比較する（ステップＳ２４）。両者の符号が一致すれば（ステップＳ２４；ＹＥＳ）、診断するブロックのデータは正常であると判断して、つぎのブロックの診断に移る。すなわち、診断するブロックの先頭アドレスを１ブロック分インクリメントして（ステップＳ２５）、固定領域８であれば（ステップＳ２６；ＹＥＳ）、ステップＳ２１に戻って診断するブロックの読み出しから繰り返す。固定領域８でなければ（ステップＳ２６；ＮＯ）、ステップＳ２０に戻って、固定領域８の先頭のブロックから診断を繰り返す。
【００５３】
ステップＳ２２で生成した誤り検出符号と、読み出した診断するブロックの誤り検出符号８１が一致しなければ（ステップＳ２４；ＮＯ）、診断するブロックのデータに異常があると判断する。診断結果通知部４は、固定領域８にエラーがあることをプロセス実行部５に通知する（ステップＳ２７）。プログラムデータにエラーがある場合は、固定領域診断部２は処理を終了する。
【００５４】
図９は、実施の形態１に係る変動領域診断の動作の一例を示すフローチャートである。変動領域診断部３は、診断するブロックの先頭アドレスを設定し（ステップＳ３０）、診断するブロックのデータを退避領域９１に書き込む（ステップＳ３１）。そして、診断するブロックに検査用データ９２を書き込む（ステップＳ３２）。検査用データ９２は前述のとおり、固定ビットパターン、チェックボードテスト、ウォーキングビットテスト、または擬似ランダムデータテストのデータである。
【００５５】
変動領域診断部３は、診断するブロックからデータを読み出し（ステップＳ３３）、退避領域９１のデータを診断するブロックに書き込む（ステップＳ３４）。退避しておいたデータを戻すのは、診断するブロックから書き込んだデータを読み出したのちであればいつでもかまわない。変動領域診断部３は、ステップＳ３３で読み出したデータと検査用データ９２を比較する（ステップＳ３５）。両者が一致すれば（ステップＳ３５；ＹＥＳ）、診断するブロックは正常であると判断して、つぎのブロックの診断に移る。すなわち、診断するブロックの先頭アドレスをインクリメントして（ステップＳ３６）、変動領域９であれば（ステップＳ３７；ＹＥＳ）、ステップＳ３１に戻って診断するブロックのデータを退避することから繰り返す。変動領域９でなければ（ステップＳ３７；ＮＯ）、ステップＳ３０に戻って、変動領域９の先頭のブロックから診断を繰り返す。
【００５６】
ステップＳ３３で読み出したデータと検査用データ９２が一致しなければ（ステップＳ３５；ＮＯ）、診断するブロックに異常があると判断する。診断結果通知部４は、変動領域９にエラーがあることをプロセス実行部５に通知する（ステップＳ３８）。プログラムデータ７１にエラーがある場合は、変動領域診断部３は処理を終了する。
【００５７】
前述のとおり、変動領域診断は少なくとも退避させたデータを使用しているプロセスが待ち状態のとき、望ましくはすべてのプロセスが待ち状態の時間に行う。また、変動領域診断中（厳密には、検査用データ９２の書き込みを始めてから、退避領域９１のデータを診断するブロックに書き込み始めるまで）に、プロセス実行部５が待ち状態から復帰した場合には、診断していたブロックの診断処理をいったん中止して、退避したデータを元のブロックに書き込む。その場合、プロセス実行部５が待ち状態になったときに、診断するブロックのデータを退避領域９１に書き込むこと（ステップＳ３１）から再開する。
【００５８】
以上説明したように、本実施の形態１のプロセス実行装置１００では、プログラムデータ７１などのプロセス実行部５が書き換えることがないデータを記憶する固定領域８は、データの書き換えを行わずに診断できる。その結果、ＣＰＵ２１のプログラムカウンタ等、プロセスの状態に左右されず診断できるため、メモリ診断するためのプログラムの簡素化が可能となる。そして、変数７２またはＣＰＵスタック７５などプロセス実行部５によって書き換えられる可能性のあるデータを記憶する変動領域９は、誤り検出符号を用いずに、既定の検査用データ９２を書き込み読み出したデータの比較によって診断する。その結果、プロセス実行部５がデータを書き換えたときでも、比較元のデータの書き換えおよび誤り検出符号の演算が不要になる。
【００５９】
本実施の形態１によれば、プロセスが使用するメモリに固定領域８と変動領域９が混在する場合でも、プロセスの実行中にそのプロセスが使用するメモリの診断を比較的容易に行うことができる。また、ＲＡＭ７のデータを欠損することなく、容易に全てのデータ領域を診断することができる。
【００６０】
（実施の形態２）
図１０は、本発明の実施の形態２に係るブレーキ制御システムの構成例を示すブロック図である。実施の形態２のブレーキ制御システム２００では、実施の形態１のプロセス実行装置１００を鉄道車両のブレーキ制御装置１１０として用いる。ブレーキ制御システム２００は、指令装置１２０、ブレーキ制御装置１１０およびブレーキ装置１３０から構成される。ブレーキ制御装置１１０は、鉄道車両を構成する各車両のブレーキ装置１３０と、各車両間のネットワーク（図示せず）を経由して通信する。指令装置１２０は、ブレーキ制御装置１１０に対して、車両全体の減速度を指令する。
【００６１】
ブレーキ制御装置１１０は、各車両の過重に応じたブレーキ力をその車両のブレーキ装置１３０に指令する。各車両の過重は、ブレーキ装置１３０で検出して、ブレーキ制御装置１１０に送信される。またブレーキ制御装置１１０は、ブレーキ装置１３０から各車両の車輪回転速度を入力し、各車輪の滑走状態を検出する。減速中には、原則として最も速い回転速度（車輪の周速）の車輪を基準にして、それより遅い回転速度の車輪は滑走していると判断できる。ブレーキ制御装置１１０は、滑走している車両に対しては、ブレーキ力を弱めるよう指令する。そして、車両全体として指令された減速度になるように、弱めたブレーキ力の分を、他の滑走していない車両に分配して、そのブレーキ装置１３０に増加したブレーキ力を指令する。
【００６２】
ブレーキ制御装置１１０は、図１のプロセス実行装置１００と同様に構成される。図１０では、ブレーキ制御装置１１０と指令装置１２０、およびブレーキ制御装置１１０とブレーキ装置１３０の間の通信を行う通信部を省略している。ブレーキ制御装置１１０のプロセス実行部５は、上述のブレーキ制御処理をプロセスとして実行する。ブレーキ制御装置１１０のメモリ診断部１は、ブレーキ制御装置１１０の動作中すなわち鉄道車両の通常運転中に、ブレーキ制御装置１１０のＲＡＭ７の診断を実施する。ブレーキ制御装置１１０のメモリ診断部１は、実施の形態１と同様にＲＡＭ７の診断を行う。
【００６３】
ブレーキ制御装置１１０は一定の周期ごとに、例えば１０ｍｓｅｃごとに、減速度の指令と、各車両の速度、各車両の過重、車輪の回転速度などから、各車両のブレーキ力を演算し、また、滑走状態を検出して、ブレーキ力の演算を行う。メモリ診断部１は、このプロセス実行部５の演算処理を行っていない時間に、前述のメモリ診断を行う。
【００６４】
鉄道車両のブレーキ制御では一般的に、状態の変化として車輪の回転速度の変化が最も速いので、車輪の回転速度の検出処理を最も短い周期で行う。例えば、車輪の回転速度検出の割り込みが５ｍｓｅｃ周期で行われる場合、メモリ診断部１は、速度割り込み処理の時間に掛からない短い時間、例えば５００μｓｅｃの間に、少なくとも変動領域９のデータの退避、検査用データの書き込みおよび読み出しが行えるように、診断する１つのブロックのサイズを設定する。
【００６５】
変動領域９の診断は、図９のフローチャートについて説明したように、ブロックごとに行う。鉄道車両のブレーキ制御の場合、速度割り込みの間に１つのブロックの診断処理を行う。診断するブロックを割り込み処理ごとに順次進めて、変動領域９すべてのブロックの診断を終えたら、先頭に戻ってブロックごとの診断を繰り返す。
【００６６】
固定領域８の診断については、実施の形態１で説明したとおり、どのタイミングでも中断できるので、最も優先度の低いタスクで空き時間に行えばよい。
【００６７】
以上説明したように、実施の形態２のブレーキ制御装置１１０によれば、鉄道車両の通常運転中に、そのブレーキ制御装置１１０が使用するＲＡＭ７すべての診断を比較的容易に行うことができる。鉄道車両の運転中にＲＡＭ７の診断を行うので、運転中にＲＡＭ７の異常が発生した場合でも、ただちに異常を検出し、少なくとも緊急停止の動作を行って危険を回避できる。また、ブレーキ制御装置１１０が冗長構成を備える場合は、待機系に切り替えて運転を継続することができる。そののち、しかるべき安全な場所と時間に、異常箇所の点検と交換を行うことができる。このようにして、鉄道車両の機能安全を確保することができる。
【００６８】
なお、本実施の形態２のメモリ診断部１などの構成は、ブレーキ制御装置１１０に限らず、鉄道車両のメモリを使用するあらゆる制御装置に適用することができる。
【００６９】
（実施の形態３）
図１１は、本発明の実施の形態３に係るプロセス実行装置の構成例を示すブロック図である。実施の形態３では、プロセス実行部５を実現するＣＰＵ２１とは独立にメモリ診断装置１１を備える。メモリ診断装置１１は、プロセス実行部５が使用するＲＡＭ７の読み書きができるように、プロセス実行装置１００の内部バス２０に接続される。
【００７０】
プロセス実行装置１００を構成するＣＰＵ２１、ＲＡＭ７、ＲＯＭ６およびＩ／Ｏ２４は、実施の形態１と同じである。ただし、ＲＡＭ７にロードされる制御プログラム２６には、プロセス実行部５のプログラムを含むが、メモリ診断装置１１のプログラムを含まない。実施の形態３では、ＲＯＭ６に記憶されＲＡＭ７にロードにされる制御プログラム２６が、ＣＰＵ２１の上で走行することによって、プロセス実行部５の処理を実行する。
【００７１】
メモリ診断装置１１は、プロセス実行部５とは別のハードウェアで構成される。メモリ診断装置１１は、内部バス２０を介してＲＡＭ７の読み書きを行う。メモリ診断装置１１は、実施の形態１のメモリ診断部１と同様に、固定領域診断部１２、変動領域診断部１３および診断結果通知部１４を備え、メモリ診断部１と同じように動作する。メモリ診断装置１１は、例えばマイクロコンピュータ、ＦＰＧＡ（Field Programmable Gate Array）、または専用のＬＳＩで構成することができる。
【００７２】
メモリ診断装置１１は、ＲＯＭ６からＲＡＭ７にプログラムデータがロードされたのちに起動されて、固定領域診断部１２は、ＲＡＭ７の固定領域８に誤り検出符号８１を付加する。固定領域８の先頭アドレスおよび末尾アドレスは、例えば制御プログラム２６の起動処理で与えられる。
【００７３】
固定領域診断部１２は、プロセス実行部５の処理中に、固定領域８から読み出したデータから演算した誤り検出符号と、先に付加した誤り検出符号８１とを比較してデータ誤りの有無を判断する。実施の形態３では、固定領域診断部１２の処理は、ＲＡＭ７からのデータ読み出しが他のプロセスのデータ読み書きと衝突しなかぎり、いつ実行されてもよい。したがって、他のプロセスのデータ読み書きが発生したときに処理を中断すれば、常時動作してよい。
【００７４】
変動領域診断部１３は、プロセス実行部５の処理中に、ＲＡＭ７の変動領域９が正常に動作するか否かを診断する。変動領域９の診断は、変動領域９に記憶しているデータを記憶している領域以外に一時的に記憶させ、そのデータを記憶していた変動領域９に既知のデータを書き込み、同領域のデータを読み出して、書き込んだ既知のデータと一致するか否かを判断する。
【００７５】
変動領域診断部１３は、プロセス実行部５のすべてのプロセスが待ち状態の時間に、変動領域９の診断を行う。プロセス実行部５が待ち状態であることは、内部バス２０を介して、プロセス実行部５によってＣＰＵ２１から通知されるようにする。例えば、メモリ診断装置１１の内部に設けたフラグを、ＣＰＵ２１からオン・オフすることによって、待ち状態かどうかを通知するようにできる。
【００７６】
診断結果通知部１４は、固定領域診断部１２または変動領域診断部１３で、ＲＡＭ７の障害を検出した場合に、固定領域８または変動領域９にエラーがあることをプロセス実行部５に通知する。
【００７７】
変動領域９のデータを一時的に記憶する退避領域９１は、メモリ診断装置１１の内部に備えられてもよい。その場合、メモリ診断装置１１の退避領域９１も変動領域診断の対象にする。
【００７８】
実施の形態３のメモリ診断装置１１は、実施の形態１のメモリ診断部１と同様に作用し、同等の効果を奏する。
【００７９】
今回開示された実施の形態はすべての点で例示であって制限的なものではないと考えられるべきである。本発明の範囲は上記の説明ではなくて特許請求の範囲によって示され、特許請求の範囲と均等の意味および範囲内でのすべての変更が含まれることが意図される。
【００８０】
その他、前記のハードウェア構成やフローチャートは一例であり、任意に変更および修正が可能である。
【００８１】
ＣＰＵ２１、ＲＡＭ７、ＲＯＭ６、内部バス２０などから構成されるメモリ診断部１のための処理を行う中心となる部分は、専用のシステムによらず、通常のコンピュータシステムを用いて実現可能である。たとえば、前記の動作を実行するためのコンピュータプログラムを、コンピュータが読み取り可能な記録媒体（フレキシブルディスク、ＣＤ−ＲＯＭ、ＤＶＤ−ＲＯＭ等）に格納して配布し、当該コンピュータプログラムをコンピュータにインストールすることにより、前記の処理を実行するメモリ診断部１を構成してもよい。また、インターネット等の通信ネットワーク上のサーバ装置が有する記憶装置に当該コンピュータプログラムを格納しておき、通常のコンピュータシステムがダウンロード等することでメモリ診断部１を構成してもよい。
【００８２】
また、メモリ診断部の機能を、ＯＳ（オペレーティングシステム）とアプリケーションプログラムの分担、またはＯＳとアプリケーションプログラムとの協働により実現する場合などには、アプリケーションプログラム部分のみを記録媒体や記憶装置に格納してもよい。
【００８３】
また、搬送波にコンピュータプログラムを重畳し、通信ネットワークを介して配信することも可能である。たとえば、通信ネットワーク上の掲示板(BBS：Bulletin Board System)に前記コンピュータプログラムを掲示し、ネットワークを介して前記コンピュータプログラムを配信してもよい。そして、このコンピュータプログラムを起動し、ＯＳの制御下で、他のアプリケーションプログラムと同様に実行することにより、前記の処理を実行できるように構成してもよい。
【符号の説明】
【００８４】
１  メモリ診断部
２  固定領域診断部
３  変動領域診断部
４  診断結果通知部
５  プロセス実行部
６  ＲＯＭ
７  ＲＡＭ
８  固定領域
９  変動領域
１１  メモリ診断装置
１２  固定領域診断部
１３  変動領域診断部
１４  診断結果通知部
２０  内部バス
２１  ＣＰＵ
２４  Ｉ／Ｏ
２５  制御プログラム
８１  誤り検出符号
９１  退避領域
９２  検査用データ
１００  プロセス実行装置
１１０  ブレーキ制御装置
１２０  指令装置
１３０  ブレーキ装置
２００  ブレーキ制御システム
【図１】
2011111211.tif 000003
【図２】
2011111211.tif 000004
【図３】
2011111211.tif 000005
【図４】
2011111211.tif 000006
【図５】
2011111211.tif 000007
【図６Ａ】
2011111211.tif 000008
【図６Ｂ】
2011111211.tif 000009
【図６Ｃ】
2011111211.tif 000010
【図７】
2011111211.tif 000011
【図８】
2011111211.tif 000012
【図９】
2011111211.tif 000013
【図１０】
2011111211.tif 000014
【図１１】
2011111211.tif 000015
【国際調査報告】
2011111211.tif 000016
2011111211.tif 000017