(57)【要約】【課題】不揮発性メモリのデータの不正な変化によりシステムプログラムがブートできなくなる事態が発生しにくい制御装置を得ること。【解決手段】ブートプログラムに基づいて動作する制御手段は、システム用不揮発性メモリから第１のブートプログラムを読み出し、読み出した第１のブートプログラムが不正に変化していると判定したとき、バックアップ用不揮発性メモリから第２のブートプログラムを読み出す第１の手段と、バックアップ用不揮発性メモリから第２のブートプログラムを読み出した際、読み出した第２のブートプログラムが不正に変化していると判定したとき、エラーを出力する第２の手段と、を有する。【選択図】        図２
2010026650.tif 000002
【特許請求の範囲】
【請求項１】
初期化処理と、この初期化処理の実行後、システムプログラムの記憶先にジャンプするブート処理と、を含む第１のブートプログラムが記憶されるシステム用不揮発性メモリと、
前記第１のブートプログラムと同一内容の第２のブートプログラムが記憶されるバックアップ用不揮発性メモリと、
前記第１または第２のブートプログラムを読み出し、該読み出したブートプログラムに基づいて動作する制御手段と、
を備え、
前記制御手段は、
前記システム用不揮発性メモリから第１のブートプログラムを読み出し、該読み出した第１のブートプログラムに対して誤り検出演算をすることによって前記読み出した第１のブートプログラムが不正に変化しているか否かを判定し、不正に変化していないと判定したとき、前記読み出した第１のブートプログラムを用いて前記初期化処理およびブート処理を行い、不正に変化していると判定したとき、前記バックアップ用不揮発性メモリから前記第２のブートプログラムを読み出す第１の手段と、
前記バックアップ用不揮発性メモリから前記第２のブートプログラムを読み出した際、該読み出した第２のブートプログラムに対して誤り検出演算をすることによって前記読み出した第２のブートプログラムが不正に変化しているか否かを判定し、不正に変化していないと判定したとき、前記読み出した第２のブートプログラムを用いて前記初期化処理およびブート処理を行い、不正に変化していると判定したとき、エラーを出力する第２の手段と、
を有することを特徴とする制御装置。
【請求項２】
前記システム用不揮発性メモリには第１のシステムプログラムが記憶され、
前記バックアップ用不揮発性メモリには、前記第１のシステムプログラムと同一内容の第２のシステムプログラムが記憶され、
前記ブート処理は、前記システム用不揮発性メモリに記憶されている前記第１のシステムプログラムを読み出す処理であって、
前記制御手段は、
前記第１のシステムプログラムを読み出し、該読み出した第１のシステムプログラムに対して誤り検出演算をすることによって前記読み出した第１のシステムプログラムが不正に変化しているか否かを判定し、不正に変化していないと判定したとき、前記読み出した第１のシステムプログラムを用いて自制御装置の制御を開始し、不正に変化していると判定したとき、前記バックアップ用不揮発性メモリから前記第２のシステムプログラムを読み出す第３の手段と、
前記バックアップ用不揮発性メモリから前記第２のシステムプログラムを読み出した際、該読み出した第２のシステムプログラムに対して誤り検出演算をすることによって前記読み出した第２のシステムプログラムが不正に変化しているか否かを判定し、不正に変化していないと判定したとき、前記読み出した第２のシステムプログラムを用いて自制御装置の制御を開始し、不正に変化していると判定したとき、エラーを出力する第４の手段と、
をさらに備えることを特徴とする請求項１に記載の制御装置。
【請求項３】
前記第１および第２のブートプログラムは、所定第１の条件が成立する毎に、前記バックアップ用不揮発性メモリに記憶されている第２のブートプログラムで前記システム用不揮発性メモリに記憶されている第１のブートプログラムを上書きする第１の上書き処理を行う命令をさらに含み、
前記第１の上書き処理は、
前記ブート処理を行う前または前記第１もしくは第２のシステムプログラムが前記制御処理を終了する際に実行される、
ことを特徴とする請求項２に記載の制御装置。
【請求項４】
前記第１および第２のシステムプログラムは、所定第２の条件が成立する毎に、前記バックアップ用不揮発性メモリに記憶されている第２のシステムプログラムで前記システム用不揮発性メモリに記憶されている第１のシステムプログラムを上書きする第２の上書き処理を行う命令をさらに含み、
前記第２の上書き処理は、
前記制御処理を行う前または前記制御処理を終了する際に実行される、
ことを特徴とする請求項２または３に記載の制御装置。
【請求項５】
前記所定第１の条件は、前記第１の上書き処理が行われてから前記ブート処理が所定の回数実行されるかまたは所定の時間が経過するか、であることを特徴とする請求項３に記載の制御装置。
【請求項６】
前記所定第２の条件は、前記第２の上書き処理が行われてから前記制御処理が所定の回数開始されるかまたは所定の時間が経過するか、であることを特徴とする請求項４に記載の制御装置。
【請求項７】
前記第１の上書き処理は、前記第１のブートプログラムの上書き領域を複数に分割し、一回の前記ブート処理につき前記分割された一つの領域を上書きすることを特徴とする請求項３または５に記載の制御装置。
【請求項８】
前記第２の上書き処理は、前記第１のシステムプログラムの上書き領域を複数に分割し、一回の前記制御処理実行開始につき前記分割された１つの領域を上書きすることを特徴とする請求項４または６に記載の制御装置。
【請求項９】
前記システム用不揮発性メモリは、シリコンウェハから作製された半導体メモリであって、記憶しているデータが経時的に不正に変化する可能性を有する、ことを特徴とする請求項１〜８の何れか１つに記載の制御装置。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、不揮発性メモリにブートプログラムを記憶する制御装置に関する。
【背景技術】
【０００２】
従来、システムの起動データ記憶場所を不揮発性メモリとしている数値制御装置（以下、ＮＣ装置という）において、不揮発性メモリのウェハ製造過程で発生する結晶欠陥などにより、経時的に電荷が抜けることで不正にビット変化が発生した場合、該不揮発性メモリに記憶されたプログラムのデータが不正に変化し、システムが起動できない、あるいは起動したあとに正しい処理を実行できないという不具合が生じる。
【０００３】
不揮発性メモリのデータ復元方法としては、不揮発性メモリに記憶されたデータが本来意図するデータ値と異なった値になった場合、同じデータをバックアップ領域に記憶しておき、演算処理時に両者のデータ値を比較しデータの正当性を確認しながら動作する技術が開示されている（例えば、特許文献１参照）。
【０００４】
また、不揮発性メモリに記憶されたデータの書き換えを行う際に、当該データの書き換えに先立って、書き換え対象データを複製したものをバックアップデータとして保存し、書き換え実施状況を示すフラグを用いることで、書き換えが行なわれたデータが正常に処理されたものか否かを判断し正当性を確認してから動作する方法が開示されている（例えば、特許文献２参照）。
【０００５】
【特許文献１】特開２００４−２２０５８０号公報
【特許文献２】特開２００７−３２８４３８号公報
【発明の開示】
【発明が解決しようとする課題】
【０００６】
しかしながら、上記特許文献１および２に示されるデータ復元方法は、システムに障害を及ぼすデータの変化が、システムによる不揮発性メモリ上へのデータ書き換え行為による誤作動やデータ書き換え中の電源遮断による書き換え処理異常の結果として捉えられていることから、不揮発性メモリ上で発生するユーザーパラメータなどシステム起動に影響しないデータ領域の破損に対する方策であり、システムが正常に起動することを前提とした処置であるため、ブートプログラムや該ブートプログラムによりブートされるシステムプログラムなどシステム起動に関係するデータが破損した場合の処置ができない、という問題があった。
【０００７】
本発明は、上記に鑑みてなされたものであって、不揮発性メモリのデータの不正な変化によりシステムプログラムがブートできなくなる事態が発生しにくい制御装置を得ることを目的とする。
【課題を解決するための手段】
【０００８】
上述した課題を解決し、目的を達成するために、本発明は、初期化処理と、この初期化処理の実行後、システムプログラムの記憶先にジャンプするブート処理と、を含む第１のブートプログラムが記憶されるシステム用不揮発性メモリと、前記第１のブートプログラムと同一内容の第２のブートプログラムが記憶されるバックアップ用不揮発性メモリと、前記第１または第２のブートプログラムを読み出し、該読み出したブートプログラムに基づいて動作する制御手段と、を備え、前記制御手段は、前記システム用不揮発性メモリから第１のブートプログラムを読み出し、該読み出した第１のブートプログラムに対して誤り検出演算をすることによって前記読み出した第１のブートプログラムが不正に変化しているか否かを判定し、不正に変化していないと判定したとき、前記読み出した第１のブートプログラムを用いて前記初期化処理およびブート処理を行い、不正に変化していると判定したとき、前記バックアップ用不揮発性メモリから前記第２のブートプログラムを読み出す第１の手段と、前記バックアップ用不揮発性メモリから前記第２のブートプログラムを読み出した際、該読み出した第２のブートプログラムに対して誤り検出演算をすることによって前記読み出した第２のブートプログラムが不正に変化しているか否かを判定し、不正に変化していないと判定したとき、前記読み出した第２のブートプログラムを用いて前記初期化処理およびブート処理を行い、不正に変化していると判定したとき、エラーを出力する第２の手段と、を有することを特徴とする。
【発明の効果】
【０００９】
この発明によれば、不揮発性メモリのデータの不正な変化によりシステムプログラムがブートできなくなる事態が発生しにくい制御装置を得る、という効果を奏する。
【発明を実施するための最良の形態】
【００１０】
本発明は、ブートプログラムを不揮発性メモリに記憶する一般的な制御装置に適用できるものであるが、以下においては本発明をＮＣ装置に適用した場合の実施の形態を図面に基づいて詳細に説明する。なお、この実施の形態によりこの発明が限定されるものではない。
【００１１】
実施の形態１．
図１は、本発明にかかるＮＣ装置の実施の形態１の構成を示す図である。図１において、ＮＣ装置１は、ＨＭＩ（Ｈｕｍａｎ  Ｍａｃｈｉｎｅ  Ｉｎｔｅｒｆａｃｅ）および工作機械を制御する制御手段であるＣＰＵ１００と、ブートプログラムおよび該ブートプログラムにより起動される、ＯＳ、アプリケーションプログラムなど、ＮＣ装置１の動作を制御（以降、制御処理という）する基本プログラムであるシステムプログラムを含むデータを記憶する不揮発性メモリからなるフラッシュメモリであるシステム用ＲＯＭ１０１と、バックアップとしてシステム用ＲＯＭ１０１に記憶される前記するブートプログラムおよびシステムプログラムと同一のプログラムを記憶する不揮発性メモリからなるフラッシュメモリであるバックアップ用ＲＯＭ１０２と、ユーザの各種パラメータを記憶する揮発性メモリからなるＳＲＡＭなどであるパラメータ格納用ＲＡＭ１０３と、システムプログラムの展開と各種演算処理を行うワークメモリ１０４と、ＨＭＩ用のモニター１０５と、工作機械上の各種Ｉ／Ｏと通信するためのＩ／Ｏインターフェース１０６と、これらのメモリ制御およびＩ／Ｏ制御をするためのＡＳＩＣ１０７とから構成される。
【００１２】
なお、ＨＭＩの制御を、工作機械制御用ＣＰＵ１００とは別のＨＭＩ専用のＣＰＵで実現するように構成してもよい。また、システム用ＲＯＭ１０１とバックアップ用ＲＯＭ１０２は、同一のチップ上で実現してもよいし、個別のチップとして基板上に実装し構成するようにしてもよい。さらに、バックアップ用ＲＯＭ１０２は、バックアップ用領域として、バッテリーなどで常時バックアップされ、揮発性メモリで構成されるＳＲＡＭを用いたパラメータ格納用ＲＡＭ１０３の一部を用いるようにしても良い。これらバックアップ用領域にいずれのデバイスを用いるかは、システムとしてのコスト、実装面積などを考慮して構成するようにすればよい。
【００１３】
次に、システム用ＲＯＭ１０１およびバックアップ用ＲＯＭ１０２のメモリ構成を説明する。図２は、システム用ＲＯＭ１０１およびバックアップ用ＲＯＭ１０２のメモリ構成を説明する図である。図２において、システム用ＲＯＭ１０１には、ブートプログラムを構成するブートデータ群２００、該ブートデータ群２００のチェックサム値２０１、システムプログラムを構成するシステムデータ群２０２および該システムデータ群２０２のチェックサム値２０３を記憶している。また、バックアップ用ＲＯＭ１０２には、各データ群と同一のデータ群およびチェックサム値として、ブートデータ群２０７、チェックサム値２０８、システムデータ群２０９およびチェックサム値２１０を記憶している。
【００１４】
続いて、システム用ＲＯＭ１０１およびバックアップ用ＲＯＭ１０２に記憶されているブートデータ群２００、２０７が構成するブートプログラムの主要な仕様を述べる。ブートプログラムは、ＣＰＵ１００に、自身および自身と同じＲＯＭに記憶されている自身に関するチェックサム値２０１、２０８をＣＰＵ１００の内部レジスタに転送させ、該転送されたブートデータ群２０４についてチェックサム演算し、演算結果のチェックサム値２０６と転送されてきたチェックサム値２０５とを比較して誤り検出を行うブートデータチェック処理を行うよう、プログラムされている。すなわち、ブートプログラムは、不揮発性メモリに経時的に発生する電荷抜けによる不正なビット変化により、自身のデータにデータが不正に変化（以下、データ不正変化という）していないことを確認する。また、該ブートプログラムは、該ブートデータチェック処理の後、ＮＣ装置１の初期化処理を行い、該初期化処理の後、システムデータ群にＣＰＵ１００の読み出し先をジャンプさせるブート処理を行うよう、プログラムされている。
【００１５】
さらに、該ブートプログラムは、第１の起動回数カウンタを用いてブート回数をカウントし、該ブート回数が所定の値に到達したか否かを判定する第１のカウント処理をブート処理直前に行い、該ブート回数が所定の回数に到達したとき、ブートデータ群２０７およびチェックサム値２０８でブートデータ群２００およびチェックサム値２０１を上書きする第１の上書き処理を、ブート処理直前またはシステムの終了処理時のうちの予め設定されているタイミングで行うよう、プログラムされている。この上書き処理により、システム用ＲＯＭにおける電荷を再チャージし、システム用ＲＯＭにおける電荷抜けの発生を抑えることができる。ここで、第１の起動回数カウンタを設ける位置については特に限定しないが、例えばシステム用ＲＯＭ１０１の各種データの記憶に使用されていない部分に設けるようにしてもよい。
【００１６】
システム用ＲＯＭ１０１およびバックアップ用ＲＯＭ１０２に記憶されているシステムデータ群２０２、２０９が構成するシステムプログラムの主要な仕様を述べる。システムプログラムは、ＣＰＵ１００に、自身および自身と同じＲＯＭに記憶されている自身に関するチェックサム値２０３、２１０をワークメモリ１０４に転送させ、前記するブートプログラムと同様に、転送されたシステムデータ群２１１についてチェックサム演算し、演算結果のチェックサム値２１３と転送されてきたチェックサム値２１２とを比較して誤り検出を行うシステムデータチェック処理を行うよう、プログラムされている。該システムプログラムは、該システムデータチェック処理の後、制御処理を開始する。
【００１７】
さらに、該システムプログラムは、前記するブートプログラムと同様に、制御処理開始直後に、第２の起動回数カウンタを用いて制御処理開始回数をカウントし、該制御処理開始回数が所定の値に到達したか否かを判定する第２のカウント処理を行い、該制御処理開始回数が所定の回数に到達したとき、システムデータ群２０９およびチェックサム値２１０でシステムデータ群２０２およびチェックサム値２０３を上書きする第２の上書き処理を、該カウント処理の直後またはシステムの終了処理時のうちの予め設定されているタイミングで行うよう、プログラムされている。第２の起動回数カウンタを設ける位置については、前記する第１の起動回数カウンタと同様に、特に限定しない。
【００１８】
次に、以上のように構成された本発明の実施の形態１のＮＣ装置１の動作を説明する。最初に、動作の概略を説明する。図３は、ＮＣ装置１の動作の概略を説明するフローチャートである。
【００１９】
図３において、電源投入後、ＣＰＵ１００は、システム用ＲＯＭ１０１に記憶されているブートデータ群２００またはバックアップ用ＲＯＭ１０２に記憶されているブートデータ群２０７を読み出し、読み出したブートデータ群のブートプログラムに基づいて、読み出し元のブートデータ群についてチェックサム演算を実行し、データ不正変化があるか否かを確認するブートデータチェック処理を行う（ステップＳ３０１）。そして、ＣＰＵ１００は、データ不正変化がないことが確認されたブートデータ群のブートプログラムに基づいてＮＣ装置１の初期化処理を行う（ステップＳ３０２）。この直後、ＣＰＵ１００は、ブートプログラムに基づいて、第１のカウント処理と、設定内容によっては第１の上書き処理と、を実行する。そして、ＣＰＵ１００は、ブートプログラムに基づいて、システムデータ群２０２にジャンプするブート処理を実行し、ブートプログラムからシステムプログラムに制御を移す（ステップＳ３０３）。
【００２０】
続いて、ＣＰＵ１００は、システムデータ群２０２またはシステムデータ群２０９を読み出し、読み出したシステムデータ群によるシステムプログラムに基づいて、読み出し元のシステムデータ群についてチェックサム演算を実行し、データ不正変化があるか否かを確認するシステムデータチェック処理を行う（ステップＳ３０４）。そして、ＣＰＵ１００は、データ不正変化がないことが確認されたシステムデータ群のシステムプログラムに基づいて、制御処理を実行開始する（ステップＳ３０５）。この直後、ＣＰＵ１００は、システムプログラムに基づいて、第２のカウント処理と、設定内容によっては第２の上書き処理と、を実行する。そして、ＮＣ装置１は、システム稼動状態となる（ステップＳ３０６）。
【００２１】
次に、ＣＰＵ１００は、所定のタイミングで、制御処理の終了を開始する（ステップＳ３０７）。ここで、第１および第２の上書き処理を終了処理時に行う設定になっている場合、ＣＰＵ１００は、システム用ＲＯＭ１０１に記憶されている該当データ群と該当チェックサム値とをバックアップ用ＲＯＭ１０２に記憶されている該当データ群と該当チェックサム値とで上書きコピーする。そして、終了処理が終わると、電源ｏｆｆ状態となる。
【００２２】
次に、図３に示したフローチャートの各動作ステップをさらに詳しく説明する。図４は、ステップＳ３０１〜３０３の動作を詳しく説明するフローチャートである。なお、以降の説明において、ＣＰＵ１００の各動作を制御するプログラムは、特に記述しない限りＣＰＵ１００がその時点で読んでいるデータ群により構成されるプログラムであるとする。
【００２３】
図４において、ＣＰＵ１００は、ＡＳＩＣ１０７の設定により、ブートデータ群２００が記憶されている領域の先頭番地から該ブートデータ群２００を読み出す。そして、ＣＰＵ１００は、ブートデータ群２００およびチェックサム値２０１をＣＰＵ１００の内部レジスタに転送する。そして、ＣＰＵ１００は、転送されたブートデータ群２０４についてチェックサム演算を行う（ステップＳ４０１）。そして、ＣＰＵ１００は、算出したチェックサム値２０６と内部レジスタに転送されたチェックサム値２０５とを比較し、一致するか否かを判定する（ステップＳ４０２）。
【００２４】
双方のチェックサム値が一致した場合（ステップＳ４０２、Ｙｅｓ）、ブートデータ群２００は正常なデータである、すなわちデータ不正変化が起こっていないとし、ＣＰＵ１００はシステム用ＲＯＭ１０１から転送されてきたブートデータ群２０４から成るブートプログラムに基づいて初期化処理を実行する（ステップＳ４０３）。双方のチェックサム値が一致しない場合（ステップＳ４０２、Ｎｏ）、ブートデータ群２００は異常である、すなわちデータ不正変化が起こっているとし、ＣＰＵ１００の読み出し先がバックアップ用ＲＯＭ１０２のブートデータ群２０７が記憶されている領域の先頭番地にジャンプし、ＣＰＵ１００は、ブートデータ群２０７およびチェックサム値２０８をＣＰＵ１００の内部レジスタに転送し、転送されたブートデータ群２０４についてチェックサム演算を行う（ステップＳ４０４）。そして、ＣＰＵ１００は、算出したチェックサム値２０６と内部レジスタに転送されたチェックサム値２０５とを比較し、一致するか否かを判定する（ステップＳ４０５）。
【００２５】
双方のチェックサム値が一致した場合（ステップＳ４０５、Ｙｅｓ）、バックアップ用ＲＯＭ１０２に記憶されているブートデータ群２０７は正常なデータであるとし、ＣＰＵ１００はバックアップ用ＲＯＭ１０２から転送されてきたブートデータ群２０４から成るブートプログラムに基づいて初期化処理を実行する（ステップＳ４０３）。双方のチェックサム値が一致しない場合（ステップＳ４０５、Ｎｏ）、バックアップ用ＲＯＭ１０２に記憶されているブートデータ群２０７も異常であるとし、ＣＰＵ１００は初期化処理およびブート処理を行わずに終了する（ステップＳ４０６）。このとき、モニター１０５にデータ値不正を示す表示を行い、ユーザに対する情報の開示を行う。
【００２６】
ステップＳ４０３においてブート処理が実行されたあと、第１のカウント処理に移行する。ＣＰＵ１００は、まず、第１の起動回数カウンタの値と予め設定されているブート処理の実行回数である第１の設定回数とが等しいか否か判定し（ステップＳ４０７）、第１の起動回数カウンタの値が第１の設定回数未満であるとき（ステップＳ４０７、Ｎｏ）、第１の起動回数カウンタの値をインクリメントし（ステップＳ４１１）、ブート処理を実行する（ステップＳ４１２）。
【００２７】
第１の起動回数カウンタの値が第１の設定回数と等しいとき（ステップＳ４０７、Ｙｅｓ）、ＣＰＵ１００は、第１の上書き処理を終了時に行う設定になっているか否かを判定し（ステップＳ４０８）、終了時に行う設定である場合（ステップＳ４０８、Ｙｅｓ）、第１の起動回数カウンタをクリアし（ステップＳ４１０）、ステップＳ４１２に移行する。終了時に上書き処理を行う設定になっていない場合（ステップＳ４０８、Ｎｏ）、ＣＰＵ１００は、バックアップ用ＲＯＭ１０２に記憶されているブートデータ群２０７およびチェックサム値２０８でシステム用ＲＯＭ１０１に記憶されているブートデータ群２００およびチェックサム値２０１を上書きコピーし（ステップＳ４０９）、ステップＳ４１０に移行する。
【００２８】
次に、図２におけるステップＳ３０４およびステップＳ３０５に関する詳細な説明を行う。図５は、ステップＳ３０４およびステップＳ３０５の動作を詳しく説明するフローチャートである。
【００２９】
図５において、ＣＰＵ１００は、システム用ＲＯＭ１０１のシステムデータ群２０２が記憶されている領域の先頭番地から読み出し、システムデータ群２０２およびチェックサム値２０３をＡＳＩＣ１０７経由でワークメモリ１０４に転送し、転送されたシステムデータ群２１１についてチェックサム演算を行う（ステップＳ５０１）。そして、ＣＰＵ１００は、算出したチェックサム値２１３と転送されたチェックサム値２１２とを比較し、一致するか否かを判定する（ステップＳ５０２）。
【００３０】
双方のチェックサム値が一致した場合（ステップＳ５０２、Ｙｅｓ）、システムデータ群２０２は正常なデータであるとし、ＣＰＵ１００はシステム用ＲＯＭ１０１から転送されてきたシステムデータ群２１１から成るシステムプログラムに基づいて、制御処理を実行開始する（ステップＳ５０３）。双方のチェックサム値が一致しない場合（ステップＳ５０２、Ｎｏ）、システムデータ群２０２は異常であるとし、ＣＰＵ１００の読み出し先がバックアップ用ＲＯＭ１０２のシステムデータ群２０９が記憶されている領域の先頭番地にジャンプし、ＣＰＵ１００は、バックアップ用ＲＯＭ１０２に記憶されるシステムデータ群２０９およびチェックサム値２１０をＡＳＩＣ１０７経由でワークメモリ１０４に転送し、転送されたシステムデータ群２１１についてチェックサム演算を行う（ステップＳ５０４）。そして、ＣＰＵ１００は、算出したチェックサム値２１３と転送されたチェックサム値２１２とを比較し、一致するか否かを判定する（ステップＳ５０５）。
【００３１】
双方のチェックサム値が一致した場合（ステップＳ５０５、Ｙｅｓ）、バックアップ用ＲＯＭ１０２に記憶されているシステムデータ群２０２は正常なデータであるとし、ＣＰＵ１００はバックアップ用ＲＯＭ１０２から転送されてきたシステムデータ群２１１から成るシステムプログラムを実行する（ステップＳ５０３）。双方のチェックサム値が一致しない場合（ステップＳ５０５、Ｎｏ）、バックアップ用ＲＯＭ１０２に記憶されているシステムデータ群２０９も異常であるとし、ＣＰＵ１００は処理を終了する（ステップＳ５０６）。このとき、モニター１０５にデータ値不正を示す表示を行い、ユーザに対する情報の開示を行う。
【００３２】
ステップＳ５０３において制御処理が実行開始されたあと、第２のカウント処理に移行する。ＣＰＵ１００は、まず、第２の起動回数カウンタの値と予め設定されている制御処理開始回数である第２の設定回数とを比較して等しいか否かを判定し（ステップＳ５０７）、第２の起動回数カウンタの値が第２の設定回数未満であるとき（ステップＳ５０７、Ｎｏ）、第２の起動回数カウンタの値をインクリメントし（ステップＳ５１１）、システムが起動状態に移行する。
【００３３】
第２の起動回数カウンタの値が第２の設定回数と等しいとき（ステップＳ５０７、Ｙｅｓ）、ＣＰＵ１００は、第２の上書き処理を終了処理時に行う設定になっているか否かを判定し（ステップＳ５０８）、終了処理時に行う設定である場合（ステップＳ５０８、Ｙｅｓ）、第２の起動回数カウンタをクリアし（ステップＳ５１０）、システムが起動状態に移行する。終了処理時に上書き処理を行う設定になっていない場合（ステップＳ５０８、Ｎｏ）、ＣＰＵ１００は、バックアップ用ＲＯＭ１０２に記憶されているシステムデータ群２０９およびチェックサム値２１０でシステム用ＲＯＭ１０１に記憶されているシステムデータ群２０２およびチェックサム値２０３を上書きコピーし（ステップＳ５０９）、ステップＳ５１０に移行する。
【００３４】
ここで、第１および第２の上書き処理は、該当するデータを複数に分割し、一回の電源ｏｎから電源ｏｆｆまでの動作で分割された一部のみ上書き処理し、分割された数だけ電源ｏｎから電源ｏｆｆまでの動作が行われることによって該当するデータ群が完全に上書きされるようにしてもよい。
【００３５】
次に、図２におけるステップＳ３０７の動作を詳しく説明する。図６はステップＳ３０７の動作を詳しく説明するフローチャートである。ステップＳ３０７の動作の説明においては、ｍ回の電源ｏｎ〜電源ｏｆｆの動作で完全に上書きが完了するように設定されており、第１および第２の設定回数が同値に設定されており、ＮＣ装置１のシステムが稼動状態になっている時点で第１の起動回数カウンタの値と第２の起動回数カウンタの値とが同じ値をとる設定となっていることとして説明する。すなわち、第１の上書き処理と第２と上書き処理とを同時に実行するとしている。なお、図６に示す動作は、システムプログラムに基づいて行われる。
【００３６】
図６において、終了処理が開始されると、ＣＰＵ１００は、工作機械を正常に終了させるためのパラメータ退避など各種終了処理であるＮＣ終了処理を実行する（ステップＳ６０１）。そして、ＣＰＵ１００は、終了処理時に第１または第２の上書き処理を実行する設定になっているか否かを判定し（ステップＳ６０２）、終了処理時に上書き処理する設定になっていない場合（ステップＳ６０２、Ｎｏ）、上書きコピーを行うことなく電源ｏｆｆとなる。終了時に上書き処理する設定になっている場合（ステップＳ６０２、Ｙｅｓ）、ステップＳ６０３に移行する。
【００３７】
図７は、不揮発性メモリ上のデータ分割、分割サイズ、および書き換え回数カウンタレジスタを説明する図である。図７において、ｍ個に分割される場合、７００に示すように、領域がｍ等分されている。分割数ｍは、分割サイズレジスタ７０１に保持されるようにしておく。また、各上書きコピー処理時に分割されたシステム用ＲＯＭ１０１のどの領域を上書きコピーするかを算出するために、書き換え回数カウンタレジスタ７０２を設ける。分割サイズレジスタ７０１および書き換え回数カウンタレジスタ７０２を設ける場所は特に限定しないが、たとえば前記する第１および第２の起動回数カウンタと同様に、システム用ＲＯＭ１０１の使用されていない部分に設けるようにしてよい。書き換え回数カウンタレジスタ７０２の値をｉ（初期値はｉ＝ｍ）ということとする。システム用ＲＯＭ１０１に第１および第２の起動回数カウンタ、分割サイズレジスタ７０１、および書き換え回数カウンタレジスタ７０２を設ける場合、値を以降に引き継ぐために、これらが設けられている領域は上書き処理しないようにする。
【００３８】
図６に戻り、終了時に上書き処理する設定になっている場合（ステップＳ６０２、Ｙｅｓ）、ＣＰＵ１００は、第１または第２の起動回数カウンタの値からｍを引いた値が０以上か否かを判定する（ステップＳ６０３）。第１または第２の起動回数カウンタの値からｍを引いた値が０以上である場合（ステップＳ６０３、Ｙｅｓ）、ＣＰＵ１００は上書きコピーを行うことなくシステム終了となる。第１または第２の起動回数カウンタの値からｍを引いた値が０以上ではない場合（ステップＳ６０３、Ｎｏ）、ＣＰＵ１００は、書き換え回数カウンタレジスタ７０２の値ｉが０を超えるか否かをさらに判定する（ステップＳ６０４）。ｎが０を超えない場合（ステップＳ６０４、Ｎｏ）、ＣＰＵ１００は書き換え回数カウンタレジスタ７０２の値ｉを初期値のｍとし、上書き処理を行うことなくシステム終了となる。
【００３９】
ｉが０を超える場合（ステップＳ６０４、Ｙｅｓ）、ＣＰＵ１００はシステム用ＲＯＭ１０１のベースアドレスからｍ−ｉ分だけオフセットされた番地のｍ等分されたデータを上書きコピー対象とし、該当する部分のデータをバックアップ用ＲＯＭ１０２から読み出してシステム用ＲＯＭ１０１に上書きコピーする（ステップＳ６０６）。例えばｉ＝ｍの場合、分割サイズレジスタ７０１で設定されたｍ等分設定により、システム用ＲＯＭ１０１においてｍ等分に分割された領域のベースアドレスから１つ目の領域のデータが上書きコピーされることにより、システム用ＲＯＭ１０１に再度電荷チャージが実行される。そして、ＣＰＵ１００は、書き換え回数カウンタレジスタ７０２の値ｉをデクリメントし（ステップＳ６０７）、システム終了となる。
【００４０】
上書きの動作は、書き換え回数カウンタレジスタの値が０になるまで繰り返されることで、ｍ等分されたシステム用ＲＯＭ１０１領域のデータをｍ回の終了処理で上書きを実施することができる。ただし、この上書き回数設定は、一回の終了処理時間に影響の出ない程度に任意に設定するものとし、特に終了処理時間に規定が無い場合には、分割サイズレジスタ７０１および書き換え回数カウンタレジスタ７０２を１に設定することにより一回の終了処理で上書き処理を完了させることができる。
【００４１】
ところで、以上の説明においては、データの異常を検出する誤り検出方法にサムチェック演算を行うとして説明したが、誤り検出方法はサムチェック演算に限定しない。例えば、サムチェック演算の替わりに巡回冗長検査を行うようにしてもよい。
【００４２】
このように、実施の形態１によれば、システムデータ群をブートするブートプログラムを構成するブートデータ群をシステム用ＲＯＭおよびバックアップ用ＲＯＭに記憶し、ブートプログラムは、システム用ＲＯＭに記憶されているブートデータ群が不正に変化している場合はバックアップ用ＲＯＭに記憶されているブートデータ群を用いてシステムの初期化とシステムデータのブートをできるようにしたので、ブートデータの不正な変化によりシステムプログラムがブートできなくなる事態を起こりにくくすることができる。また、システムプログラムについても、上述のブートプログラムと同様に、構成するシステムデータ群がシステム用ＲＯＭおよびバックアップ用ＲＯＭに記憶されるとともに、システム用ＲＯＭに記憶されているシステムデータ群が不正に変化している場合はバックアップ用ＲＯＭに記憶されているシステムデータ群からシステムを起動できるようにしたので、システムデータの不正な変化によりシステムが起動できなくなる事態を発生しにくくすることができる。また、ブートプログラムおよびシステムプログラムは、予め設定された回数だけブート処理およびシステム起動を行ったとき、バックアップ用ＲＯＭに記憶されている自身のデータでシステム用ＲＯＭに記憶されている自身のデータを上書き処理、すなわちシステム用ＲＯＭにおける電荷を再チャージをするようにしたので、データの不正変化の発生確率を低減することができる。また、ブートデータ群およびシステムデータ群を夫々分割し、一回の上書き処理で分割された一部を上書き処理し、複数の電源ｏｎから電源ｏｆｆまでの動作で全データ群の上書きを完了するようにもできるようにしたので、ブートデータ群およびシステムデータ群のデータ量が多くなっても、上書き一回当たりにかかる時間を少なくすることができ、システム終了時に上書きする場合、システム終了処理にかかる時間を短縮することができる。
【００４３】
実施の形態２．
実施の形態１においては、起動回数をトリガー条件として上書き処理によって電荷再チャージを行うようにしたが、異なるさらに別の実施の形態２として、電荷再チャージのトリガー条件を累積時間としたＮＣ装置について説明する。
【００４４】
本実施の形態２のＮＣ装置１には、第１、第２の起動回数カウンタの替わりに第１、第２の累積時間レジスタが設けられている。さらに、ブートプログラムは、ブートプログラムの上書き処理を実行したとき、第１の累積時間レジスタに処理時の時刻を書き込む。システムプログラムは、システムプログラムの上書き処理が実行されたとき、第２の累積時間レジスタに処理時の時刻を書き込む。
【００４５】
図８および図９に実施の形態２のＮＣ装置のシステム起動までの動作を説明するフローチャートを示す。図８において、ステップＳ８０１〜ステップＳ８０６の動作は、図４におけるステップＳ４０１〜ステップＳ４０６のＮＣ装置１の動作と同様であるので、説明を省略する。ステップＳ８０３において、ＣＰＵ１００が初期化処理を実行すると、ＣＰＵ１００は、図示しないＲＴＣ（Real  Time  Clock）などから現在時刻を取得して第１の累積時間レジスタの値を引くことによって最後にブートデータ群の上書き処理を行ってからの累積時間を算出し、累積時間が予め設定された設定時間以上の値であるか否かを判定する処理を行う（ステップＳ８０７）。ここで、設定時間に、不揮発性メモリに電荷が印加されてからデータ不正変化発生の増加する時間を考慮して適切に設定するようにするとよい。累積時間が設定時間未満の値である場合（ステップＳ８０７、Ｎｏ）、ブート処理を実行する（ステップＳ８１０）。累積時間が設定時間以上の値である場合（ステップＳ８０７、Ｙｅｓ）、ＣＰＵ１００は、システム用ＲＯＭ１０１に記憶されているブートデータ群２００およびチェックサム値２０１を上書きコピーし（ステップＳ８０８）、改めて現在時刻を取得して取得した現在時刻で第１の累積時間レジスタを上書きし（ステップＳ８０９）、ステップＳ８１０に移行する。
【００４６】
図８においてブート処理が実行された後、図９のステップＳ９０１に移行する。図９におけるステップＳ９０１〜ステップＳ９０６の動作は、図５におけるステップＳ５０１〜ステップＳ５０６のＮＣ装置１の動作と同様であるので、説明を省略する。ステップＳ９０３において制御処理を実行開始すると、ＣＰＵ１００は、現在時刻を取得して第２の累積時間レジスタの値を引くことによって最後にシステムデータ群の上書き処理を行ってからの累積時間を算出し、累積時間が予め設定された設定時間以上の値であるか否かを判定する処理を行う（ステップＳ９０７）。ここでの設定時間は、ステップＳ８０７において使用される設定時間と同じであっても異なっていてもかまわない。
【００４７】
累積時間が設定時間未満の値である場合（ステップＳ９０７、Ｎｏ）、システムが起動される。累積時間が設定時間以上の値である場合（ステップＳ９０７、Ｙｅｓ）、ＣＰＵ１００は、システム用ＲＯＭ１０１に記憶されているシステムデータ群２０２およびチェックサム値２０３を上書きコピーし（ステップＳ９０８）、改めて現在時刻を取得して取得した現在時刻で第２の累積時間レジスタを上書きし（ステップＳ９０９）、システムが起動される。
【００４８】
このように、実施の形態２によれば、不揮発性メモリに対して電荷を印加してからの累積時間を把握することで、ある程度予測可能なデータ不正変化の発生時間が経つ前に上書き処理を行い、データ不正変化の発生を低減することができる。
【産業上の利用可能性】
【００４９】
以上のように、本発明にかかる制御装置は、不揮発性メモリにブートプログラムを記憶する制御装置に適用して好適である。
【図面の簡単な説明】
【００５０】
【図１】本発明にかかるＮＣ装置の実施の形態１の構成を示す図である。
【図２】システム用ＲＯＭおよびバックアップ用ＲＯＭのメモリ構成を説明する図である。
【図３】ＮＣ装置の動作の概略を説明するフローチャートである。
【図４】本発明にかかるＮＣ装置の実施の形態１の動作を説明するフローチャートである。
【図５】本発明にかかるＮＣ装置の実施の形態１の動作を説明するフローチャートである。
【図６】ステップＳ３０７の動作を詳しく説明するフローチャートである。
【図７】不揮発性メモリ上のデータ分割、分割サイズ、および書き換え回数カウンタレジスタを説明する図である。
【図８】本発明にかかるＮＣ装置の実施の形態２の動作を詳細に説明するフローチャートである。
【図９】本発明にかかるＮＣ装置の実施の形態２の動作を詳細に説明するフローチャートである。
【符号の説明】
【００５１】
１  ＮＣ装置
１００  ＣＰＵ
１０１  システム用ＲＯＭ
１０２  バックアップ用ＲＯＭ
１０３  パラメータ格納用ＲＡＭ
１０４  ワークメモリ
１０５  モニター
１０６  Ｉ／Ｏインターフェース
１０７  ＡＳＩＣ
２００  ブートデータ群
２０１  チェックサム値
２０２  システムデータ群
２０３  チェックサム値
２０４  ブートデータ群
２０５  チェックサム値
２０６  チェックサム値
２０７  ブートデータ群
２０８  チェックサム値
２０９  システムデータ群
２１０  チェックサム値
２１１  システムデータ群
２１２  チェックサム値
２１３  チェックサム値
７０１  分割サイズレジスタ
７０２  書き換え回数カウンタレジスタ
【図１】
2010026650.tif 000003
【図２】
2010026650.tif 000004
【図３】
2010026650.tif 000005
【図４】
2010026650.tif 000006
【図５】
2010026650.tif 000007
【図６】
2010026650.tif 000008
【図７】
2010026650.tif 000009
【図８】
2010026650.tif 000010
【図９】
2010026650.tif 000011