(57)【要約】【課題】故障診断プログラム自体にメモリエラーがある場合であっても、メイン処理の性能を低下させることなく短時間で主記憶装置の故障診断を行う簡易な構成の数値制御装置を得ること。【解決手段】数値制御装置が、故障診断の対象となる領域として複数の故障診断領域を有した主記憶装置５と、故障診断を行う故障診断領域のデータを退避させおくＥＣＣテンポラリメモリ６Ａと、故障診断領域の故障診断を行う故障診断部１６と、主記憶装置５の故障診断を行う際に故障診断を行う故障診断領域のデータをＥＣＣテンポラリメモリ６Ａにコピーして退避させる診断領域退避部１５と、故障診断部１６が主記憶装置５の故障診断を行なった後に、ＥＣＣテンポラリメモリ６Ａに退避させておいた故障診断領域のデータを主記憶装置５に戻す診断領域復元部１７と、を備える。【選択図】図４
2011039667.tif 000002
【特許請求の範囲】
【請求項１】
故障診断の対象となる領域として複数の故障診断領域を有した主記憶装置と、
前記主記憶装置とは異なる領域であって、かつ故障診断を行う故障診断領域のデータを退避させおく退避領域と、
前記主記憶装置とは異なる領域であって、かつ前記主記憶装置の故障診断を行う際の割り込みスタックを格納しておく割り込みスタック領域と、
前記故障診断領域の故障診断を行う故障診断部と、
前記主記憶装置の故障診断を行う際に故障診断を行う故障診断領域のデータを前記退避領域にコピーして退避させる診断領域退避部と、
前記主記憶装置の故障診断を行う際にスタック領域を前記主記憶装置から前記割り込みスタック領域に変更するとともに前記主記憶装置の故障診断を行う際のＣＰＵの状態を保存する状態保存部と、
前記故障診断部が前記主記憶装置の故障診断を行なった後に、前記退避領域に退避させておいた前記故障診断領域のデータを前記主記憶装置に戻す診断領域復元部と、
前記故障診断部が前記主記憶装置の故障診断を行なった後に、前記割り込みスタック領域内のデータを用いて前記ＣＰＵの状態を復元するとともに、前記スタック領域を前記割り込みスタック領域から前記主記憶装置に戻す状態復元部と、
を備えることを特徴とする数値制御装置。
【請求項２】
前記故障診断部は、前記ＣＰＵへの割り込み要因が発生した際に、前記故障診断領域の故障診断を行うことを特徴とする請求項１に記載の数値制御装置。
【請求項３】
前記故障診断部は、前記ＣＰＵ以外への割り込み処理が実行された後に、前記故障診断領域の故障診断を行うことを特徴とする請求項１に記載の数値制御装置。
【請求項４】
前記故障診断部は、前記ＣＰＵによるメイン処理の負荷状況に応じて前記故障診断領域の数を決定し、決定した前記故障診断領域の数だけ前記故障診断領域の故障診断を行うことを特徴とする請求項１に記載の数値制御装置。
【請求項５】
前記各故障診断領域には、故障診断の優先順位が設定され、
前記故障診断部は、故障診断の完了していない故障診断領域の中から優先順位が一番高い故障診断領域を先頭の故障診断領域に設定して、前記故障診断領域の故障診断を行うことを特徴とする請求項４に記載の数値制御装置。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、主記憶装置の故障診断を行う数値制御装置に関する。
【背景技術】
【０００２】
電子制御機器などの数値制御装置（制御用マイコン）に使用される主記憶装置（メインメモリ）は、数値制御装置のＣＰＵ（Central  Processing  Unit）が主記憶装置の故障診断を行っている。ＣＰＵは、例えば、数値制御装置への電源投入時に、主記憶装置の故障診断としてＥＣＣ（Error  Check  and  Correct）やパリティ等のエラー検出・訂正を行う。このような故障診断では、電子機器などの制御対象機器の動作に影響を与えることなく短時間で主記憶装置を故障診断することが望まれる。
【０００３】
主記憶装置の故障診断方法として、主記憶装置のメモリ部を所定領域毎に分割し、領域毎に故障診断の要不要を予め指定しておく方法がある。この方法では、故障診断の必要な領域だけを故障診断することによって故障診断時間の短縮を図っている（例えば、特許文献１参照）。
【０００４】
また、主記憶装置の記憶領域を分割するとともに時間同期ジョブやタイマ割り込みを使用して、分割した領域を１領域ずつ周期的に故障診断し、主記装置の動作中の故障診断を実現する方法がある（例えば、特許文献２または特許文献３参照）。
【先行技術文献】
【特許文献】
【０００５】
【特許文献１】特開２００１−９２７２４号公報（第７頁、第１図）
【特許文献２】特開２０００−６６９６３号公報（第５−９頁、第１図〜第５図）
【特許文献３】特開平４−５４２号公報（第５−７頁、第１図〜第６図）
【発明の概要】
【発明が解決しようとする課題】
【０００６】
しかしながら、上記第１の従来技術では、故障検出のために、ＥＣＣやパリティ等のエラー検出・訂正機能を持つ主記憶装置を使用していたので、全アドレスに対して冗長ビットが必要となり、このため主記憶装置が高価になるという問題があった。
【０００７】
また、上記第２または第３の従来技術のように、数値制御装置の主記憶装置を、主記憶装置の動作中にソフトウェアで故障検出する場合、主記憶装置の通常処理を行いながら主記憶装置は故障診断される。このため、診断領域は予め分割され、ジョブあるいは割り込みを使用して一定期間毎に主記憶装置上にある故障診断プログラムが起動される。そして、主記憶装置上にあるスタック領域、ヒープ領域、グローバル変数領域を使用して、全診断領域が複数回に分けて故障診断される。この場合、故障検出ソフトウェア、スタック領域、ヒープ領域、グローバル変数領域を主記憶装置内に配置しているので、これらの配置領域部分が故障した場合に故障検出ができないという問題があった。また、ジョブあるいは割り込みで故障診断プログラムを呼び出す場合のＣＰＵの状態保存や診断完了後の状態復帰のオーバーヘッドが発生するという問題があった。そのうえ、故障診断処理中は、故障診断領域のメモリを使用できないので、他の割り込み処理を実行できず、割り込み応答速度が低下してしまうという問題があった。さらに、所定の時間が来れば必ず故障診断が実施される。このため、通常処理の負荷が最も重いタイミングと分割領域の故障診断の処理タイミングとが重なる場合があり、このような場合であっても通常処理および故障診断の処理時間が処理周期に収まることを保証する設計をしなければならない。したがって、数値制御装置のように処理周期の短いシステムでは、性能が低下してしまうという問題があった。
【０００８】
本発明は、上記に鑑みてなされたものであって、故障診断プログラム自体にメモリエラーがある場合であっても、メイン処理の性能を低下させることなく短時間で主記憶装置の故障診断を行う簡易な構成の数値制御装置を得ることを目的とする。
【課題を解決するための手段】
【０００９】
上述した課題を解決し、目的を達成するために、本発明は、故障診断の対象となる領域として複数の故障診断領域を有した主記憶装置と、前記主記憶装置とは異なる領域であって、かつ故障診断を行う故障診断領域のデータを退避させおく退避領域と、前記主記憶装置とは異なる領域であって、かつ前記主記憶装置の故障診断を行う際の割り込みスタックを格納しておく割り込みスタック領域と、前記故障診断領域の故障診断を行う故障診断部と、前記主記憶装置の故障診断を行う際に故障診断を行う故障診断領域のデータを前記退避領域にコピーして退避させる診断領域退避部と、前記主記憶装置の故障診断を行う際にスタック領域を前記主記憶装置から前記割り込みスタック領域に変更するとともに前記主記憶装置の故障診断を行う際のＣＰＵの状態を保存する状態保存部と、前記故障診断部が前記主記憶装置の故障診断を行なった後に、前記退避領域に退避させておいた前記故障診断領域のデータを前記主記憶装置に戻す診断領域復元部と、前記故障診断部が前記主記憶装置の故障診断を行なった後に、前記割り込みスタック領域内のデータを用いて前記ＣＰＵの状態を復元するとともに、前記スタック領域を前記割り込みスタック領域から前記主記憶装置に戻す状態復元部と、を備えることを特徴とする。
【発明の効果】
【００１０】
本発明によれば、故障診断を行う故障診断領域のデータを退避領域に退避させて故障診断領域の故障診断を行うので、故障診断プログラム自体にメモリエラーがある場合であっても、簡易な構成でメイン処理の性能を低下させることなく短時間で主記憶装置の故障診断を行うことが可能になるという効果を奏する。
【図面の簡単な説明】
【００１１】
【図１】図１は、数値制御装置のハードウェア構成を示す図である。
【図２】図２は、主記憶装置の構成を示す図である。
【図３】図３は、実施の形態１に係るＥＣＣテンポラリメモリのメモリイメージを説明するための図である。
【図４】図４は、本発明の実施の形態１に係る数値制御装置の機能構成を示すブロック図である。
【図５】図５は、実施の形態１に係る数値制御装置の故障診断処理手順を示すフローチャートである。
【図６】図６は、実施の形態２に係る数値制御装置の故障診断処理手順を示すフローチャートである。
【図７】図７は、実施の形態３に係るＥＣＣテンポラリメモリのメモリイメージを説明するための図である。
【図８】図８は、実施の形態３に係る数値制御装置の故障診断処理手順を示すフローチャートである。
【発明を実施するための形態】
【００１２】
以下に、本発明の実施の形態に係る数値制御装置を図面に基づいて詳細に説明する。なお、この実施の形態によりこの発明が限定されるものではない。
【００１３】
実施の形態１．
図１は、数値制御装置のハードウェア構成を示す図である。図１では、数値制御装置１０の故障診断機能に関するハードウェア構成を示している。数値制御装置１０は、電子機器などを制御するコンピュータなどの装置（制御用マイクロコンピュータなど）である。数値制御装置１０は、ＥＣＣ機能やパリティ機能を備えていない主記憶装置５を有するとともに、領域分割した主記憶装置５の各分割領域（後述の故障診断領域）を、動作中に割り込みにて起動される故障診断プログラムによって故障診断（メモリ診断）する。本実施の形態の数値制御装置１０は、故障診断時に故障診断領域を主記憶装置５以外の領域に退避させる。
【００１４】
数値制御装置１０は、ＣＰＵ１、システムバス２、割り込み線３、割り込み発生器４、主記憶装置５、ＥＣＣテンポラリメモリ６Ａを含んで構成されている。ＣＰＵ１は、割り込み線３を介して割り込み発生器４に接続されるとともに、システムバス２を介して主記憶装置５、ＥＣＣテンポラリメモリ６Ａに接続されている。
【００１５】
割り込み発生器４は、故障診断などを行うための割り込み要因を発生させて、割り込み要因をＣＰＵ１に送る。主記憶装置５は、領域サイズａでｎ分割（ｎは自然数）された故障診断対象のメモリである。ＥＣＣテンポラリメモリ６は、図示しない故障診断プログラムＰｒ、割り込みスタック、故障診断用の変数、一時的に退避させる故障診断領域などを格納する小容量のメモリである。ＣＰＵ１は、主記憶装置５やＥＣＣテンポラリメモリ６Ａを制御する。
【００１６】
つぎに、主記憶装置５の構成とＥＣＣテンポラリメモリ６Ａの構成について説明する。図２は、主記憶装置の構成を示す図である。主記憶装置５は、ＣＰＵ１が直接アクセスすることのできる記憶装置であり、数値制御装置１０内のデータやプログラムを記憶する。主記憶装置５は、領域サイズａでｎ分割されており、領域サイズａの故障診断領域Ｘ１〜Ｘｎで構成されている。
【００１７】
図３は、実施の形態１に係るＥＣＣテンポラリメモリのメモリイメージを説明するための図である。ＥＣＣテンポラリメモリ６Ａは、故障診断プログラムＰｒを格納する故障診断プログラム領域６１、故障診断用のグローバル変数を格納する故障診断用グローバル変数領域６２Ａ、割り込みスタックを格納する割り込みスタック領域６６、故障診断時に故障の診断対象領域（故障診断領域Ｘ１〜Ｘｎの何れか）を退避させる領域サイズａの故障診断時退避領域６７を有している。
【００１８】
故障診断用グローバル変数領域６２Ａには、故障診断用のグローバル変数として、診断領域サイズＰ、領域分割数Ｑ、カウンタ値Ｒが格納される。診断領域サイズＰは、故障診断領域Ｘ１〜Ｘｎの領域サイズａを格納し、領域分割数Ｑは、主記憶装置５の分割数ｎを格納する。カウンタ値Ｒは、故障診断の済んだ故障診断領域の数（カウント値）を格納する。
【００１９】
数値制御装置１０のＣＰＵ１は、図示しないＲＯＭ（Read Only Memory）内に格納されている故障診断プログラムＰｒを読み出してＥＣＣテンポラリメモリ６Ａ内の故障診断プログラム領域６１に展開して故障診断に関する各種処理を実行する。この故障診断処理に際して生じる各種データは、ＥＣＣテンポラリメモリ６Ａ内の故障診断用グローバル変数領域６２Ａなどに一時的に格納され、故障診断領域Ｘ１〜Ｘｎの故障診断が行われる。
【００２０】
図４は、本発明の実施の形態１に係る数値制御装置の機能構成を示すブロック図である。数値制御装置１０は、割り込み発生器４、主記憶装置５、ＥＣＣテンポラリメモリ６Ａに加えて、制御部１１、現在状態保存部１２、故障診断用グローバル変数リード部１３、診断領域算出部１４、診断領域退避部１５、故障診断部１６、診断領域復元部１７、カウンタ値更新部１８、現在状態復元部１９を有している。
【００２１】
現在状態保存部１２は、割り込み発生器４がＣＰＵ１に対して割り込みを発生させた場合に、割り込みをロックするとともに、スタック領域を主記憶装置５からＥＣＣテンポラリメモリ６上にある割り込みスタック領域６６に変更し、現在のＣＰＵ状態（ＣＰＵ１の状態）を保存する。現在状態保存部１２は、ＣＰＵ１が備えている機能である。
【００２２】
故障診断用グローバル変数リード部１３は、ＥＣＣテンポラリメモリ６上にある故障診断用グローバル変数領域６２Ａの診断領域サイズＰと領域分割数Ｑとカウンタ値Ｒとをリードする。
【００２３】
診断領域算出部１４は、故障診断用グローバル変数リード部１３がリードした診断領域サイズＰ、領域分割数Ｑ、カウンタ値Ｒに基づいて、主記憶装置５上にある故障診断領域を算出する。診断領域算出部１４は、故障診断領域Ｘ１〜Ｘｎの中から診断領域サイズＰ、領域分割数Ｑ、カウンタ値Ｒに応じた故障診断領域（診断対象となる故障診断領域）を算出する。
【００２４】
診断領域退避部１５は、診断領域算出部１４が算出した故障診断領域内のデータ（診断領域の内容）をＥＣＣテンポラリメモリ６上にある故障診断時退避領域６７にコピーする。故障診断部１６は、診断領域算出部１４が算出した故障診断領域の故障診断を実施する。
【００２５】
診断領域復元部１７は、故障診断部１６による故障診断処理がエラーでない場合に、ＥＣＣテンポラリメモリ６上にある故障診断時退避領域６７に退避させておいてデータを主記憶装置５上にある故障診断領域にコピーして戻す。換言すると、診断領域復元部１７は、故障診断時退避領域６７に退避させておいてデータを、コピー元の故障診断領域に復元する。例えば、診断領域復元部１７は、故障診断領域Ｘｍ（ｍは１〜ｎの自然数）のデータを故障診断時退避領域６７に退避させていた場合、この退避させておいてデータをコピーして故障診断領域Ｘｍに復元する。
【００２６】
カウンタ値更新部１８は、故障診断時退避領域６７に退避させておいてデータを、診断領域復元部１７がコピー元の故障診断領域に復元した後、ＥＣＣテンポラリメモリ６上にある故障診断用グローバル変数領域６２のカウンタ値Ｒを更新する。
【００２７】
現在状態復元部１９は、スタック領域を割り込みスタック領域６６から主記憶装置５に戻すことによって、故障診断前の状態（現在状態保存部１２が保存したＣＰＵ状態）を復元する。現在状態復元部１９は、スタック領域を故障診断前の状態に戻した後、割り込みのロックを解除する。現在状態復元部１９は、ＣＰＵ１が備えている機能である。
【００２８】
制御部１１は、割り込み発生器４、主記憶装置５、ＥＣＣテンポラリメモリ６Ａ、現在状態保存部１２、故障診断用グローバル変数リード部１３、診断領域算出部１４、診断領域退避部１５、故障診断部１６、診断領域復元部１７、カウンタ値更新部１８、現在状態復元部１９を制御する。
【００２９】
本実施の形態の数値制御装置１０で実行される故障診断プログラムＰｒは、前述の制御部１１、故障診断用グローバル変数リード部１３、診断領域算出部１４、診断領域退避部１５、故障診断部１６、診断領域復元部１７、カウンタ値更新部１８を含むモジュール構成となっている。そして、上記各部が主記憶装置５上にロードされ、制御部１１、現在状態保存部１２、故障診断用グローバル変数リード部１３、診断領域算出部１４、診断領域退避部１５、故障診断部１６、診断領域復元部１７、カウンタ値更新部１８が主記憶装置５上に生成されるようになっている。
【００３０】
つぎに、実施の形態１に係る数値制御装置１０の故障診断処理手順について説明する。図５は、実施の形態１に係る数値制御装置の故障診断処理手順を示すフローチャートである。図５では、故障診断プログラムＰｒによる故障診断処理手順を示している。
【００３１】
数値制御装置１０では、主記憶装置５の故障診断を開始する際に、割り込み発生器４が割り込み要因を発生させ、ＣＰＵ１に対して割り込みを発生させる。これにより、ＣＰＵ１（現在状態保存部１２）は割り込みをロック（禁止）するとともに、スタック領域を主記憶装置５からＥＣＣテンポラリメモリ６上にある割り込みスタック領域６６に変更し、現在のＣＰＵ状態を保存する。そして、ＣＰＵ１は、故障診断プログラム領域６１内に格納されている故障診断プログラムＰｒを実行する。
【００３２】
具体的には、故障診断用グローバル変数リード部１３は、ＥＣＣテンポラリメモリ６上にある故障診断用グローバル変数領域６２Ａの診断領域サイズＰと領域分割数Ｑとカウンタ値Ｒとをリードする（ステップＳ１）。
【００３３】
そして、診断領域算出部１４は、故障診断用グローバル変数リード部１３がリードした診断領域サイズＰ、領域分割数Ｑ、カウンタ値Ｒに基づいて、主記憶装置５上にある故障診断領域を算出する。このとき、診断領域算出部１４は、故障診断領域Ｘ１〜Ｘｎの中から診断領域サイズＰ、領域分割数Ｑ、カウンタ値Ｒに応じた故障診断領域を算出する（ステップＳ２）。
【００３４】
この後、診断領域退避部１５は、診断領域算出部１４が算出した故障診断領域内のデータをＥＣＣテンポラリメモリ６上にある故障診断時退避領域６７にコピーする（ステップＳ３）。そして、故障診断部１６は、診断領域算出部１４が算出した故障診断領域の故障診断を実施する（ステップＳ４）。
【００３５】
故障診断部１６による故障診断処理がエラーであった場合（ステップＳ５、Ｙｅｓ）、ＣＰＵ１は、故障診断をエラー終了する。一方、故障診断部１６による故障診断処理がエラーでなかった場合（ステップＳ５、Ｎｏ）、診断領域復元部１７は、ＥＣＣテンポラリメモリ６上にある故障診断時退避領域６７に退避させておいてデータを主記憶装置５上にある故障診断領域にコピーして戻す（ステップＳ６）。
【００３６】
この後、カウンタ値更新部１８は、ＥＣＣテンポラリメモリ６上にある故障診断用グローバル変数領域６２Ａのカウンタ値Ｒを更新する（ステップＳ７）。具体的には、カウンタ値更新部１８は、カウンタ値Ｒの値に１を加える。
【００３７】
ＣＰＵ１（現在状態復元部１９）は、スタック領域をスタック領域６６から主記憶装置５に戻すことによって、故障診断前のＣＰＵ状態を復元する。現在状態復元部１９は、スタック領域を故障診断前の状態に戻した後、割り込みのロックを解除し、故障診断を正常終了する。
【００３８】
これにより、数値制御装置１０は、割り込み要因発生毎に、故障診断プログラムＰｒと、割り込みスタック領域６６と、故障診断用グローバル変数領域６２Ａと、故障診断時退避領域６７を用いて主記憶装置５の一部分の故障診断を行う。
【００３９】
このような数値制御装置１０では、領域サイズａ×領域数ｎのサイズを持った主記憶装置５を、割り込み発生器４からの割り込み出力間隔×領域数ｎの時間で、数値制御装置１０の動作中に検査（故障診断）することができる。さらに、ＥＣＣテンポラリメモリ６上の故障診断プログラムＰｒを実行し、ＥＣＣテンポラリメモリ６上の故障診断用グローバル変数領域６２Ａと割り込みスタック領域６６と故障診断時退避領域６７を用いて故障診断を行うので、故障診断プログラムＰｒ自体のメモリエラーを検出することが可能になるとともに、メイン処理の性能を低下させることなく動作中の数値制御装置１０で主記憶装置５の故障診断を行うことが可能になる。なお、数値制御装置１０は、割り込み要因発生毎に、複数の故障診断領域を故障診断してもよい。
【００４０】
このように実施の形態１によれば、故障診断プログラムＰｒ自体にメモリエラーがある場合であっても、メイン処理の性能を低下させることなく短時間で主記憶装置５の故障診断を行うことが可能となる。また、ＥＣＣテンポラリメモリ６を用いて故障診断を行うので簡易な構成で故障診断を行うことが可能となる。また、故障診断の割り込みオーバーヘッドの影響がないよう、かつ割り込み応答速度を低下させずにメイン処理の性能を低下させることなく主記憶装置５の故障診断を行うことができる。
【００４１】
実施の形態２．
つぎに、図６を用いてこの発明の実施の形態２について説明する。実施の形態２では、割り込み発生器４が故障診断用の割り込みと故障診断以外の割り込みの両方を発生させる。別言すれば、割り込み発生器４を必ずしも故障診断専用の目的で設置する必要はなく、割り込み発生器４が発生させる割り込みを他の割り込みと共有して用いてもよい。なお、実施の形態２の数値制御装置１０は、実施の形態１の数値制御装置１０と同様のハードウェア構成を有しているのでその説明は省略する。
【００４２】
図６は、実施の形態２に係る数値制御装置の故障診断処理手順を示すフローチャートである。図６では、主記憶装置５の故障診断を行う際のＣＰＵ１の割り込み処理呼び出しルーチンを示している。図６に示す処理のうち、実施の形態１に係る数値制御装置１０が行う処理と同様の処理についてはその説明を省略する。
【００４３】
割り込み発生器４が割り込み要因を発生させると、ＣＰＵ１は図６のフローチャートに示す処理を実行する。具体的には、ＣＰＵ１（現在状態保存部１２）は割り込みをロックするとともに（ステップＳ１１）、スタック領域を主記憶装置５からＥＣＣテンポラリメモリ６Ａ上にある割り込みスタック領域６６に変更する（ステップＳ１２）。そして、ＣＰＵ１は、自身の現在の状態（ＣＰＵ状態）を割り込みスタック領域６６に保存し（ステップＳ１３）、割り込み処理に関する繰り返し処理に入る。
【００４４】
割り込み処理に関する繰り返し処理では、ＣＰＵ１が割り込み要因をチェックする（ステップＳ１４）。ＣＰＵ１は、割り込み要因がなければ（ステップＳ１５、Ｙｅｓ）、繰り返し処理から抜け出す。一方、ＣＰＵ１は、割り込み要因があれば（ステップＳ１５、Ｎｏ）、割り込み要因に対応する割り込み処理を行なう（ステップＳ１６）。この後、ＣＰＵ１は、割り込み処理に対応する割り込み要因をクリアして（ステップＳ１７）、割り込み処理に関する繰り返し処理の先頭に戻る。
【００４５】
ＣＰＵ１は、割り込み要因が無くなるまでステップＳ１４〜Ｓ１７の処理を繰り返す。割り込み要因が無くなることによって繰り返し処理から抜け出した後、ＣＰＵ１はＥＣＣテンポラリメモリ６Ａに格納された主記憶装置５に対する故障診断プログラムＰｒを実行する（ステップＳ１８）。数値制御装置１０では、実施の形態１の図５で説明した処理手順によって主記憶装置５の故障診断を行う。
【００４６】
そして、ＣＰＵ１（現在状態復元部１９）は、スタック領域をスタック領域６６から主記憶装置５に戻すことによって、故障診断前のＣＰＵ状態を復元する（ステップＳ１９）。現在状態復元部１９は、スタック領域を割り込みスタック領域６６から主記憶装置５に戻すことによって、故障診断前のＣＰＵ状態を復元する（ステップＳ２０）。さらに、ＣＰＵ１は、割り込みのロックを解除（割り込みを許可）して（ステップＳ２１）、割り込み処理を終了する。
【００４７】
このような数値制御装置１０では、割り込み発生器４が生成する割り込みを、故障診断を行うための割り込みと、故障診断以外の他の割り込みとの両方に用いることが可能となる。また、故障診断プログラムＰｒは、他の割り込み処理、ＣＰＵ状態の保存処理（ステップＳ１１〜Ｓ１３）およびＣＰＵ状態の復元処理（ステップＳ１９〜Ｓ２１）を行いながら、故障診断を実行できる（処理共有）できるので、実行中の数値制御装置１０でオーバーヘッドなく主記憶装置５の故障診断を実行することができる。また、割り込み処理の最後に故障診断プログラムＰｒを実行するので、他の割り込みへの応答速度は故障診断処理を行わない場合と比較して何ら遜色ない。
【００４８】
このように実施の形態２によれば、故障診断以外の他の割り込み処理を実行した後に故障診断の割り込みを行うので、他の割り込み処理を迅速に実行しつつメイン処理の性能を低下させることなく故障診断を行うことが可能となる。
【００４９】
実施の形態３．
つぎに、図７および図８を用いてこの発明の実施の形態３について説明する。実施の形態３では、メイン処理の負荷状況に応じたタイミングでメイン処理の負荷状況に応じた数の故障診断領域を故障診断する。実施の形態３の数値制御装置１０は、実施の形態１の数値制御装置１０と比較して、ＥＣＣテンポラリメモリ６Ａの代わりにＥＣＣテンポラリメモリ６Ｂを有している。なお、実施の形態３の数値制御装置１０は、ＥＣＣテンポラリメモリ６Ｂ以外は実施の形態１の数値制御装置１０と同様のハードウェア構成を有しており、重複する機能構成についてはその説明は省略する。
【００５０】
図７は、実施の形態３に係るＥＣＣテンポラリメモリのメモリイメージを説明するための図である。なお、図７に示すＥＣＣテンポラリメモリ６Ｂのうち、図３に示したＥＣＣテンポラリメモリ６Ａと同様の構成を有する領域については重複する説明を省略する。
【００５１】
ＥＣＣテンポラリメモリ６Ｂは、故障診断プログラム領域６１、故障診断用グローバル変数領域６２Ｂ、割り込みスタック領域６６、領域サイズａの故障診断時退避領域６７を有している。そして、故障診断用グローバル変数領域６２Ｂには、故障診断用のグローバル変数として、診断領域サイズＰ、領域分割数Ｑ、カウンタ値Ｒとともに、実行プライオリティＷ、初回故障診断実施時刻Ｘ、現在時刻Ｙ、タイムアウト時間Ｚが格納される。診断領域サイズＰ、領域分割数Ｑ、カウンタ値Ｒ、実行プライオリティＷ、初回故障診断実施時刻Ｘ、現在時刻Ｙ、タイムアウト時間Ｚは、故障診断プログラムＰｒが用いる故障診断用のグローバル変数である。
【００５２】
実行プライオリティＷは、故障診断領域毎の故障診断の優先順位を示す情報であり、故障診断領域Ｘ１〜Ｘｎに対応付けられている。初回故障診断実施時刻Ｘは、最初の故障診断実施時刻である。現在時刻Ｙは、現在の時刻である。タイムアウト時間Ｚは、全領域の診断処理を完了するまでに許される時間である。タイムアウト時間Ｚを過ぎた場合に故障診断はエラー終了する。現在時刻Ｙ、タイムアウト時間Ｚは、ＯＳ（Operating  System）のＴＩＣＫ割り込みで更新され、故障診断プログラムＰｒで参照される。
【００５３】
つぎに、実施の形態３に係る数値制御装置１０の故障診断処理手順について説明する。図８は、実施の形態３に係る数値制御装置の故障診断処理手順を示すフローチャートである。図８では、故障診断プログラムＰｒによる故障診断処理手順を示している。図８に示す処理のうち、実施の形態１，２に係る数値制御装置１０が行う処理と同様の処理についてはその説明を省略する。
【００５４】
割り込み発生器４が割り込み要因を発生させると、ＣＰＵ１は割り込みをロックするとともに、スタック領域を主記憶装置５からＥＣＣテンポラリメモリ６上にある割り込みスタック領域６６に変更する。そして、ＣＰＵ１は、故障診断プログラム領域６１内に格納されている故障診断プログラムＰｒを実行する。
【００５５】
具体的には、故障診断用グローバル変数リード部１３は、ＥＣＣテンポラリメモリ６上にある故障診断用グローバル変数領域６２Ｂから、現在時刻Ｙ、初回故障診断実施時刻Ｘ、タイムアウト時間Ｚをリードする（ステップＳ３１）。
【００５６】
ＣＰＵ１は、現在時刻Ｙと初回故障診断実施時刻Ｘを用いて、最初の故障診断を開始してからの経過時間を算出する。タイムアウト時間Ｚが経過したが全領域の変数診断処理が終わっていない場合（ステップＳ３２、Ｙｅｓ）、ＣＰＵ１は、故障診断をエラー終了する。タイムアウト時間Ｚが経過していなければ（ステップＳ３２、Ｎｏ）、故障診断用グローバル変数リード部１３は、故障診断用グローバル変数領域６２Ｂから診断領域サイズＰ、領域分割数Ｑ、カウンタ値Ｒ、実行プライオリティＷをリードする（ステップＳ３３）。
【００５７】
診断領域算出部１４は、最初の故障診断を開始してからの経過時間と、残りの診断領域数と、実行プライオリティＷと、を用いて診断領域ブロック位置（診断対象のブロック位置）と診断領域ブロック数（故障診断領域の数）を算出する（ステップＳ３４）。このとき、診断領域算出部１４は、最初の故障診断を開始してからの経過時間と、残りの故障診断領域数と、に基づいて、メイン処理の負荷状況を考慮した診断領域ブロック数（診断領域サイズ）を決定する。
【００５８】
例えば、残りの故障診断領域数に対して経過時間が長い場合（タイムアウト時間Ｚまでの残り時間が短い場合）は、メイン処理の負荷が大きな場合であり、診断領域算出部１４は、診断領域ブロック数を少なく設定する。一方、残りの故障診断領域数に対して経過時間が短い場合は、メイン処理の負荷が小さい場合であり、診断領域算出部１４は、診断領域ブロック数を多く設定する。なお、残りの診断領域数に対して経過時間が所定時間よりも少ない場合は、診断領域ブロック数を０に設定して、故障診断を行わなくてもよい。これにより、診断領域算出部１４は、メイン処理の負荷が軽い時を利用して故障診断を実施する。このように、本実施の形態の診断領域算出部１４は、メイン処理の負荷状況に応じて、診断領域ブロック数を動的に決定する。これにより、数値制御装置１０は、主記憶装置５の一部分の故障診断を行なう。
【００５９】
また、診断領域算出部１４は、実行プライオリティＷに基づいて、故障診断領域ブロック位置を決定する。具体的には、診断領域算出部１４は、故障診断領域Ｘ１〜Ｘｎの中から故障診断の完了していない故障診断領域であって、かつ実行プライオリティＷの一番高い故障診断領域を故障診断領域ブロック位置に決定する。そして、診断領域算出部１４は、算出した診断領域ブロック位置の先頭領域を診断ターゲット（故障診断領域）に設定し（ステップＳ３５）、繰り返し処理に入る。
【００６０】
繰り返し処理では、診断領域退避部１５が、故障診断領域内のデータをＥＣＣテンポラリメモリ６上にある故障診断時退避領域６７にコピーし（ステップＳ３６）、故障診断部１６が、故障診断領域の故障診断を実施する（ステップＳ３７）。
【００６１】
故障診断部１６による故障診断処理がエラーであった場合（ステップＳ３８、Ｙｅｓ）、ＣＰＵ１は、故障診断をエラー終了する。一方、故障診断部１６による故障診断処理がエラーでなかった場合（ステップＳ３８、Ｎｏ）、診断領域復元部１７は、ＥＣＣテンポラリメモリ６上にある故障診断時退避領域６７に退避させておいてデータを主記憶装置５上にある故障診断領域にコピーして戻す（ステップＳ３９）。そして、ＣＰＵ１は、診断領域ブロック数の故障診断処理を終了したか否かを確認する（ステップＳ４０）。
【００６２】
診断領域ブロック数の故障診断処理を終了していなければ（ステップＳ４０、Ｎｏ）、診断領域算出部１４は、故障診断処理を行った次の領域を診断ターゲットに設定し（ステップＳ４１）、繰り返し処理の先頭に戻る。ＣＰＵ１は、割り込み要因が無くなるまでステップＳ３６〜Ｓ４１の処理を繰り返す。
【００６３】
ＣＰＵ１は、診断領域ブロック数の故障診断処理を終了していれば（ステップＳ４０、Ｙｅｓ）、繰り返し処理から抜け出す。診断領域ブロック数の故障診断処理を終了することによって繰り返し処理から抜け出した後、カウンタ値更新部１８は、故障診断用グローバル変数領域６２のカウンタ値Ｒを更新する（ステップＳ４２）。
【００６４】
故障診断が最初の領域の故障診断であった場合、故障診断用グローバル変数領域６２Ｂの初回故障診断実施時刻Ｘを更新する（ステップＳ４３）。ＣＰＵ１は、スタック領域を割り込みスタック領域６６から主記憶装置５に戻すことによって、故障診断前のＣＰＵ状態を復元する。現在状態復元部１９は、スタック領域を故障診断前の状態に戻した後、割り込みのロックを解除し、故障診断を正常終了する。
【００６５】
このような数値制御装置１０では、故障診断プログラムＰｒ側でメイン処理の負荷状況を考慮しながら診断速度（診断領域ブロック数）を変更できるようになるので、メイン処理の負荷が軽い時を利用して故障診断を実施することができ、メイン処理の性能を下げずに主記憶装置５の故障診断を行うことができる。
【００６６】
このように実施の形態３によれば、最初の故障診断を開始してからの経過時間と、残りの診断領域数と、実行プライオリティＷと、を用いて診断領域ブロック位置と診断領域ブロック数を算出するので、メイン処理の負荷状況に応じたタイミングでメイン処理の負荷状況に応じたサイズの故障診断領域を故障診断することが可能となる。
【産業上の利用可能性】
【００６７】
以上のように、本発明に係る数値制御装置は、主記憶装置の故障診断に適している。
【符号の説明】
【００６８】
１  ＣＰＵ
２  システムバス
３  割り込み線
４  割り込み発生器
５  主記憶装置
６Ａ，６Ｂ  ＥＣＣテンポラリメモリ
１０  数値制御装置
１１  制御部
１２  現在状態保存部
１３  故障診断用グローバル変数リード部
１４  診断領域算出部
１５  診断領域退避部
１６  故障診断部
１７  診断領域復元部
１８  カウンタ値更新部
１９  現在状態復元部
６１  故障診断プログラム領域
６２Ａ，６２Ｂ  故障診断用グローバル変数領域
６６  割り込みスタック領域
６７  故障診断時退避領域
Ｐ  診断領域サイズ
Ｑ  領域分割数
Ｒ  カウンタ値
Ｗ  実行プライオリティ
Ｘ１〜Ｘｎ  故障診断領域
Ｘ  初回故障診断実施時刻
Ｙ  現在時刻
Ｚ  タイムアウト時間
【図１】
2011039667.tif 000003
【図２】
2011039667.tif 000004
【図３】
2011039667.tif 000005
【図４】
2011039667.tif 000006
【図５】
2011039667.tif 000007
【図６】
2011039667.tif 000008
【図７】
2011039667.tif 000009
【図８】
2011039667.tif 000010